欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機獨立按鍵狀態機源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:332880 發表于 2018-5-18 12:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
藍橋杯獨立按鍵狀態機單片機源程序如下:
  1. /*
  2.           例程:按鍵實驗例程
  3.                 作者:電子設計工坊
  4. */
  5. #include "reg52.h"

  6. /*獨立按鍵狀態機*/

  7. //#define key_input P3
  8. //#define key_state_0  0  //判斷是否按下
  9. //#define key_state_1  1 //判斷是否為抖動
  10. //#define key_state_2  2 //判斷是否彈起
  11. //   
  12. //char read_key(void)
  13. //{
  14. // static char key_state = 0;
  15. // char key_press, key_return = 0;
  16. // key_press = key_input&key_mask;
  17. // switch (key_state)
  18. //{        
  19. //   case key_state_0:     
  20. //   if (key_press!=key_mask) key_state = key_state_1;
  21. //   break;
  22. //         
  23. //   case key_state_1:   
  24. //   if (key_press==(key_input&key_mask))
  25. //   {
  26. //           if(key_press==0x0e) key_return = 1;  //S7
  27. //                 if(key_press==0x0d) key_return = 2;  //S6
  28. //                 if(key_press==0x0b) key_return = 3;  //S5
  29. //                 if(key_press==0x07) key_return = 4;  //S4
  30. //           key_state = key_state_2;  
  31. //   }
  32. //   else
  33. //            key_state = key_state_0;  
  34. //   break;  
  35. //   case key_state_2:
  36. //   if (key_press==0x0f) key_state = key_state_0;
  37. //   break;
  38. //}
  39. //return key_return;
  40. //}

  41. void Delay10ms()                //@11.0592MHz
  42. {
  43.         unsigned char i, j;

  44.         i = 18;
  45.         j = 235;
  46.         do
  47.         {
  48.                 while (--j);
  49.         } while (--i);
  50. }

  51. /*獨立按鍵三行*/
  52. unsigned char Trg;
  53. unsigned char Cont;
  54. #define KEYPORT P3
  55. void Key_Read( void )
  56. {
  57.     unsigned char ReadData = KEYPORT^0xff;
  58.     Trg = ReadData & (ReadData ^ Cont);      
  59.     Cont = ReadData;                                        
  60. }

  61. /*矩陣按鍵*/
  62. #define KEY P3
  63. #define key_state_0  0  //判斷是否按下
  64. #define key_state_1  1 //判斷是否為抖動
  65. #define key_state_2  2 //判斷是否彈起
  66.    
  67. char read_KBD(void)
  68. {
  69. static char key_state = 0;
  70. unsigned char key_return=0, key_press;
  71. unsigned char key1,key2;
  72.         KEY=0xf0;
  73.         key1=KEY&0xf0;
  74.         KEY=0x0f;
  75.         key2=KEY&0x0f;
  76.         key_press =key1|key2;

  77. switch (key_state)
  78. {        
  79.    case key_state_0:    //
  80.    if (key_press!=0xff) key_state = key_state_1;
  81.    break;
  82.          
  83.    case key_state_1:     
  84.    if (key_press !=0xff)
  85.    {
  86.                         if(key_press==0xde) key_return = 1;  //S15  其他鍵值大家自行推算
  87.                         if(key_press==0xdd) key_return = 2;  //S14
  88.                         key_state = key_state_2;  
  89.    }
  90.    else
  91.                         key_state = key_state_0;  
  92.    break;  
  93.    case key_state_2:
  94.    if (key_press==0xff) key_state = key_state_0;
  95.    break;
  96. }
  97. return key_return;
  98. }

  99. sbit buzzer = P0^6;
  100. void main()
  101. {
  102.         unsigned char key_val;
  103.         while(1)
  104.         {
  105.                 //矩陣鍵盤的實驗
  106.                 key_val=read_KBD();
  107.                 if(key_val==1)//S15
  108.                 {
  109.                         P2=0xa0;buzzer=1;P2=0x00;
  110.                 }
  111.                 if(key_val==2)//S14
  112.                 {
  113.                         P2=0xa0;buzzer=0;P2=0x00;
  114.                 }
  115.                
  116.                 //三行獨立按鍵的實驗               
  117. //                Key_Read();
  118. //                if(Trg & 0x08)//S4
  119. //                {
  120. //                        P2=0xa0;buzzer=1;P2=0x00;
  121. //                }
  122. //                if(Trg & 0x04)//S5
  123. //                {
  124. //                        P2=0xa0;buzzer=0;P2=0x00;
  125. //                }
  126.                
  127.                 //獨立按鍵狀態機的實驗               
  128. //                key_val=read_key();
  129. //                if(key_val==1)//S7
  130. //                {
  131. //                        P2=0xa0;buzzer=1;P2=0x00;
  132. //                }
  133. //                if(key_val==2)//S6
  134. //                {
  135. //                        P2=0xa0;buzzer=0;P2=0x00;
  136. //                }
  137.                 Delay10ms();
  138.         }
  139. }
復制代碼

所有資料51hei提供下載:
6.KEY_課后練習.rar (24.97 KB, 下載次數: 62)


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

使用道具 舉報

沙發
ID:228452 發表于 2018-5-26 04:07 | 只看該作者
Thanks for code listing
回復

使用道具 舉報

板凳
ID:20672 發表于 2018-7-23 22:27 | 只看該作者
謝謝分享!!!
回復

使用道具 舉報

地板
ID:382507 發表于 2019-8-3 09:51 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表