‘壹’ 51单片机数码管显示不停闪烁
动态显示,显示程序的调用,不能有条件。
必须不停的调用。
你的显示程序,是满足了什么什么条件,才调用一次?
这就耽误事了。
你显示的时候,先显示分,仅仅显示几个毫秒,之后,就显示秒。
秒,显示几个毫秒,之后,没有消隐,一直显示到下次调用显示程序。
所以,秒,显示稳定,分,一闪就没了。
‘贰’ 单片机数码管小数点闪烁
可以用定时器或者延时程序来设置。
其实数码管的小数点就是一个LED灯。
因为数码管是共阳极的,所以只要在数码管H引脚(即对应小数点的那个引脚)用单片机给它一个低电平,就能让小数点亮了。
首先让小数点亮起来,然后可以用延时1秒的程序或者定时器定时1秒后,让小数点灭,之后再延时1秒,或者定时1秒,让小数点亮,这样循环起来,就OK了
‘叁’ 请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按键的时候会出现闪烁怎么回事
因为你按键的时候影响了数码管刷新;
数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态....
解决办法
1、改进按键扫描
2、改进数码管显示
3、用嵌入式系统
以上三选一即可解决
‘肆’ 单片机数码管小数点闪烁
假设4个数码管,每个亮2ms,一轮扫描共亮8ms,我们可以让其以120次为周期(0.96s),扫描前60次小数点亮,后60次小数点不亮,这样小数点就 以大约1HZ的速度闪烁。
例如,小数点在第二位,数码管七段码table[]中不含小数点
显示部分如下
if(a<60)
{dataport=(table[a1]);
sm1=0; Delay1ms(2);sm1=1;
dataport=(table[a2])|0x80;//第二位多个小数点
sm2=0; Delay1ms(2);sm2=1;
dataport=(table[a3]);
sm3=0; Delay1ms(2);sm3=1;
dataport=(table[a4]);
sm4=0; Delay1ms(2);sm4=1;
ia++;
}
else {dataport=(table[a1]);
sm1=0; Delay1ms(2);sm1=1;
dataport=(table[a2]); //第二位无小数点
sm2=0; Delay1ms(2);sm2=1;
dataport=(table[a3]);
sm3=0; Delay1ms(2);sm3=1;
dataport=(table[a4]);
sm4=0; Delay1ms(2);sm4=1;
ia++;
}
if(a==120) a=0;//120次后重新归零
‘伍’ 51单片机按键时,数码管会闪烁一下.原因是什么
原因很简单,这是代码和数码管驱动的问题
按键会影响数码管显示,这是单片机直接驱动数码管会出现的问题,而数码管则是工作在动态扫描方式的,若是采用带有锁存器件的数码管驱动,则不会出现此类现象,因为单片机是周期性的扫描工作方式,单片机直接驱动数码管的电路,当单片机扫描到按键的时候,数码管部分就停止了(一般的代码都这样,除非数码管是工作在静态扫描方式)
直接驱动数码管,按键的代码一般都会写一些延时,用来软件消除按键的抖动,若延时的时间太长,就会影响数码管的显示效果,另外有些还会增加等待按键松开的语句,这种语句一般都是一个死循环,除非按键被松开
解决办法是,减少按键消抖动延时的时间,在等待按键松开的死循环语句中调用数码管显示函数,这样基本上就可以解决此类问题
‘陆’ 单片机:如何让数码管闪烁
其它照常
一段时间输出与0xff做与运算
一段时间输出与0x00做与运算