求助!看了《从单片机初学者迈向单片机工程师》后遇到.....

2020-02-05 09:02发布

本帖最后由 tangaoo 于 2012-5-28 09:16 编辑

***********************************************************题目要求********************************************************************
用按键和数码管以及单片机定时器实现一
个简易的可以调整的时钟,要求如下:
8位数码管显示,显示格式如下
时-分-秒
XX-XX-XX
要求:系统有四个按键,功能分别是调整,加,减,确定。在按下调整键时候,显示时的
两位数码管以1 Hz 频率闪烁。如果再次按下调整键,则分开闪烁,依次循环,直到按下确
定键,恢复正常的显示。在数码管闪烁的时候,按下加或者减键可以调整相应的显示内容。
按键支持短按,和长按,即短按时,修改的内容每次增加一或者减小一,长按时候以一定速
率连续增加或者减少。

***********************************************************我遇到的问题******************************************************************
这是文档上提到的小题目,我的键盘驱动是按文档上上面的想法写着。但是遇到了问题。因为我要一个键位调整键(如KEY1),KEY1每按一下这计数器(Count++)一下。
那么我判断 if KEY1 = 1 是调整秒钟 时间停止走动
           if KEY1 = 2 是调整分钟
           if KEY1 = 3 是调整时钟
           if KEY1 = 4 时恢复
但是我遇到的问题就是按文档上的思路写的驱动无法保证每次键按下时,不能保证Count每次只加1,只能用while(!KEY);, 阻止程序才能保证每次只加1, 但这是这篇文章提到的禁忌。请问大家还有什么其他的办法,或者更好的键盘驱动程序的思路吗???
谢谢了!!!

*****************************************************************************************************************************************
把这个文档也上传了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
tangaoo
1楼-- · 2020-02-07 11:56
startwar0418 发表于 2012-5-29 12:07  9L的方法就很好啊  我说的方法可能有问题,就是长按时那个数字一直不会加,只能等到抬起按键时才加,而且我 ...

谢谢您,我就是安您的思路完成的!
tangaoo
2楼-- · 2020-02-07 13:45
在各位思想的知道下问题已经解决了。我是这样做的,在第一个状态INIT_STATE中加上标志位。然后在主函数中判断,当这个标志位有效了而且PRESS_STATE状态发生了,count++。
这样就是使得只有是从INIT状态进入PRESS状态的情况count才加1。
避免了不断扫描到PRESS使count不断加1的情况。
再次谢谢楼上的各位了!
sos9616
3楼-- · 2020-02-07 17:47
值得去探讨
parkdom
4楼-- · 2020-02-07 22:27
 精彩回答 2  元偷偷看……

一周热门 更多>