标题:
为什么单片机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);//发
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会有所优化
作者:
天风情
时间:
2022-7-7 13:48
用这么多延时肯定会慢啊,放定时器中扫描
作者:
Hephaestus
时间:
2022-7-7 15:30
严重怀疑OLED函数里面藏着大量delay()
作者:
laowang123222
时间:
2022-7-11 02:14
把按键扫描函数放进定时器中断里,没20ms执行一次就快了
作者:
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);这样的语句,很容易造成死循环,建议用定时器扫描
作者:
cgrrty
时间:
2022-7-11 18:30
有延时函数用while死里面,刚好延时函数没做完,那不就没得到正确数据返回,不退出了
作者:
不一定会
时间:
2022-7-12 10:36
延时多了,就慢了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1