毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精


曙海教育集團(tuán)論壇單片機(jī)專區(qū)單片機(jī)高級 → 從單片機(jī)初學(xué)者邁向單片機(jī)工程師,之KEY主題討論第二章,基于狀


  共有11186人關(guān)注過本帖樹形打印

主題:從單片機(jī)初學(xué)者邁向單片機(jī)工程師,之KEY主題討論第二章,基于狀

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發(fā)短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
從單片機(jī)初學(xué)者邁向單片機(jī)工程師,之KEY主題討論第二章,基于狀  發(fā)帖心情 Post By:2010-12-8 10:47:17

關(guān)于這部分的按鍵處理,我基本上是沒有按照原作者的思路了。因為前幾章節(jié)作者都是把所有的代碼都放出來,我只要稍作修改就能在自己的板子上看到結(jié)果,這一章節(jié)原作者僅僅貼出部分代碼。而且原作者一次性把多個按鍵,單擊,連發(fā)都一次性解決了,對于我這種菜鳥來說,一時還真反應(yīng)不過來。于是自己重新查找了些資料,個人感覺還是能把這部分弄懂了。要看原作者的文章請進(jìn)入:http://www.eehome.cn/read-htm-tid-30530.html。我這里主要是通過馬潮的《基于AVR的單片嵌入式系統(tǒng)原理與實踐應(yīng)用》來講解的。http://wenku.baidu.com/view/c98cc97931b765ce050814 98.html

  好了,言歸正傳。上一節(jié)我們已經(jīng)講到按鍵的一些基本情況。這章節(jié)我主要講講怎么用狀態(tài)機(jī)的方式來處理按鍵。我們把單個按鍵作為一個簡單的系統(tǒng),根據(jù)狀態(tài)機(jī)的原理對其動作和確認(rèn)的過程進(jìn)行分析,并用狀態(tài)圖表示出來,然后根據(jù)狀態(tài)圖編寫出按鍵接口程序。把單個按鍵看成是一個狀態(tài)機(jī)話,首先需要對一次按鍵操作和確認(rèn)的實際過程進(jìn)行分析,根據(jù)實際的情況和系統(tǒng)的需要確定按鍵在整個過程的狀態(tài),每個狀態(tài)的輸入信號和輸出信號,以及狀態(tài)之間的轉(zhuǎn)換關(guān)系。最后還要考慮時間序列的間隔。采用狀態(tài)機(jī)對一個系統(tǒng)進(jìn)行分析是一項非常細(xì)致的工作,它實際上是建立在對真實系統(tǒng)有了全面深入的了解和認(rèn)識的基礎(chǔ)之上,進(jìn)行綜合和抽象化的模型建立的過程。這個模型必須與真實的系統(tǒng)相吻合,既能正確和全面的對系統(tǒng)進(jìn)行描述,也能夠適合使用軟件或硬件方式來實現(xiàn)。在一個嵌入式系統(tǒng)中,按鍵的操作是隨機(jī)的,因此系統(tǒng)軟件對按鍵需要一直循環(huán)查詢。由于按鍵的檢測過程需要進(jìn)行消抖處理,因此取狀態(tài)機(jī)的時間序列的周期為10ms左右,這樣不僅可以跳過按鍵抖動的影響,同時也遠(yuǎn)小于按鍵0.3-0.5秒的穩(wěn)定閉合期,不會將按鍵操作過程丟失。很明顯,系統(tǒng)的輸入信號是與按鍵連接的I/O口電平,"1"表示按鍵處于開放狀態(tài),"0"表示按鍵處于閉合狀態(tài)。而系統(tǒng)的輸出信號則表示檢測和確認(rèn)到一次按鍵的閉合操作,用"1"表示。

  上圖給出了一個簡單按鍵狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖。在圖中,將一次按鍵完整的操作過程分解為3個狀態(tài),采用時間序列周期為10ms。下面對該圖做進(jìn)一步的分析和說明,并根據(jù)狀態(tài)圖給出軟件的實現(xiàn)方法。首先,讀者要充分體會時間序列的作用。在這個系統(tǒng)中,采用的時間序列周期為10ms,它意味著,每隔10ms檢測一次按鍵的輸入信號,并輸出一次按鍵的確認(rèn)信號,同時按鍵的狀態(tài)也發(fā)生一次轉(zhuǎn)換。圖中"狀態(tài)0"為按鍵的初始狀態(tài),當(dāng)按鍵輸入為"1"時,表示按鍵處于開放,輸出"0"(1/0),下一狀態(tài)仍舊為"狀態(tài)0"。當(dāng)按鍵輸入為"0",表示按鍵閉合,但輸出還是"0"(0/0)(沒有經(jīng)過消抖,不能確認(rèn)按鍵真正按下),下一狀態(tài)進(jìn)入"狀態(tài)1"。"狀態(tài)1"為按鍵閉合確認(rèn)狀態(tài),它表示了在10ms前按鍵為閉合的,因此當(dāng)再次檢測到按鍵輸入為"0"時,可以確認(rèn)按鍵被按下了(經(jīng)過10ms的消抖),輸出"1"表示確認(rèn)按鍵閉合(0/1),下一狀態(tài)進(jìn)入"狀態(tài)2"。而當(dāng)再次檢測到按鍵的輸入為"1"時,表示按鍵可能處在抖動干擾,輸出為"0"(1/0),下一狀態(tài)返回到"狀態(tài)0"。這樣,利用狀態(tài)1,實現(xiàn)了按鍵的消抖處理。"狀態(tài)2"為等待按鍵釋放狀態(tài),因為只有等按鍵釋放后,一次完整的按鍵操作過程才算完成。從對上圖的分析中可以知道,在一次按鍵操作的整個過程,按鍵的狀態(tài)是從"狀態(tài)0"->"狀態(tài)1"->"狀態(tài)2",最后返回到"狀態(tài)0"的。并且在整個過程中,按鍵的輸出信號僅在"狀態(tài)1"時給出了唯一的一次確認(rèn)按鍵閉合的信號"1"(其它狀態(tài)均輸出"0")。所以上面狀態(tài)機(jī)所表示的按鍵系統(tǒng),不僅克服了按鍵抖動的問題,同時也確保在一次按鍵整個的過程中,系統(tǒng)只輸出一次按鍵閉合信號("1")。換句話講,不管按鍵被按下的時間保持多長,在這個按鍵的整個過程中都只給出了一次確認(rèn)的輸出,因此在這個設(shè)計中,按鍵沒有"連發(fā)"功能,它是一個最簡單和基本的按鍵。一旦有了正確的狀態(tài)轉(zhuǎn)換圖,就可以根據(jù)狀態(tài)轉(zhuǎn)換圖編寫軟件了。在軟件中實現(xiàn)狀態(tài)機(jī)的方法和程序結(jié)構(gòu)通常使用多分支結(jié)構(gòu)(IF-ELSEIF-ELSE、CASE等)實現(xiàn)。下面是根據(jù)上圖、基于狀態(tài)機(jī)方式編寫的簡單按鍵接口函數(shù)GetKey()。

  uchar GetKey()

  {

  uchar keyRetu=0; //返回的按鍵值

  static uchar s_keyState=0; //按鍵狀態(tài)

  switch (s_keyState)

  {

  case 0:

  if(key1==0) //檢測到有按鍵,轉(zhuǎn)到狀態(tài)1,相當(dāng)于是消抖過程

  {

  s_keyState=1;

  }

  break;

  case 1:

  if(key1==0) //再次檢測到有按鍵,確認(rèn)按鍵按下,返回一個值,并轉(zhuǎn)到狀態(tài)2

  {

  keyRetu=1;

  s_keyState=2;

  }

  else

  {

  s_keyState=0; //沒有檢測到按鍵,說明狀態(tài)0檢測到是一個抖動,重新轉(zhuǎn)到狀態(tài)0

  }

  break;

  case 2:

  if(key1==1) //檢測到按鍵松開,狀態(tài)轉(zhuǎn)到狀態(tài)0,一次完整的按鍵過程結(jié)束

  {

  s_keyState=0;

  }

  break;

  }

  return keyRetu;

  }

  該簡單按鍵接口函數(shù)GetKey()在整個系統(tǒng)程序中應(yīng)每隔10ms調(diào)用執(zhí)行一次,每次執(zhí)行時進(jìn)入用switch結(jié)構(gòu)構(gòu)成的狀態(tài)機(jī)。switch結(jié)構(gòu)中的case語句分別實現(xiàn)了3個不同狀態(tài)的處理判別過程,在每個狀態(tài)中將根據(jù)狀態(tài)的不同,以及key1的值(狀態(tài)機(jī)的輸入)確定輸出值(keyRetu),和確定下一次按鍵的狀態(tài)值(s_keyState)。函數(shù)GetKey()的返回參數(shù)提供上層程序使用。返回值為0時,表示按鍵無動作;而返回1表示有一次按鍵閉合動作,需要進(jìn)入按鍵處理程序做相應(yīng)的鍵處理。在函數(shù)GetKey()中定義了2個局部變量,其中keyRetu為一般普通的局部變量,每次函數(shù)執(zhí)行時,key_return為函數(shù)的返回值,總是先初始化為0,只有在狀態(tài)1中重新置1,作為表示按鍵確認(rèn)的標(biāo)志返回。變量s_keyState非常重要,它保存著按鍵的狀態(tài)值,該變量的值在函數(shù)調(diào)用結(jié)束后不能消失,必須保留原值,因此在程序中定義為"局部靜態(tài)變量",用static聲明。如果使用的語言環(huán)境不支持static類型的局部變量,則應(yīng)將s_keyState定義為全局變量(關(guān)于局部靜態(tài)變量的特點請參考我以前的文章:http://hi.baidu.com/dxstar/blog/item/90bdbe02d9e50 c8be950cdcd.html)。

  最后,我們來測試一下效果。這里要達(dá)到的效果就是:數(shù)碼管循環(huán)顯示00-99,每按一次鍵,數(shù)字加1。

  -----------------------const.h-------------------- -------

  #ifndef _CONST_H_

  #define _CONST_H_

  typedef unsigned char uchar;

  typedef unsigned int uint;

  #endif

  -----------------------main.c--------------------- --

  #include<reg52.h>

  #include"const.h"

  #include"Timer.h"

  #include"Display.h"

  #include"key.h"

  void main()

  {

  Timer0Init();

  EA=1;

  while(1)

  {

  if(g_systTime2Ms) //每2ms掃描顯示

  {

  g_systTime2Ms=0;

  DsipNum();

  }

  if(g_time10Ms) //每10ms掃描一次按鍵

  {

  g_time10Ms=0;

  if(GetKey()==1) //接收到的值是否為1,即是否按鍵按下

  {

  if(++g_num>=100)

  {

  g_num=0;

支持(0中立(0反對(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

從單片機(jī)初學(xué)者邁向單片機(jī)工程師,之KEY主題討論第二章,基于狀








簽名
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
精品国产99国产精品| 欧日韩精品视频| 成人黄色在线网站| 91精品国产免费| 性久久久久久久久| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲国产经典视频| 成人小视频在线| 国产亚洲美州欧州综合国| 国内成人自拍视频| 久久久久久久久免费| 国产精品白丝jk白祙喷水网站| 精品蜜桃在线看| 国产精品影视在线| 国产精品久久久久久亚洲伦| 一本大道久久精品懂色aⅴ| 亚洲黄色免费电影| 制服丝袜一区二区三区| 久久99九九99精品| 国产精品久久久久久久久免费丝袜 | 国产视频一区二区三区在线观看| 国产一区三区三区| 国产欧美视频在线观看| 91污片在线观看| 男男成人高潮片免费网站| 久久免费电影网| 色婷婷av一区二区三区软件 | 精品久久久久久无| 国产超碰在线一区| 亚洲人成影院在线观看| 91精品国产品国语在线不卡| 国产一区二区剧情av在线| 国产欧美一区二区三区鸳鸯浴| 91免费观看视频| 精品一区二区久久久| 亚洲四区在线观看| 欧美电影免费观看高清完整版在线观看| 国产精品亚洲午夜一区二区三区| 中文字幕乱码日本亚洲一区二区| 欧美日韩免费观看一区三区| 成人深夜在线观看| 日本成人在线一区| 亚洲天堂a在线| 精品国产乱码久久久久久浪潮| 91蜜桃传媒精品久久久一区二区| 日韩精品成人一区二区在线| 中文乱码免费一区二区| 91精品国产综合久久久久久 | 久久久www成人免费无遮挡大片| 99re亚洲国产精品| 国产精品亚洲人在线观看| 亚洲国产va精品久久久不卡综合| 2020国产精品自拍| 欧美裸体bbwbbwbbw| av在线一区二区| 国产在线国偷精品产拍免费yy| 亚洲一区二区三区在线看| 中日韩av电影| 久久综合色一综合色88| 91精品国产一区二区三区 | 欧美人与性动xxxx| 99视频在线观看一区三区| 精品一区二区三区香蕉蜜桃| 亚洲一区二区三区在线| 亚洲乱码国产乱码精品精可以看 | 欧美日韩国产欧美日美国产精品| 成人aaaa免费全部观看| 国产乱人伦偷精品视频不卡| 久久se精品一区精品二区| 日韩高清欧美激情| 午夜av电影一区| 亚洲成人动漫在线免费观看| 亚洲人成亚洲人成在线观看图片 | 91黄视频在线| 一本一本大道香蕉久在线精品| 成人看片黄a免费看在线| 成人综合婷婷国产精品久久| 国产成人日日夜夜| 99免费精品在线| 成人午夜免费av| 91网上在线视频| 欧美日韩一区不卡| 欧美一区二区视频网站| 日韩欧美的一区| 久久伊人蜜桃av一区二区| 国产欧美日韩卡一| 亚洲伦在线观看| 日韩国产高清影视| 国产大片一区二区| 91视频观看免费| 欧美三级电影网站| 日韩你懂的在线观看| 国产视频一区不卡| 亚洲色图视频免费播放| 日韩av高清在线观看| 精品一区二区综合| 国产一区二区0| 91在线视频网址| 欧美日韩久久久一区| 精品国产伦一区二区三区观看体验| 日韩欧美二区三区| 国产精品欧美一区喷水| 一区二区三区在线高清| 天天av天天翘天天综合网| 国产精品一区二区黑丝| 99精品国产99久久久久久白柏 | 成人av网站在线观看免费| 欧美无砖砖区免费| 国产午夜精品一区二区三区四区| 日韩毛片精品高清免费| 日本中文一区二区三区| 成人在线综合网站| 欧美一区二区三区男人的天堂| 国产精品三级电影| 男女男精品视频网| 精品视频全国免费看| 欧美国产精品一区| 麻豆精品在线看| 91久久国产最好的精华液| 欧美激情在线观看视频免费| 日本成人在线视频网站| 91福利在线免费观看| 国产欧美一区二区三区在线看蜜臀 | 91精品欧美综合在线观看最新| 国产精品久久午夜夜伦鲁鲁| 奇米色777欧美一区二区| 一本色道久久综合亚洲精品按摩| 精品国偷自产国产一区| 亚洲午夜久久久久久久久电影网| 国产 欧美在线| 久久久久久久久伊人| 免费人成在线不卡| 在线视频国产一区| 国产精品女同一区二区三区| 蜜臀av性久久久久av蜜臀妖精 | 亚洲成人资源网| 日本韩国一区二区| 亚洲免费看黄网站| bt欧美亚洲午夜电影天堂| 日本一区二区视频在线观看| 久久99国产精品麻豆| 这里只有精品免费| 视频在线在亚洲| 欧美日韩国产高清一区二区三区 | 天堂成人免费av电影一区| 欧美色老头old∨ideo| 一区二区三区国产精品| 色综合久久中文字幕综合网| 中文字幕亚洲区| 91免费视频网| 一区二区三区四区国产精品| 91在线porny国产在线看| 中文字幕一区二区三区在线播放| 99热精品一区二区| 亚洲一区视频在线| 欧美一区二区成人| 麻豆视频一区二区| 国产欧美一区二区在线| 成人激情图片网| 亚洲男人的天堂一区二区| 欧洲一区在线观看| 免费观看久久久4p| 久久精品人人做人人爽人人| 成人免费视频视频在线观看免费 | 成人免费视频免费观看| 亚洲天堂2014| 在线播放视频一区| 国产一区二区三区| ●精品国产综合乱码久久久久| 99久久99久久久精品齐齐| 亚洲h在线观看| 国产午夜三级一区二区三| aaa欧美色吧激情视频| 午夜精品一区二区三区免费视频| 日韩精品一区二区三区在线观看| 国产尤物一区二区| 亚洲综合成人网| 亚洲精品一区二区三区蜜桃下载 | 亚洲一区二区视频在线观看| 精品福利av导航| 97成人超碰视| 美女任你摸久久| 亚洲人吸女人奶水| 久久亚洲综合av| 欧美优质美女网站| 成人蜜臀av电影| 开心九九激情九九欧美日韩精美视频电影| 久久久久久久久久看片| 91官网在线观看| 东方aⅴ免费观看久久av| 午夜精品福利一区二区三区av| 久久精品亚洲精品国产欧美kt∨| 欧美美女视频在线观看| 91影视在线播放| 岛国av在线一区| 日韩高清一区二区| 亚洲综合男人的天堂| 亚洲欧洲另类国产综合| 欧美哺乳videos| 91精品国产综合久久小美女|