没有消隐,所以会显示 |
进去循环前把断码清零, |
应该是扫描法驱动数码管的,一般扫描都会有最后一位显示过后不带消隐。如果想按键不妨碍显示,可以用分时序执行来解决。 |
不在一一回复谢谢各位了。 找到问题了,秒钟十位是放在数码管显示函数的最后一个,没有消隐,所以会显示。我现在也找到一个按住按键不放时会数码管会显示的方法,就是把显示函数放在松手检测死循环里了,具体见后面的程序截图。 |
banalsheep 发表于 2020-2-12 21:59 谢谢,找到问题了,秒钟十位是放在数码管显示函数的最后一个,没有消隐,所以会显示。我现在也找到一个按住按键不放时会数码管会显示的方法,就是把显示函数放在松手检测死循环里了,具体见后面的程序截图。 |
程序有问题呗 |
不知道楼主的程序也搞不清现象,只能笼统的说了,一般都是设置一个数组做显示缓存,比如4位显示的数码时钟,设dat[4];调整小时的时候,显示数据为: dat[0]=hour/10; dat[1]=hour%10; dat[2]=10; dat[3]=10; 显示输出的时候就是; for(i=0;i<4;i++) { Display_out(SEG7[dat[i]]); **** } 其中:10的含义为------SEG7[10]=熄屏码,就是关闭不需要显示的数位。 |
如果没有电平的转换指令,没有锁存也一样的效果。 |
至少有4位数码管,分钟2位 ,秒钟2位,按键前数码管全灭,但按键后程序有相应的显示控制(数码管要点亮),你的问题是按键未松开时,秒钟的十位亮了,而分钟也控制了且与秒钟程序完全一样,我想你这4个数码管一定是采用动态显示方式,动态显示就要去控制某一位点亮(某一时间),通过分析刚才是这时你控制了秒钟的十位亮了,最关键的是按键未松开怎么会有控制(你提到一直在那里死循环),最有可能的是你的按键在按下去抖动了,即你以为是一次按键,殊不知程序认为按下了几次,这样分析不知道是不是能解决你的困惑 |
换IO口当然不能解决问题,只能修改程序去控制IO口的电平状态符合你想要的结果才能做到 |
你看下按下按键循环前单片机做的最后一个动作是啥,一般这个就是在按键循环前IO最后的状态没有清零. |
检查一下是不是消隐问题 |