单片机数码管动态显示的过程中,怎么实现让其中一个闪烁,其他的不受影响;

供稿:hz-xin.com     日期:2025-01-14
51单片机数码管动态显示的过程中,怎么实现让最后一个闪烁,其他的不受影响?

闪烁原理,别的数码管都是反复刷新,需要闪烁的那一位则刷新几十次后再有几十次不显示
下例是20次亮 20次灭
uchar modtable[6][4]={ {0,0,0,0},{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{1,1,1,1} };
//有1的那一位数码管不亮 {0,0,0,0}不闪烁 {1,1,1,1} 4位全闪烁
uchar ia;

uchar bai,shi,ge;
uchar flag=0;
uint a=0;
//共阴数码管七段码,转成共阳的需取反,程序中已这样做了

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void display(uint m,uchar mode )//4位显示子程序 带某位闪烁功能
//mode=0,都不闪烁 mode=1 千位闪烁 mode=2 百位闪烁 mode=3 十位闪烁 mode=4 个位闪烁

//mode=5 全部闪烁
{
uchar a1,a2,a3,a4;
uchar modeaa;
a1=m/1000;
a2=m/100%10;
a3=m/10%10;
a4=m%10;

if(ia<20)
{
modeaa=mode;//可闪烁也可不闪烁,闪烁位有20次不亮
}
else
{
modeaa=0;//正常显示
}

dataport=~(table[a1]);
sm1=modtable[modeaa][0]; Delay1ms(2);sm1=1;

dataport=~(table[a2]);
sm2=modtable[modeaa][1]; Delay1ms(2);sm2=1;

dataport=~(table[a3]);
sm3=modtable[modeaa][2]; Delay1ms(2);sm3=1;

dataport=~(table[a4]);
sm4=modtable[modeaa][3]; Delay1ms(2);sm4=1;
ia++;

if(ia==40) ia=0;//40次一轮

}

已经用动态扫描的方式让它显示了,那么后面就后简单了;动态扫描的时候是一直给两个数码管点亮的,如果需要让某一位闪烁,只需要在一段时间内不点亮这个LED即可;具体一点,动态扫描的时候是A AC B BC 表示选择A 和赋A的编码这样循环的,扫描的时候是一直这样交替的,现在改为for(){A AC B BC} ;for(){A AOFF B BC} ;for里的数据约定闪烁的频率,AOFF表示A管全灭的数据 ,这样它让交替执行就可以了。

嘿嘿 俺来帮你喽
1 单片机数码管动态显示的过程中,设置一个闪烁寄存器,专门保存要闪烁显示的位子,再增加一个闪烁显示码的暂存器。
2 每次调用显示程序时,先要判断需要显示闪烁的位子的显示码,是不是等于“灭”的显示码,
不是的话,将该位的显示码送闪烁显示码的暂存器进行保存,将“灭”的显示码送入相应的显示缓冲区的位子,调用显示程序;如果等于“灭”的显示码,则将保存在闪烁显示码的暂存器中的显示码再送回相应的显示缓冲区的位子,调用显示程序。
呵呵 只给出实现的算法 代码就自己编喽。
满意的话 就给加分吧

持续刷新,常亮的保持不变,闪烁的一次输出1,一次输出0

七段数码管动态显示实验问题怎么办
当向数码管发送字形码时,所有数码管都接收到相同的字形码时,但究竟是那个数码管亮,取决于COM端,这一端是由I\/O控制的,所以就可以自行决定何时显示哪一位。动态扫描即采用分时方法,轮流控制各个LED轮流点亮。在轮流点亮扫描过程中,每一位显示器的点亮时间是极为短暂的,但由于人的视觉暂留现象及...

请教一下,单片机数码管的问题?
然后将显示编码通过这个虚拟的串行同步移位寄存器发送给 串行\/并行转换接口。使用5片74ALS164芯片做串行\/并行转换接口,同时驱动5位LED七段数码管,做静态显示电路。如果感到满意,就快点给俺加分吧(要程序代码 可以到百度文库下载《不占用单片机串口资源的串行显示电路的设计方法》一文)...

编程数码管循环显示数字0-5
在DELAY子程序中,程序通过多次循环和计数器实现延时效果。具体来说,程序使用R1、R2和R3三个寄存器进行计数,并通过DJNZ指令控制循环次数,从而实现定时效果。整个程序通过不断更新数码管显示代码,实现从0至5的循环显示效果。在显示过程中,程序通过定时延迟函数模拟数码管的闪烁效果,从而达到动态显示的效果...

简述LED数码管动态,扫描的原理及其实现方式?
LED数码管动态扫描原理其实就是利用“人眼视觉暂留”这个现象来实现的,人眼视觉暂留时间大概在一帧图像的时间。一帧图像时间是1\/24秒,也就是41ms左右的时间,所以一排数码管只要在这个时间之内重复显示,那么我们看到的数码管就会被认定为稳定的显示。数码管控制花样更改方便,只需将编辑生成的花样格式...

C51课程基础内容整理
静态显示技术中,恒定地导通或截止对应发光二极管,始终选中位数码管。静态显示接口中,段选线与并行口相连,公共端接地。静态显示优点为显示亮度高、编程简单,缺点为占用I\/O端口多,适用于显示器位数较少的场合。动态显示技术中,轮流显示各个数码管,保持一段时间,反复循环。人眼的“视觉暂留”和发光...

如何利用单片机让4位数码管显示?
display(1,2,3,4);\/\/主程序始终调用数码管显示子程序 } } void display(uchar a,uchar b,uchar c,uchar d){ P2=0xef;P0=table[a];\/\/给第一个数码管送"a"delay(1);\/\/延时1ms P2=0xdf;P0=table[b];\/\/给第二个数码管送"b"delay(1);\/\/延时1ms P2=0xbf;P0=table[c];\/\/给第...

数码管怎么使用
但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为...

如何让8个数码管显示出不一样的数值
2”……第8个一直显示“8”,因此实现8个数码管显示不同的内容。动态显示相比静态显示占用的电平控制端口要少很多,因不同的数码管之间可以公共端口,例如7个笔画端共用,则只需要7个笔画端+8个公共端,15个端口即可。通常数码管显示都是采用的动态显示方式。以上,不知道说清楚了没?~...

简述LED数码管动态,扫描的原理及其实现方式?
(3)单片集成式多位数字显示器是在发光材料基片上(大圆片),利用集成电路工艺制作出大量七段数字显示图形,通过划片把合格芯片选出,对位贴在印刷电路板上,用压焊工艺引出引线,再在上面盖上“鱼眼透镜”外壳。它们适用于小型数字仪表中。 (4)符号管、米字管的制作方式与数码管类似。 (5)矩阵管(发光二极管点阵)也...

单片机C51实现按键一次数码管加1程序问题。高手进。
设计一个单片机C51程序,实现功能是,1、按KEY1只有红灯亮,KEY2只有黄灯亮,KEY3只有绿灯亮。2、开始右数码管显示0,每按KEY1一次数码管显示加1,至9后再循环。先已经编好程序,第一个实现,但第二个总弄不对。感觉问题很简单,就是差一点,高手帮我看一下。... 展开 #...