久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 78634|回復: 153
收起左側

狀態機按鍵掃描,看懂了會增長你的功力。。。。

  [復制鏈接]
ID:69862 發表于 2014-12-14 21:19 | 顯示全部樓層 |閱讀模式
本帖最后由 xiao_yp2014 于 2016-1-21 14:37 編輯

大家好!我叫肖亞平,從小熱愛上了電子技術,讀書時陰差陽錯的選擇了電子這方面的專業,學習電子技術。對于我的理解來說,學校里面學到的技術不是全部實用,但是必須有用,所以一直奮斗在前線。我對學習總結出一句話“壓力不是有人努力,而是比你牛X N倍的人依然在努力
說在前面:
              做單片機開發少不了的就是通過按鍵和單片機交流,按鍵是單片機交流的一個橋梁,所以狀態機按鍵掃描猶如嵌入式一樣的火爆,在網上一搜一大把,一說起按鍵,學了單片機的人都知道有個叫做“狀態機掃描的方法”,這個方法確實比其它的按鍵方法要好得多,我記得在星期五的一個下午,一個網友叫我幫他調一個程序,他當時說按下按鍵顯示就不顯示了,我一想,按鍵肯定有問題,我打開程序一看,里面居然還有像這樣的語句存在“ while(!Key); ”這明顯是給自己找麻煩,給CPU挖陷阱嘛,下面分享一個狀態機的按鍵掃描方法,據說這種方法是實時最高的,今天我也是親自試過,確定如此。


捕獲.PNG


程序如下:main.c
  1. /********************************************************************************************
  2. 名    稱:狀態機按鍵掃描
  3. 功    能:運用狀態機思想,實現按下按鍵LED點亮,再按一下LED燈熄滅。
  4. 作    者:肖亞平
  5. 創建時間:2014年12月14日
  6. 修改時間:
  7. 備    注:
  8. **************************************************************************************************/
  9. #include<reg52.h>                 //頭文件
  10. #include"Key_State.h"         //按鍵掃描頭文件

  11. sbit Led = P0^7;                 //LED燈輸出

  12. unsigned char Key_Number = 0; //按鍵值

  13. /********************************************************************************************
  14. 函數名稱:主程序
  15. 功    能:程序執行的入口
  16. 返 回 值:無
  17. 時    間:2014-12-14        
  18. 備    注:
  19. **************************************************************************************************/
  20. void main()
  21. {
  22.    while(1)
  23.    {
  24.        Key_Number = read_key();        //調用按鍵掃描函數,取得按鍵值,10MS調用一次,這里我沒有計時

  25.            if(Key_Number == 1)                //按鍵返回值是1
  26.            {
  27.               Led = ~Led;                        //LED燈取反
  28.            }
  29.    }
  30. }
復制代碼

Key_State.c
  1. #include<reg52.h>

  2. sbit key_sr1 = P1^6;  // 按鍵輸入口

  3. #define key_state_0        0   //按鍵的初始狀態
  4. #define key_state_1        1   //按鍵按下的狀態
  5. #define key_state_2        2   //按鍵釋放的狀態

  6. /********************************************************************************************
  7. 函數名稱:按鍵掃描程序
  8. 功    能:檢測按鍵,并返回按鍵值
  9. 返 回 值:key_press
  10. 時    間:2014-12-14        
  11. 備    注:
  12. **************************************************************************************************/
  13. unsigned char read_key(void)
  14. {
  15.     static char key_state = 0;     //按鍵的狀態
  16.     unsigned char key_press;       //按鍵是否被按下
  17.         unsigned char key_return = 0;  //按鍵返回值
  18.     key_press = key_sr1;         // 讀按鍵I/O電?
  19.    
  20.     switch (key_state)
  21.     {
  22.         case key_state_0:                 // 按鍵初始態
  23.                 if (!key_press)
  24.                 {
  25.                                 key_state = key_state_1;// 鍵被按下,狀態轉換到鍵確認態
  26.                         }
  27.                         break;
  28.                                 
  29.         case key_state_1:                   // 按鍵確認態
  30.             if (!key_press)
  31.             {
  32.                 key_return = 1;         // 按鍵仍按下,按鍵確認輸出為“1”
  33.                 key_state = key_state_2;// 狀態轉換到鍵釋放態
  34.             }
  35.             else
  36.             {
  37.                                 key_state = key_state_0; // 按鍵已抬起,轉換到按鍵初始態
  38.                         }
  39.             break;
  40.                                 
  41.         case key_state_2:
  42.             if (key_press)
  43.                         {
  44.                             key_state = key_state_0;//按鍵已釋放,轉換到按鍵初始態
  45.             }
  46.             break;
  47.    }
  48. return key_return;                            //返回按鍵值
  49. }
復制代碼

Key_State.h
  1. #ifndef __Key_State_H__
  2. #define __Key_State_H__

  3. unsigned char read_key(void);

  4. #endif
復制代碼


Key_State.zip (34.43 KB, 下載次數: 1414)

評分

參與人數 4黑幣 +51 收起 理由
陳潤源home + 10 謝謝肖哥,師弟又學到東西了
botgs + 5 贊一個!
goty2000 + 1 多謝樓主,這次可以徹底擺脫while(KEY==0);.
暗光 + 35 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:68618 發表于 2014-12-15 02:27 來自手機 | 顯示全部樓層
大師的解說風趣幽默,簡單易懂。又學到了知識,謝謝,萬分感謝
回復

使用道具 舉報

ID:69862 發表于 2014-12-15 09:27 | 顯示全部樓層
aabbcc 發表于 2014-12-15 02:27
大師的解說風趣幽默,簡單易懂。又學到了知識,謝謝,萬分感謝

希望對你有幫助,相互學習。。。。
回復

使用道具 舉報

ID:68804 發表于 2014-12-15 11:10 | 顯示全部樓層
學習了
回復

使用道具 舉報

ID:69862 發表于 2014-12-15 11:36 | 顯示全部樓層

相互學習,希望對你有幫助,。。。。
回復

使用道具 舉報

ID:48140 發表于 2014-12-18 08:14 來自手機 | 顯示全部樓層
學習一下。
回復

使用道具 舉報

ID:69862 發表于 2014-12-18 08:23 | 顯示全部樓層

相互學習,希望對你有幫助,。。。。
回復

使用道具 舉報

ID:70075 發表于 2014-12-21 22:03 | 顯示全部樓層
好東西  贊一個
回復

使用道具 舉報

ID:70075 發表于 2014-12-21 22:04 | 顯示全部樓層
回去好好看
回復

使用道具 舉報

ID:5501 發表于 2014-12-24 22:46 | 顯示全部樓層
好好研究下,聽說過狀態機按鍵很好,一直還沒學會,謝謝樓主講解。
回復

使用道具 舉報

ID:69862 發表于 2014-12-25 12:14 | 顯示全部樓層
shgdd520com 發表于 2014-12-24 22:46
好好研究下,聽說過狀態機按鍵很好,一直還沒學會,謝謝樓主講解。

其實也不難,只是把一個按鍵,分成了幾個狀態。在不同的狀態下需要作不同的判斷。。。。
回復

使用道具 舉報

ID:70544 發表于 2014-12-28 15:08 | 顯示全部樓層
好東西  贊一個
回復

使用道具 舉報

ID:59269 發表于 2014-12-28 21:45 | 顯示全部樓層
下載學習,謝謝分享
回復

使用道具 舉報

ID:73002 發表于 2015-2-5 22:31 | 顯示全部樓層
下載學習,謝謝分享
回復

使用道具 舉報

ID:29438 發表于 2015-2-7 08:49 | 顯示全部樓層
學習了,謝謝!
回復

使用道具 舉報

ID:73030 發表于 2015-2-7 15:03 來自手機 | 顯示全部樓層
學無止境,謝謝。
回復

使用道具 舉報

ID:73450 發表于 2015-2-13 20:56 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:73995 發表于 2015-3-1 15:10 | 顯示全部樓層
學習學習,
回復

使用道具 舉報

ID:74044 發表于 2015-3-2 16:51 | 顯示全部樓層
學習學習一下,謝謝樓主
回復

使用道具 舉報

ID:46228 發表于 2015-3-3 22:42 | 顯示全部樓層
又學到了知識,萬分感謝,太感動了
回復

使用道具 舉報

ID:29438 發表于 2015-3-4 13:24 | 顯示全部樓層
謝謝!
回復

使用道具 舉報

ID:47760 發表于 2015-3-5 06:31 來自手機 | 顯示全部樓層
l謝謝樓主講解
回復

使用道具 舉報

ID:73572 發表于 2015-3-6 10:42 來自手機 | 顯示全部樓層
正好最近一直為這個問題煩憂,多謝分享。回去慢慢研究研究
回復

使用道具 舉報

ID:74706 發表于 2015-3-16 11:31 | 顯示全部樓層
學習了,很好的方法
回復

使用道具 舉報

ID:75007 發表于 2015-3-21 16:47 | 顯示全部樓層
hehehe學習下
回復

使用道具 舉報

ID:37003 發表于 2015-3-24 16:59 | 顯示全部樓層
很不錯的思路
回復

使用道具 舉報

ID:86418 發表于 2015-7-21 22:02 | 顯示全部樓層
支持長按么
回復

使用道具 舉報

ID:87496 發表于 2015-8-3 01:29 | 顯示全部樓層
好東西啊,下來看看!~
回復

使用道具 舉報

ID:79544 發表于 2015-8-3 18:29 | 顯示全部樓層
獨立按鍵,那矩陣按鍵呢?
回復

使用道具 舉報

ID:64178 發表于 2015-8-4 09:13 | 顯示全部樓層
已下載,看看,謝謝LZ
回復

使用道具 舉報

ID:87682 發表于 2015-8-5 13:15 | 顯示全部樓層
正好需要,多謝摟住
回復

使用道具 舉報

ID:87781 發表于 2015-8-6 20:37 | 顯示全部樓層
正在學習,很好的資料,謝謝分享
回復

使用道具 舉報

ID:87781 發表于 2015-8-6 20:38 | 顯示全部樓層
很好的資料,代碼整潔,可讀性高,謝謝樓主
回復

使用道具 舉報

ID:62929 發表于 2015-8-8 10:18 來自手機 | 顯示全部樓層
很有用謝謝啦
回復

使用道具 舉報

ID:86753 發表于 2015-8-8 19:29 | 顯示全部樓層
樓主問一下,這個程序是只可以掃描一個按鍵嗎?因為我只看到一個按鍵定義。還有正常的判斷按鍵是否按下的程序不是應該有檢測到按鍵按下之后有一個延時躲避抖動嗎?這樣的設計會使按鍵判斷不準確嗎?謝謝樓主,我小白一個……
回復

使用道具 舉報

ID:84495 發表于 2015-8-10 17:18 | 顯示全部樓層
看看是何神器,,贏得一樓如此美贊
回復

使用道具 舉報

ID:89194 發表于 2015-9-1 10:04 | 顯示全部樓層
最近在研究這個狀態機按鍵,下來看下
回復

使用道具 舉報

ID:89194 發表于 2015-9-1 10:09 | 顯示全部樓層
下下來看了一下,寫的很簡單明了,便于理解!
回復

使用道具 舉報

ID:90231 發表于 2015-9-16 08:42 | 顯示全部樓層
感覺很有幫助,現在就是需要規范程序
回復

使用道具 舉報

ID:90296 發表于 2015-9-16 21:30 | 顯示全部樓層
這個怎么用。我也下來看看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人性生交a做片 | 九九av| 在线一区 | 在线视频国产一区 | 久艹av | 亚洲国产电影 | 亚洲精品视频在线观看视频 | 99热.com | 精品国产一区二区三区久久久四川 | 久久男人 | 久草网址 | 黄色av观看 | 国产精品久久国产精品 | 视频国产一区 | 日日摸天天添天天添破 | 五月婷婷激情网 | 久草中文在线观看 | 91精品国产色综合久久不卡98 | 黄色在线免费观看 | 国产精品不卡一区 | 亚洲精品99999 | 成人精品鲁一区一区二区 | 亚洲免费成人 | 亚洲另类春色偷拍在线观看 | 天天天操 | 国产亚洲成av人片在线观看桃 | 一区二区三区久久久 | 成人免费大片黄在线播放 | 国产日韩欧美一区二区 | 国产精品99久久久久久宅男 | 国产一区二区免费 | 亚洲性人人天天夜夜摸 | 岛国av一区二区 | 在线观看一区 | 国产精品久久久久久久久久久久午夜片 | 国产97色 | 在线播放国产一区二区三区 | 日韩在线日韩 | 亚洲日本欧美日韩高观看 | 欧美日韩在线视频观看 | 91视频免费黄|