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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么單片機C語言按鍵掃描反應慢?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:356967 發表于 2022-7-6 18:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
請教一下我這個按鍵掃描函數為什么反應很慢,必須得多按一會才有反應,修改減小延時也不管用

單片機C語言源程序如下:
  1. void keyscan(void)
  2. {
  3.         if((A6==0)&&(A7==0))
  4.         {
  5.                 delay_ms(10);
  6.                 if((A6==0)&&(A7==0))
  7.                 {
  8.                         
  9.                         while((!A6)&&(!A7));flag=!flag;beep=!beep;
  10.                 }
  11.         }
  12.         while((flag==1)&&(flag1==1))
  13.         {
  14.                 EA=0;
  15.                 OLED_ShowChinese(20,0,2);//發
  16.                 OLED_ShowChinese(44,0,3);//送
  17.                 OLED_ShowChinese(68,0,4);//消
  18.                 OLED_ShowChinese(93,0,5);//息
  19.                 OLED_CurrsorBlink(x,y,table);
  20.                
  21.                 if(A4==0)
  22.                 {
  23.                         delay_ms(10);
  24.                         if(A4==0)
  25.                         {
  26.                                 while(!A4);
  27.                                 y-=2;
  28.                         }
  29.                         
  30.                 }
  31.                 if(A5==0)
  32.                 {
  33.                         delay_ms(10);
  34.                         if(A5==0)
  35.                         {
  36.                                 while(!A5);
  37.                                 y+=2;
  38.                         }
  39.                         
  40.                 }
  41.                 if(A6==0)
  42.                 {
  43.                         delay_ms(10);
  44.                         if(A6==0)
  45.                         {
  46.                                 while(!A6);
  47.                                 if(x==0)x=120;
  48.                                 else if(x>0)x-=8;
  49.                         }                        
  50.                 }
  51.                 if(A7==0)
  52.                 {
  53.                         delay_ms(10);
  54.                         if(A7==0)
  55.                         {
  56.                                 while(!A7);
  57.                                 x+=8;if(x>120)x=0;
  58.                         }                        
  59.                 }

  60.                 if(confirm==0)
  61.                 {
  62.                         delay_ms(10);
  63.                         if(confirm==0)
  64.                         {
  65.                                 while(!confirm);SendByte(table[8*y+x/8-16]);beep=!beep;
  66.                         }
  67.                 }
  68.         }
  69. }
復制代碼

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

使用道具 舉報

沙發
ID:161164 發表于 2022-7-7 10:00 | 只看該作者
主要耗時在15~19行
把15~18行放進if((A6==0)&&(A7==0))里
因為只需顯示一次
把19行放進if(XXX == 0)里//XXX = A4,A5,A6,A7,confirm
因為只需在有按鍵才更新
回復

使用道具 舉報

板凳
ID:277550 發表于 2022-7-7 10:05 | 只看該作者
都是定值,if換成switch會有所優化
回復

使用道具 舉報

地板
ID:426861 發表于 2022-7-7 13:48 | 只看該作者
用這么多延時肯定會慢啊,放定時器中掃描
回復

使用道具 舉報

5#
ID:883242 發表于 2022-7-7 15:30 | 只看該作者
嚴重懷疑OLED函數里面藏著大量delay()
回復

使用道具 舉報

6#
ID:1013784 發表于 2022-7-11 02:14 | 只看該作者
把按鍵掃描函數放進定時器中斷里,沒20ms執行一次就快了
回復

使用道具 舉報

7#
ID:1039111 發表于 2022-7-11 10:08 | 只看該作者
delay太多了,把if改為switch,只讀IO電平的時候按鍵延時消抖就行了
回復

使用道具 舉報

8#
ID:772513 發表于 2022-7-11 11:36 | 只看該作者
換成if()else()結構會快點,不用每次都輪詢一遍了
回復

使用道具 舉報

9#
ID:61261 發表于 2022-7-11 13:18 | 只看該作者
掃描方式有問題吧
回復

使用道具 舉報

10#
ID:61261 發表于 2022-7-11 13:19 | 只看該作者
掃描方式有問題,不然不會影響速度
回復

使用道具 舉報

11#
ID:407019 發表于 2022-7-11 13:37 | 只看該作者
按鍵不靈敏一般和延時有關 建議檢查一下延時函數里面是否包含延時導致的
回復

使用道具 舉報

12#
ID:1039153 發表于 2022-7-11 16:13 | 只看該作者
不要使用while(!A4);這樣的語句,很容易造成死循環,建議用定時器掃描
回復

使用道具 舉報

13#
ID:31074 發表于 2022-7-11 18:30 | 只看該作者
有延時函數用while死里面,剛好延時函數沒做完,那不就沒得到正確數據返回,不退出了
回復

使用道具 舉報

14#
ID:1037510 發表于 2022-7-12 10:36 | 只看該作者
延時多了,就慢了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品成人免费观看视频 | 国产免费拔擦拔擦8x高清 | 99久久精品国产一区二区三区 | 国产欧美一区二区精品久导航 | 精品伊人久久 | 国产成人一区二区 | 精产国产伦理一二三区 | 亚洲 中文 欧美 日韩 在线观看 | 日日干夜夜操天天操 | 亚洲www| 天天在线操 | 日日夜夜精品视频 | 久久精品国产99国产精品亚洲 | 黄色网址在线免费观看 | 日本精品一区二区 | 国产免费一区二区三区 | 午夜视频在线免费观看 | 中文字字幕在线中文乱码范文 | 国产一区 日韩 | 亚洲精品久久久一区二区三区 | 91视视频在线观看入口直接观看 | 91精品中文字幕一区二区三区 | 在线观看国产视频 | 国产视频二区在线观看 | 欧美日本亚洲 | 亚洲一区二区av | 国产成人黄色 | 久久性色 | 91欧美精品成人综合在线观看 | 夜夜爽99久久国产综合精品女不卡 | 国产欧美三区 | 亚州综合一区 | 日韩在线h| 精品视频成人 | 亚洲国产第一页 | 久久九九网站 | 欧美视频中文字幕 | 欧美视频成人 | 欧美日韩视频 | 免费在线视频一区二区 | 久久一级大片 |