家電維修班,手機維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動工具維修班、電動車摩托車維修班、網絡營銷培訓、網站設計培訓、淘寶培訓---全國招生 家電維修班,手機維修班,電腦維修班,電工班,焊工班,液晶電視維修班,電動工具維修班、電動車摩托車維修班、網絡營銷培訓、網站設計培訓、淘寶培訓---全國招生

国产精品久久久久久吹潮-国产精品久久久久久久成人午夜-国产精品久久久久久久久久妇女-国产精品久久久久久久久免费观看-一级看片免费视频-一级看片免费视频囗交

您的位置:網站首頁 > 電器維修資料網 > 正文 >

程序設計(單片機)中的“分層思想”

★★★★★【文章導讀】:程序設計(單片機)中的“分層思想”具體內容是:分層的思想,并不是什么神秘的東西,事實上很多做項目的工程師本身自己也會在用。看了不少帖子都發現沒有提及這個東西,然而分層結構確是很有用的東西,參透后會有一種恍然大悟的感覺。如果說我不懂LCD怎么驅動,那好…

來源: 日期:2013-11-4 21:37:51 人氣:標簽:

程序設計(單片機)中的“分層思想”

    分層的思想,并不是什么神秘的東西,事實上很多做項目的工程師本身自己也會在用。看了不少帖子都發現沒有提及這個東西,然而分層結構確是很有用的東西,參透后會有一種恍然大悟的感覺。如果說我不懂LCD怎么驅動,那好辦,看一下datasheet,參考一下別人的程序,很快就可以做出來。但是如果不懂程序設計的思想的話,會給你做項目的過程中帶來很多很多的困惑。

    參考了市面上各種各樣的嵌入式書籍,MCS-51,AVR,ARM等都有看過,但是沒有發現有哪本是介紹設計思想的,就算有也是鳳毛麟角。寫程序不難,但是程序怎么樣才能寫的好,寫的快,那是需要點經驗積累的。結構化模塊化的程序設計的思想,使 基本的要求。然而這么將這個抽象的概念運用到工程實踐當中恩?那需要在做項目的過程中經歷磨難,將一些東西總結出來,抽象升華為理論,對經驗的積累和技術的傳播都大有裨益。所以在下出來獻丑一下,總結一些東西。

    就我個人的經驗而談,有兩個設計思想是非常重要的。

    一個就是“時間片輪的設計思想”,這個對實際中解決多任務問題非常有用,通常可以用這個東西來判斷一個人是單片機學習者,還是一個單片機工程師。這個必須掌握。由于網上介紹這個的帖子也不少,所以這里就不多說了。

    第二個就是我今天想說的主題“分層屏蔽的設計思想”。下面用掃描鍵盤程序例子作為引子,引出今天說的東西。

    問題的提出

    單片機學習板一般為了簡單起見,將按鍵分配的很好,例如整個4*4的鍵盤矩陣分配到P1口上面,8條控制線,剛好。這樣的話程序也非常好寫。只需要簡單的

    KEY_DAT = P1;

    端口的數據就讀進來了。

    誠然,現實中沒有這么好的事情。在實際的項目應用當中,單片機引腳的復用相當厲害,這跟那些所謂的單片機學習板就有很大的差別了。

    另外一個原因,一般設計來說,是“軟件配合硬件”的設計流程,簡單點說就是,先確定好硬件原理圖,硬件布線, 后才是軟件的開發,因為硬件修改起來比較麻煩,相對來說軟件修改的時候比較好改。這個就是中國傳統的陰陽平衡哲學原理。硬件設計和軟件設計本來就是魚和熊掌的關系,兩者不可兼得。方便了硬件設計,很可能給寫軟件帶來很大的麻煩。反過來說,方便了軟件設計,硬件設計也會相當的麻煩。如果硬件設計和軟件設計同時方便了,那只有兩種可能,一是這個設計方案非常簡單,二是設計師已經達到了一個非常高的境界。我們不考慮那么多情況,單純從常用的實際應用的角度來看問題。

    硬件為了布線的方便,很多時候會可能將IO口分配到不同的端口上面,例如上面說的4*4鍵盤,8根線分別分配到P0 P1 P2 P3上面去了。那么,開發板的那些掃描鍵盤程序可以去見鬼了。怎么掃按鍵?我想起了我剛開始學習的時候,分成3段非常相似的程序,一個一個按鍵的掃描的經歷……

    或許有人不甘心,“那些東西我花了很長時間學習的,也用的好好的,怎么能說一句不用就不用?”雖然有點殘忍,但是我還是想說“兄弟,接受現實吧,現實是殘酷的……”

    不過,人區別于低等動物的差別,是人會創造,在碰到困難的時候會想辦法解決,于是我們開始了沉思……

    后我們引入初中數學學的“映射”的概念來解決問題。基本思想就是,將不同端口的按鍵映射到相同端口上面。

    這樣按鍵掃描程序就分成3個層次了。

    1) 底層的是硬件層,完成端口掃描,20ms延時消抖,將端口的數據映射到一個KEY_DAT寄存器上面,KEY_DAT作為對上層驅動層的一個接口。

    2)中間的一層是驅動層,驅動層只對KEY_DAT寄存器的數值進行操作。簡單點說,我們無論底層的硬件是怎么接線的,在驅動層都不需要關心,只需要關心KEY_DAT這個寄存器的數值是什么就可以了。這樣出來的間接效果就是“屏蔽了底層硬件的差異”,所以驅動層寫的程序就可以通用了。

    驅動層的另外一個功能是為了上層提供消息接口。我們用了類似window程序的消息的概念。這里可以提供一些按鍵消息,例如:按下消息,松開消息,長按鍵消息,長按鍵的時候的步進消息,等等。

    3)應用層。這里就是根據項目的不同分別寫按鍵功能程序,屬于 上層的程序。它使用的是驅動層提供的消息接口。在應用層寫程序的思想就是,我不管下層是怎么工作的,我只關心按鍵消息。有按鍵消息來的時候我就執行功能,沒有消息來的時候,我就什么也不做。

    下面用一個簡單的常用的例子,說明我們這個設計思想的用法。

    秒表調整時間的時候,要求按著某個按鍵不放,時間能連續的向上增加。這個東西很實用,實際的家電中用途很廣泛。

    在看下面的東西之前,大家可以想一下,這東西難嗎?相信大家都會很響亮的回答,“不難!!”,然而我再問:“這東西麻煩嗎?”我相信很多人肯定會說“很麻煩!!”這不禁讓我想起開始學單片機的時候寫這種按鍵的那程序,亂七八糟的結構。如果不相信的話,可以自己用51寫一下哦,那樣就更加能體會本文說的分層結構的優越性。

    項目要求:

    兩個按鍵,分別分配在P10和P20,分別是“加”“減”按鍵,要求長按鍵的時候實現連續加和連續減的功能。

    實戰:

    假設:

    按鍵上拉,沒有按鍵的時候高電平,有按鍵的時候低電平,另外,為了突出問題,這里沒有將延時消抖的程序寫上去,在實際項目中應該加上。C語言函數參數的傳遞多種多樣,這里作為例子,用了 簡單的全局變量來傳遞參數,當然你也可以用unsigned char ReadPort(void)返回一個讀鍵結果,甚至還可以void ReadPort(unsigned char *pt)用一個指針變量傳遞地址而達到直接修改變量的目的。方法是多種多樣的,這個決定于每個人的程序風格。

    1)開始寫硬件層程序,完成映射

    #define KYE_MIN 0X01

    #define KEY_PLUS 0X01

    unsigned char KeyDat;

    void ReadPort(void)

    {

    if (P1 KEY_PLUS == 0 ){

    KeyDat |= 0x01 ;

    }

    if (P2 KEY_MIN == 0 ){

    KeyDat |= 0x02 ;

    }

    }

    C語言應該很容易看懂吧?如果KEY_PLUS按下,P10口讀到低電平,則P1 KEY_PLUS的結果為0,滿足if的條件,進入KeyDat |= 0x01是將KeyDat的bit0置一,也就是說,將KEY_PLUS映射到KeyDat的bit0

    KEY_MIN是同樣的道理映射到KeyDat的bit1

    如果KeyDat的bit0為1,則說明KEY_PLUS按下,反則亦然。

    不需要想的很神秘,映射就是這么一回事。如果還有其他按鍵的話,用同樣辦法,將他們全部映射到KeyDat上面。

    2)驅動層程序編寫

    如果將KeyDat想象成P1口,那么這個跟學習板那標準的掃描程序不就是一樣了嗎?對的,這個就是底層映射的目的了。

    3)應用層程序編寫

    根據消息

    硬件層是必須分離出來,然而驅動層和應用層的要求就不那么嚴格了,事實上一些簡單的項目沒有必要將這兩層分離開來,根據實際應用靈活應對就可以了。其實這樣寫程序是很方便移植的,根據板子的不同而適當的修改一下硬件層那個ReadPort函數就完成了,驅動層和應用層很多代碼可以不經過修改直接用,很能提高開發效率的。當然這個按鍵程序會存在一定的問題,特別是遇到常閉按鍵和點觸按鍵的混合使用的場合。這個留給大家自己去想了,反正問題總是能找到解決辦法的,盡管方法有好有壞。

    結束語

    以按鍵為媒介,介紹了程序設計當中的“分層屏蔽”的思想的原理和應用,按鍵只是一個例子,其實分層的思想普遍存在著程序設計當中。細心留意一下的話發現其實window,linux,網絡的tcp/ip結構全部都是分層的。這東西不是繡花枕頭,而是實際用在工程上面的,只是平時不多見帖子介紹,或者沒有人特意這樣來總結,又或者是有經驗的工程師作為藏在心中的法寶吧,這個就不得而知。


【看看這篇文章在百度的收錄情況】

聯系方式

  • 0731-85579057 , 0731-85569651
  • 點擊這里給我發消息點擊這里給我發消息點擊這里給我發消息
網站欄目導航: 培訓課程 手機硬件 手機軟件 綜合維修 學校資訊 考證指南 就業導航 招生指南 教學管理 入學須知 學校圖片 教學大綱 師資力量 學生感言 學校概況 教學實景 手機維修培訓資訊 電腦維修培訓 維修間故事 手機維修培訓 液晶電視維修培訓 家電維修資料網 電器維修資料網 招生地區 刷機教程 家電維修 手機技巧 老版網站 招生平臺網絡工程
友情鏈接: 監控安裝培訓 電動工具維修 家電維修學校 電工培訓學校 液晶電視維修 焊工培訓學校 電工焊工學校 電腦維修學校 家電維修培訓 電腦維修培訓 家裝電工培訓網絡安裝維護 主板維修 液晶顯示器 筆記本電腦維修 電腦組裝維護 電腦硬件維修 電腦維修 電工考證 電工證 裝修電工 水電工 維修電工 電工 焊接技術 電焊工 焊工 電動設備維修 電動工具維修 制冷維修 空調維修 冰箱維修  更多>>
陽光-手機維修教育品牌學校
點擊這里給我發消息 點擊這里給我發消息 點擊這里給我發消息
電工培訓學校 電動車維修學校 摩托車維修學校 摩托車維修培訓 手機維修培訓 家電維修培訓 電腦維修培訓 電動工具維修培訓 液晶電視維修培訓 安防監控培訓 空調維修培訓 網絡營銷培訓 網站設計培訓 淘寶網店培訓 電器維修培訓 家電維修學校 電工培訓 焊工培訓 電工學校 電工培訓學校 電動車維修學校 摩托車維修學校 摩托車維修培訓 手機維修培訓 家電維修培訓 電腦維修培訓 電動工具維修培訓 液晶電視維修培訓 安防監控培訓 空調維修培訓 網絡營銷培訓 網站設計培訓 淘寶網店培訓 電器維修培訓 家電維修學校 電工培訓 焊工培訓 電工學校 電工培訓學校 電動車維修學校 摩托車維修學校 摩托車維修培訓 手機維修培訓 家電維修培訓 電腦維修培訓 電動工具維修培訓 液晶電視維修培訓 安防監控培訓 空調維修培訓 網絡營銷培訓 網站設計培訓 淘寶網店培訓 電器維修培訓 家電維修學校 電工培訓 焊工培訓 電工學校 電工培訓學校 電動車維修學校 摩托車維修學校 摩托車維修培訓 手機維修培訓 家電維修培訓 電腦維修培訓 電動工具維修培訓 液晶電視維修培訓 安防監控培訓 空調維修培訓 網絡營銷培訓 網站設計培訓 淘寶網店培訓 電器維修培訓 家電維修學校 電工培訓 焊工培訓 電工學校
中山市,固原市,銀川市,玉樹,海東,隴南市,酒泉市,張掖市,天水市,金昌市,蘭州市,榆林市,延安市,渭南市,銅川市,阿里,山南,拉薩市,怒江,文山州,楚雄州,普洱市,昭通市,玉溪市,昆明市,畢節,銅仁,遵義市,貴陽市,甘孜州,資陽市,達州市,宜賓市,南充市,遂寧市,綿陽市,瀘州市,自貢市,三亞市,崇左市,河池市,玉林市,欽州市,梧州市,柳州市,梅州市,肇慶市,湛江市,佛山市,珠海市,韶關市,湘西州,懷化市,郴州市,張家界市,邵陽市,株洲市,仙桃市,隨州市,荊州市,荊門市,襄樊市,黃石市,駐馬店市,信陽市,南陽市,漯河市,中衛市,石嘴山市,海西,海南藏州,黃南州,海北,甘南,慶陽市,平涼市,武威市,白銀市,嘉峪關市,安康市,漢中市,咸陽市,寶雞市,林芝,日喀則,昌都,迪慶,德宏,大理,西雙版納,紅河州,臨滄市,麗江市,保山市,曲靖市,黔東州,黔西州,安順市,六盤水市,涼山州,阿壩州,雅安市,廣安市,眉山市,內江市,廣元市,德陽市,攀枝花市,成都市,海口市,來賓市,百色市,貴港市,北海市,桂林市,南寧市,云浮市,揭陽市,潮州市,清遠市,陽江市,汕尾市,惠州市,茂名市,江門市,汕頭市,深圳市,廣州市,婁底市,永州市,益陽市,岳陽市,湘潭市,長沙市,恩施州,黃岡市,孝感市,鄂州市,十堰市,武漢市,周口市,商丘市,三門峽市,許昌市,焦作市,安陽市,鶴壁市,平頂山市,開封市,鄭州市,聊城市,濱州市,德州市,萊蕪市,日照市,泰安市,煙臺市,濰坊市,東營市,淄博市,上饒市,濟南市,撫州市,宜春市,贛州市,新余市,九江市,景德鎮市,寧德市,南平市,泉州市,莆田市,廈門市,宣城市,亳州市,六安市,宿州市,黃山市,滁州市,安慶市,淮北市,馬鞍山市,蚌埠市,蕪湖市,合肥市,麗水市,舟山市,衢州市,金華市,湖州市,嘉興市,寧波市,宿遷市,鎮江市,鹽城市,連云港市,蘇州市,徐州市,南京市,綏化市,牡丹江市,佳木斯市,大慶市,鶴崗市,哈爾濱市,白城市,白山市,遼源市,吉林市,葫蘆島市,鐵嶺市,盤錦市,阜新市,錦州市,本溪市,鞍山市,沈陽市,錫林郭勒盟,通遼市,烏海市,呂梁市,忻州市,晉中市,晉城市,陽泉市,太原市,廊坊市,承德市,保定市,邯鄲市,唐山市,寧夏,甘肅省,西藏,貴州省,重慶市,廣西,湖南省,河南省,江西省,安徽省,江蘇省,黑龍江省,遼寧省,山西省,天津市,四平市,內蒙古,吳忠市,果洛,西寧市,定西市,商洛市,西安市,那曲,黔南州,巴中市,樂山市,賀州市,防城港市,東莞市,河源市,常德市,衡陽市,咸寧市,宜昌市,濮陽市,新鄉市,洛陽市,菏澤市,臨沂市,威海市,濟寧市,棗莊市,青島市,吉安市,鷹潭市,萍鄉市,南昌市,龍巖市,漳州市,三明市,福州市,池州市,巢湖市,阜陽市,銅陵市,淮南市,臺州市,紹興市,溫州市,杭州市,泰州市,揚州市,淮安市,南通市,常州市,無錫市,大興安嶺,黑河市,七臺河市,伊春市,雙鴨山市,雞西市,齊齊哈爾市,延邊,松原市,通化市,長春市,朝陽市,遼陽市,營口市,丹東市,撫順市,大連市,阿拉善盟,興安盟,烏蘭察布市,巴彥淖爾市,呼倫貝爾市,鄂爾多斯市,赤峰市,包頭市,呼和浩特市,臨汾市,運城市,朔州市,長治市,大同市,衡水市,滄州市,張家口市,邢臺市,秦皇島市,石家莊市,青海省,陜西省,云南省,四川省,海南省,廣東省,湖北省,山東省,福建省,浙江省,上海市,吉林省,河北省,北京市 主站蜘蛛池模板: 国产激情一区二区三区在线观看| 日本黄色免费在线观看| 性欧美video在线播放| 欧美a级在线观看| 久久xxxx| www.黄色网址| 琪琪成人| 亚欧美视频| 欧美日韩a| 国产全黄三级三级| 欧美 国产 日本| 国产成人91精品| www.黄色网.com| 欧美一级做一级做片性十三| 成人黄色一级片| 国产午夜在线观看| 你懂的网站在线播放| 浪潮a二三区| 日韩精品成人a在线观看| 黄色a网站| 欧美专区日韩专区| 中文字幕视频在线播放| 中国嫩模一级毛片| 91精品国产免费网站| 一个人看的视频免费www| 综合在线播放| 国产成人影院| 国产手机在线αⅴ片无码观看| 在线免费观看一级毛片| 欧美日韩高清不卡一区二区三区| 99热在线观看免费| 涩涩涩在线视频| 免费一级a毛片在线搐放正片| 很黄很黄叫声床戏免费视频| 国产午夜精品理论片久久影视| 91短视频testflight| 美女私密福利第一导航| 日日夜夜亚洲| 波多野吉衣在线多野结衣| 国产精品v欧美精品v日韩精品| 午夜在线免费视频|