51单片机,按键控制流水灯程序,懂的进!

2024-11-02 16:27:02
推荐回答(5个)
回答1:

假如,你的程序在执行key_scan();是触发了两次中断导致num>20,你的显示函数将永远被跳过,你应该写成
if(num>20)
{
num=0;
display();
}
这是一个比较直观的错误,其他的没细看,你在试试

回答2:

呵呵,找你的程序看,应该是当你按下键后,TR0=0;而又刚好定时器再执行中断void timer0();这样定时器不起作用了,它只能一直停在时间中断程序里面,无法进入主函数,自然无法你的按键扫描了,所以此时你不管怎么按也没有反应。。

找出了问题,相信以你的能力,你想办法尽量避免这种情况就行了。具体怎么操作我就不说了。。哈哈

回答3:

问题出在键盘扫描,有可能按键时根本没有执行到扫描程序处,因此可能漏掉按键,可以考虑将键盘扫描程序安在定时中断里,发现有按键就置一个按键标志,在主循环中判断键盘标志来决定显示或停止

回答4:

你把键盘扫描程序里的延时改小些 并试一下再TR0=~TR0后加一句init();

回答5:

将程序if(num==20)
{
num=0;
display();
}
放到定时器0中断子程序中 就0k了。