久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


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


  共有8647人關(guān)注過(guò)本帖樹(shù)形打印

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

美女呀,離線(xiàn),留言給我吧!
wangxinxin
  1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


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

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

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

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

  uchar GetKey()

  {

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

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

  switch (s_keyState)

  {

  case 0:

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

  {

  s_keyState=1;

  }

  break;

  case 1:

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

  {

  keyRetu=1;

  s_keyState=2;

  }

  else

  {

  s_keyState=0; //沒(méi)有檢測(cè)到按鍵,說(shuō)明狀態(tài)0檢測(cè)到是一個(gè)抖動(dòng),重新轉(zhuǎn)到狀態(tài)0

  }

  break;

  case 2:

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

  {

  s_keyState=0;

  }

  break;

  }

  return keyRetu;

  }

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

  最后,我們來(lái)測(cè)試一下效果。這里要達(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反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

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








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
亚洲三区在线观看| 成人一区二区三区在线观看| 精品剧情在线观看| 在线电影欧美成精品| 欧美日韩国产综合草草| 欧美一区二区在线观看| 精品国产凹凸成av人网站| 久久蜜桃av一区二区天堂| 国产精品欧美一区喷水| 亚洲女人****多毛耸耸8| 亚洲不卡在线观看| 国产一区二区三区黄视频| 成人av影院在线| 国产一区二区三区无遮挡 | 精品视频在线免费看| 日韩午夜电影av| 国产精品女同一区二区三区| 亚洲精品水蜜桃| 奇米888四色在线精品| 成人av影视在线观看| 精品国产一区二区三区久久久久久| 日韩高清三级| 91精品国产入口| 中文字幕一区二区三区av| 日本美女视频一区二区| 成人教育av在线| 亚洲天堂精品在线观看| 久久这里只有精品首页| 亚洲精品中文在线影院| 久久99精品久久久久婷婷| 97久久人人超碰| 日韩欧美亚洲区| 日韩一区二区中文字幕| 综合av第一页| 国产资源精品在线观看| 国产经品一区二区| 欧洲一区在线电影| 国产精品视频一二三区| 乱一区二区av| 国产在线精品一区| 欧美精品久久99久久在免费线 | 欧美激情在线观看视频免费| 亚洲国产精品自拍| bt欧美亚洲午夜电影天堂| 亚洲视频精品一区| 久久久国产综合精品女国产盗摄| 日韩有码一区二区三区| 国产精品美女诱惑| 欧美一级欧美三级在线观看| 亚洲一二三四在线观看| 91啪在线观看| 欧美午夜精品久久久| 亚洲欧洲成人av每日更新| 国产99精品国产| 色婷婷综合五月| 亚洲裸体xxx| 99精品国产99久久久久久白柏| 一本大道久久a久久综合| 亚洲人妖av一区二区| 91在线观看免费视频| 欧美日韩国产综合久久| 亚洲一区二区欧美激情| 国产不卡一区二区在线观看| 日韩一区二区免费在线观看| 日韩二区三区四区| 久久综合入口| 日本一区二区三区国色天香| 大陆成人av片| 91.com视频| 久久国产夜色精品鲁鲁99| 在线观看欧美激情| 一级日本不卡的影视| 国产精品伊人日日| 久久久噜噜噜久久人人看| 国产激情视频一区二区在线观看 | 日韩午夜av电影| 久久精品国产在热久久| 欧美一区2区三区4区公司二百| 久久精品欧美日韩精品| eeuss鲁片一区二区三区在线观看| 欧美日韩二区三区| 精品亚洲国内自在自线福利| 色悠悠亚洲一区二区| 天堂久久一区二区三区| 亚洲综合视频一区| 午夜精品久久久久久久久久| 色综合久久久久久久久五月| 一区二区在线观看免费| 欧美少妇一区| 亚洲一区二区在线免费观看视频| 欧美日韩精品久久久免费观看| 亚洲欧洲美洲综合色网| 精品免费二区三区三区高中清不卡 | 久久精品99久久久| 在线一区二区视频| 美日韩一级片在线观看| 精品视频一区二区三区免费| 久久国产尿小便嘘嘘尿| 欧美日韩亚洲另类| 国产一区二区三区四| 欧美嫩在线观看| 丁香激情综合五月| 久久看人人爽人人| 国产精品乱码视频| 亚洲欧美电影院| 亚洲欧美精品在线观看| 日韩 欧美一区二区三区| 欧美日韩一区二区三区视频| 国产麻豆精品视频| 欧美xxxx在线观看| 成人综合av网| 夜夜夜精品看看| 色综合中文字幕国产| 加勒比av一区二区| 欧美成人精品1314www| 国产精品成人观看视频免费| 玉米视频成人免费看| 中文字幕一区二区三区在线乱码| 精品在线免费观看| 久久久亚洲精品一区二区三区| 国产视频一区二区不卡| 婷婷中文字幕综合| 日韩一区二区三区在线观看| 97伦理在线四区| 亚洲品质自拍视频网站| 色欧美日韩亚洲| 成人av午夜影院| 亚洲激情图片小说视频| 欧美天堂亚洲电影院在线播放| 不卡av在线网| 亚洲美女免费在线| 欧美色视频在线观看| 97久久精品人人做人人爽50路| 亚洲免费观看高清完整版在线观看| 自拍偷拍一区二区三区| 成人av资源在线| 亚洲一区二区视频在线观看| 欧美日韩三级一区二区| 国产激情美女久久久久久吹潮| 性做久久久久久免费观看欧美| 91精品国产91久久久久久最新毛片 | 欧美日韩国产免费一区二区| av亚洲精华国产精华精华| 亚洲卡通动漫在线| 在线不卡的av| 久久精品国产综合精品| 韩国中文字幕2020精品| 亚洲品质自拍视频网站| 欧美另类z0zxhd电影| 国产在线精品一区二区中文| 精彩视频一区二区| 亚洲欧美色图小说| 日韩一区二区三区电影在线观看| 久久久综合香蕉尹人综合网 | 国产综合 伊人色| 国产在线日韩欧美| 一区二区三区中文在线观看| 91精品麻豆日日躁夜夜躁| 欧美日韩无遮挡| 成人av电影在线观看| 性做久久久久久久久| 国产三级一区二区| 欧美亚洲免费在线一区| 久久大片网站| 成人高清视频在线观看| 日产欧产美韩系列久久99| 国产精品美女久久久久久久久久久 | 精品一区二区三区视频在线观看| 国产精品久久久久久久久久久免费看 | 亚洲欧美日韩中文字幕一区二区三区 | 国产精品久久久久久久第一福利| 欧美日韩国产另类一区| 日韩hmxxxx| 国产精品一区二区欧美| 国产成人亚洲精品狼色在线| 亚洲成人免费在线观看| 国产精品成人一区二区艾草 | 在线观看亚洲专区| 欧美中文娱乐网| 97netav| 懂色av中文字幕一区二区三区| 午夜av区久久| 一区二区在线观看视频| 国产午夜精品久久| 精品三级av在线| 欧美日韩成人激情| 伊人久久大香线蕉av一区| 久久久久久国产精品免费免费| 96av麻豆蜜桃一区二区| 国产精品1区二区.| 狠狠色狠狠色合久久伊人| 日韩av一二三| 视频一区在线播放| 一区二区三区日韩在线观看| 日本一区二区在线不卡| 久久久777精品电影网影网 | 久久久国际精品| 欧美成人a∨高清免费观看| 欧美日韩二区三区| 欧美日韩五月天|