|
int main(void)
{
display(key_value);
delay_ms(20);
}
//按键扫描函数
//放在定时器中断服务里每10ms扫描一次
key_scan(void)
{
u8 key_value = 0;
......;
return key_value;
}
这个key_value应该是全局变量还是局部变量呢?
可我觉得无论是全局还是局部的都可能出问题啊,求高人指点~
(1)若key_value是局部变量;假设,当前按下的是5号键,被扫描到了
那么key_value就是5了;但此时若主函数正好执行到delay_ms(20);
那么这20ms还未执行完,就又迎来了下一个中断扫描(此时没有按键被按下);
那么上次key_value中存的键值5就会因为重新进入key_scan(void)被替换为初始值0;
那么上次按下的5号键 就失效了啊!对吧?
我故意加delay_ms(20)就是为了测试当主函数里的代码量很大很耗时的时侯,
按键值还能不能被正确检测到呢?
到此可能有人会说把key_value定义成全局变量就好了,请继续看:
(2)若key_value是全局变量;假设,当前按下的是5号键,被扫描到了
那么key_value就是5了;但此时若主函数正好执行到delay_ms(20);
6号键又被按下了,那么key_value里的5是不是就会被6号键的键值6给替换了呢?
那么上次按下的5号键 就失效了啊!对吧?
针对这个问题大家是怎么解决的呢?
难道只是祈求主程序快点执行完毕吗?
求一个简单实用的解决方法!!(不要告诉我主程序的执行周期不可能超过20ms之类的话哦) |