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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4916|回復: 2
打印 上一主題 下一主題
收起左側

單片機獨立按鍵狀態機源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:187478 發表于 2017-11-4 11:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一個獨立按鍵控制的狀態機程序,賺點幣。    有詳細的注解,請看附錄

單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit LED = P1^0;//繼電器(P1.0)接口定義 P1口的其他口可以接LED,也可以接LED,反正效果一樣

  5. /**************************************/
  6. /**************定時器中斷**************/
  7. /**************************************/
  8. void Timer0_init()
  9. {
  10.         TMOD = 0x01;//定時器定時模式,16位定時
  11.         TH0  = 0xf8;//設定定時器初值2ms
  12.         TL0  = 0xcc;
  13.         TR0  = 1;//開啟定時器
  14.         ET0  = 1;//定時器中斷
  15.         EA   = 1;//總中斷  
  16. }

  17. /**************************************/
  18. /*********狀態機按鍵掃描函數***********/
  19. /*********返回值: 按鍵碼值************/
  20. /**************************************/
  21. uchar Key_Scan(void)
  22. {
  23.         static uchar State_Cnt=0;//靜態變量,用于改變狀態過程
  24.         uchar Key_State = 0;//用于存儲鍵值碼
  25.         switch(State_Cnt)
  26.         {
  27.                 case 0x00:P3 = 0x0f;//先往P3(1到4獨立按鍵)口送0000 1111
  28.                 if(P3 != 0x0f)//有無按鍵被按下
  29.                 {
  30.                         State_Cnt = 0x01;//改變狀態
  31.                         break;                           
  32.                 }
  33.                 case 0x01:
  34.                 if(P3 != 0x0f)//經過定時器延時后,再次判斷按鍵是否按下
  35.                 {
  36.                         State_Cnt = 0x02;//改變狀態
  37.                         Key_State = P3;//把鍵值保存下來
  38.                         P3 = 0x0f;//恢復P3,以便下次按下重新保存鍵值
  39.                         break;
  40.                 }
  41.                 else
  42.                 {
  43.                         State_Cnt = 0x00;//改變狀態
  44.                         break;
  45.                 }
  46.                 case 0x02:
  47.                 if(P3 == 0x0f)//判斷按鍵釋放
  48.                 {
  49.                         State_Cnt = 0x00;//改變狀態
  50.                         break;
  51.                 }
  52.                 default:break;
  53.         }
  54.         return Key_State;//返回鍵值
  55. }

  56. /**************************************/
  57. /************按鍵功能函數**************/
  58. /***********參數:按鍵鍵碼*************/
  59. /**************************************/
  60. void Display_Key(uchar key_value)
  61. {
  62.         switch(key_value)
  63.         {
  64.                 case 0x0e:LED = 1;break;//鍵值改變時,做出相應的動作(用戶自定義動作)
  65.                 case 0x0d:LED = 0;break;
  66.                 case 0x0b:P1  = 0x00;break;
  67.                 case 0x07:P1  = 0xff;break;
  68.         }
  69. }

  70. void main()
  71. {
  72.         Timer0_init();
  73.         while(1);
  74. }

  75. /************定時器0中斷函數**************/
  76. void Timer0() interrupt 1
  77. {
  78.         static Time_Counter = 0;//定義變量,以便計數
  79.         TH0 = 0xf8;//重新放入中斷初值
  80.         TL0 = 0xcb;
  81.         Time_Counter++;//中斷一次,值加1
  82.         if(Time_Counter == 5)//累計10ms的延時,以便消抖
  83.         {
  84.                 Time_Counter = 0;
  85.                 Display_Key(Key_Scan());//按鍵按下,鍵值碼送入函數,以便做相應動作

  86.         …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
狀態機按鍵程序.rar (14.62 KB, 下載次數: 86)



評分

參與人數 1黑幣 +70 收起 理由
admin + 70 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:66287 發表于 2018-2-9 18:14 | 只看該作者
很好的狀態機處理鍵盤例程
回復

使用道具 舉報

板凳
ID:742384 發表于 2020-5-2 16:09 | 只看該作者
程序不錯,但是有點小問題。case 0x01:       if(P3 != 0x0f) 。。。。。
這個不能說明是同一個按鍵產生的狀態,所以有肯能會誤判。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: aa级毛片毛片免费观看久 | 中文字幕在线观看成人 | 免费在线视频一区二区 | 一区二区三区视频在线观看 | 日韩欧美一区二区三区免费观看 | 日韩中文一区 | 国内av在线 | 欧美日韩a| 欧美成人在线影院 | 国产一二三区精品视频 | 欧美激情国产日韩精品一区18 | 久久久片 | 久久精品a | 久久小视频 | 久久久久久久久99精品 | 91高清视频在线观看 | 99精品国产一区二区三区 | 中文字幕在线免费观看 | 日韩电影免费在线观看中文字幕 | 久久影音先锋 | 中文字幕日韩在线观看 | 亚洲综合色视频在线观看 | 亚洲一区日韩 | 午夜在线视频一区二区三区 | 国内自拍偷拍一区 | 亚洲第一色av | 国产乱一区二区三区视频 | 干干干操操操 | 国产一区不卡 | 在线观看成年人视频 | 精品国产一区二区三区性色av | 91视频免费黄 | 精品国产免费一区二区三区五区 | 在线中文字幕视频 | 婷婷狠狠 | 精品中文字幕在线 | 欧美一级片黄色 | 国产精品久久久久久久一区二区 | 国产欧美精品一区二区三区 | 天天综合网天天综合色 | 欧美一级淫片免费视频黄 |