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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

C語言編程 如何實現按鍵按下不影響程序執行?

  [復制鏈接]
跳轉到指定樓層
樓主
單片機如何實現按鍵按下不影響程序正常執行
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:57657 發表于 2022-2-9 21:30 | 只看該作者
你這樣肯定是程序邏輯有問題,都用定時器中斷處理的。
回復

使用道具 舉報

板凳
ID:624769 發表于 2022-2-9 22:35 | 只看該作者
你按鍵程序里面只要沒有 delay 或者 while 就不會影響程序運行。
回復

使用道具 舉報

地板
ID:514254 發表于 2022-2-10 00:18 | 只看該作者
按鍵用中斷實現或者具體的事務由定時器實現
回復

使用道具 舉報

5#
ID:161164 發表于 2022-2-10 01:40 | 只看該作者
不要用delay()!不要用delay()!不要用delay()!

給個栗子
  1. #include <reg52.h>

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 to 65535

  4. sbit KEY_XX = P3^5;
  5. u8 mode = 3;
  6. u8 i = 0;
  7. void disp()
  8. {
  9.     switch (mode)
  10.     {
  11.     case 0:
  12.         P1 = ~(0x01 << i);
  13.         break;
  14.     case 1:
  15.         P1 = ~(0x80 >> i);
  16.         break;
  17.     case 2:
  18.         P1 <<= 1;
  19.         if(P1 & 0x80)
  20.         {
  21.             P1 &= 0xFE;
  22.         } else {
  23.             P1 |= 0x01;
  24.         }
  25.         break;
  26.     case 3:
  27.         P1 >>= 1;
  28.         if(P1 & 0x01)
  29.         {
  30.             P1 &= 0x7F;
  31.         } else {
  32.             P1 |= 0x80;
  33.         }
  34.         break;
  35.     default:
  36.         break;
  37.     }
  38.     i = ++i %8;
  39. }
  40. void key_Proc()//單鍵短按
  41. {
  42.     static u16 Delay_XD=0;                        //消抖計數
  43.     if(!KEY_XX)
  44.     {
  45.         if(Delay_XD<0xFFFF)Delay_XD++;
  46.         //else Delay_XD = 0;                //連按功能
  47.         if(Delay_XD==0xFF)                        //消抖
  48.         {
  49.             mode = ++mode % 4;
  50.             i = 0;
  51.             P1 = 0xFF;
  52.         }
  53.     }
  54.     else                                                        //按鍵抬起
  55.         Delay_XD=0;                                        //Delay_XD清0
  56. }
  57. void main()
  58. {   u16 ScanCNT = 0;
  59.     while(1)
  60.     {
  61.         if(ScanCNT++ > 2000)
  62.         {
  63.             ScanCNT = 0;
  64.             disp();
  65.         }
  66.         key_Proc();
  67.     }
  68. }
復制代碼



回復

使用道具 舉報

6#
ID:592807 發表于 2022-2-10 09:22 | 只看該作者
定時器中斷檢測按鍵狀態
回復

使用道具 舉報

7#
ID:136119 發表于 2022-2-10 09:29 | 只看該作者
這個思路 是否適合你

BaiduShurufa_2022-2-10_9-28-39.png (71.14 KB, 下載次數: 25)

BaiduShurufa_2022-2-10_9-28-39.png
回復

使用道具 舉報

8#
ID:415064 發表于 2022-2-10 11:14 | 只看該作者
不要用死循環,每隔10ms讀一次io電平,多看下狀態機
回復

使用道具 舉報

9#
ID:313048 發表于 2022-2-10 11:21 | 只看該作者
用狀態機就可以了。
回復

使用道具 舉報

10#
ID:807651 發表于 2022-2-10 13:41 | 只看該作者
if(Time_2ms == 1)//定時器中斷每2ms檢測按鍵一次
{
  Time_2ms = 0;
   if(KEY == 0)//按鍵按下 低有效
   {
      b_key_10 +=1;
      b_key_11 = 0;
      if(b_key_10 > 24)//消抖50ms
     {
        b_key_10 = 0;
        if( f_key_ok == 0 )//
        {
            f_key_ok = 1;//已經按下
            //切換模式
        }
     }
   }
   else
   {
       b_key_10 = 0;
       b_key_11 += 1;
       if(b_key_11 > 24)//松鍵消抖50ms
       {
           b_key_11 = 0;
           f_key_ok = 0;//松開
       }
   }
}
回復

使用道具 舉報

11#
ID:382454 發表于 2022-2-10 21:00 | 只看該作者
不要有死循環,要有超時代碼自動跳出函數,就可以。
回復

使用道具 舉報

12#
ID:1003226 發表于 2022-2-23 10:25 | 只看該作者
中斷處理
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文字幕网 | 一区二区三区国产视频 | 天天玩夜夜操 | 精品三级| 先锋资源亚洲 | 在线观看www高清视频 | 久久99精品久久久久久国产越南 | 日本一区二区高清视频 | 国产午夜精品视频 | 啪啪网页 | 国产激情精品视频 | 亚洲电影在线播放 | 精品久久久久国产免费第一页 | 另类二区 | 国产高清在线精品一区二区三区 | 免费看黄色视屏 | 精品在线观看一区 | 日本黄色的视频 | 新91视频网 | www.激情.com | 欧美xxxx做受欧美 | 性一爱一乱一交一视频 | 99精品在线| 亚洲一区二区久久久 | 国产欧美一区二区三区久久人妖 | 99精品欧美一区二区三区综合在线 | jav成人av免费播放 | 日韩精品在线免费观看视频 | 91av在线电影 | 欧美中文视频 | 欧美国产一区二区 | 国产精品亚洲欧美日韩一区在线 | 一区二区在线不卡 | 福利精品| 国产精彩视频 | 欧美成视频在线观看 | 国产乱码精品一区二区三区忘忧草 | 免费国产网站 | 天天视频成人 | 亚洲欧美激情视频 | 国产在线一区二区三区 |