標題:
為什么單片機C語言按鍵掃描反應慢?
[打印本頁]
作者:
zzccll
時間:
2022-7-6 18:10
標題:
為什么單片機C語言按鍵掃描反應慢?
請教一下我這個按鍵掃描函數為什么反應很慢,必須得多按一會才有反應,修改減小延時也不管用
單片機C語言源程序如下:
void keyscan(void)
{
if((A6==0)&&(A7==0))
{
delay_ms(10);
if((A6==0)&&(A7==0))
{
while((!A6)&&(!A7));flag=!flag;beep=!beep;
}
}
while((flag==1)&&(flag1==1))
{
EA=0;
OLED_ShowChinese(20,0,2);//發(fā)
OLED_ShowChinese(44,0,3);//送
OLED_ShowChinese(68,0,4);//消
OLED_ShowChinese(93,0,5);//息
OLED_CurrsorBlink(x,y,table);
if(A4==0)
{
delay_ms(10);
if(A4==0)
{
while(!A4);
y-=2;
}
}
if(A5==0)
{
delay_ms(10);
if(A5==0)
{
while(!A5);
y+=2;
}
}
if(A6==0)
{
delay_ms(10);
if(A6==0)
{
while(!A6);
if(x==0)x=120;
else if(x>0)x-=8;
}
}
if(A7==0)
{
delay_ms(10);
if(A7==0)
{
while(!A7);
x+=8;if(x>120)x=0;
}
}
if(confirm==0)
{
delay_ms(10);
if(confirm==0)
{
while(!confirm);SendByte(table[8*y+x/8-16]);beep=!beep;
}
}
}
}
復制代碼
作者:
lkc8210
時間:
2022-7-7 10:00
主要耗時在15~19行
把15~18行放進if((A6==0)&&(A7==0))里
因為只需顯示一次
把19行放進if(XXX == 0)里//XXX = A4,A5,A6,A7,confirm
因為只需在有按鍵才更新
作者:
devcang
時間:
2022-7-7 10:05
都是定值,if換成switch會有所優(yōu)化
作者:
天風情
時間:
2022-7-7 13:48
用這么多延時肯定會慢啊,放定時器中掃描
作者:
Hephaestus
時間:
2022-7-7 15:30
嚴重懷疑OLED函數里面藏著大量delay()
作者:
laowang123222
時間:
2022-7-11 02:14
把按鍵掃描函數放進定時器中斷里,沒20ms執(zhí)行一次就快了
作者:
jojoyudio
時間:
2022-7-11 10:08
delay太多了,把if改為switch,只讀IO電平的時候按鍵延時消抖就行了
作者:
hcf007
時間:
2022-7-11 11:36
換成if()else()結構會快點,不用每次都輪詢一遍了
作者:
fhsgjsgjsfgjsfj
時間:
2022-7-11 13:18
掃描方式有問題吧
作者:
fhsgjsgjsfgjsfj
時間:
2022-7-11 13:19
掃描方式有問題,不然不會影響速度
作者:
3125311919
時間:
2022-7-11 13:37
按鍵不靈敏一般和延時有關 建議檢查一下延時函數里面是否包含延時導致的
作者:
caoxinri123
時間:
2022-7-11 16:13
不要使用while(!A4);這樣的語句,很容易造成死循環(huán),建議用定時器掃描
作者:
cgrrty
時間:
2022-7-11 18:30
有延時函數用while死里面,剛好延時函數沒做完,那不就沒得到正確數據返回,不退出了
作者:
不一定會
時間:
2022-7-12 10:36
延時多了,就慢了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1