数码管显示问题总结

 

1.数码管显示原理
       我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。其原理图如下。

 

                   

 

   注:共阳极数码管:低电平点亮

          共阴极数码管:高电平点亮

 

2.段码字节与字节中各位对应关系:

代码位: D7   D6   D5   D4   D3   D2   D1   D0

显示段: dp    g    f     e     d    c     b     a

 

3.重影:IO口从高电平到低电平,有一定的残留的电流在里面。

在数码管动态显示实验中,每次送完段选数据后,在送入位选数据之前,需要一句 
“P0 = 0xff” ,这条语句的专业名称叫做“消影” 
解释如下: 
在刚送完段选数据后,P0口仍然保持着上次的段选数据,若不加“P0 = 0xff”这句话,再执行接下来的打开位锁存器命令后,原来保持在P0口的段选数据将立即通过位选锁存器直接加在数码管上,接下来才是再次通过P0口给位选锁存器送入位选数据,虽然这个过程非常短暂,但是在数码管高速显示状态下,我们仍然可以看到数码管出现显示混乱的现象,加上消影之后,在开启位锁存器后,P0口数据全为高电平,所以哪个数码管都不会亮,因此这个消影的动作是很重要的。

4.关于送数据与送段选位选先后问题:

 /*

 * 函数名:DulaSet

 * 描述  :数码管段选设置

 * 输入  :DP:数码管段选是否为带小数点显示方式 Y:是 / N:否

 *         DU:段选——范围为16个字形码

 * 输出  :无

 * 备注  :先送位选数据,再使能锁存器,(最佳写法)

 *        因为只有P0状态稳定了,锁进去的数据才不会出错

 *        否则显示0x00(即数码管8位全关断)会有亮影

 *        接着关锁存器,一瞬间锁存器即可锁存数据                               

 */                                                                    

void DulaSet(uchar DP,uchar DU)

{

       if(DP == Y)

           P0 = NTDP[DU];    //送段选数据,带小数点段选表示

       else if(DP == N)

           P0 = NT[DU];    //送段选数据

       DULA = 1;    //开U1锁存器端

       DULA = 0;    //关U1锁存器端
     
}



5.数码管静态显示与动态显示的区别:

   (对于单片机上8位的数码管(8段LED)

静态:

  1. 段码线:每一位段码线分别与一个8位I/O锁存器输出相连
  2. 位码线:8个8位I/O口

动态: 

  1. 段码线:一个数码管占用一个8位I/O口
  2. 位码线:8个数码管占用一个8位I/O口

但在实际单片机硬件电路连接中,都把段码线并联,故,静态显示方式下,所有数码管显示相同。

     3. 由于各个数码管的段码线并联,(静态显示下)在同一时刻,8个数码管将显示相同的字符,因此若要各个数码管能够同时显示出与本位相应的显示字符,就必须采用动态扫描的显示方式。即在某一时刻,只让某一位的位选线处于选通状态,同时,段码线上输出相应为要显示的字符。LED不同为显示的时间间隔(扫描间隔)应根据实际情况而定。发光二极管从导通到发光有一定的延时,导通时间太短,发光太弱,人眼无法看清;时间太长,要受限于临界闪烁频率,而且此时间越长,占用单片机的时间越多。另外显示位数增多,也将占用大量的单片机时间,因此动态显示的实质是一些牺牲单片机的时间来换取I/O端口的减少。

  • 12
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C51单片机数码管动态显示是单片机基础教学中比较经典的一个实验,该实验可以通过单片机控制数码管的显示,实现数字的动态滚动、计时、计数等功能。下面是该实验的总结。 一、实验原理 数码管动态显示是通过单片机的高速刷新来实现的。数码管的显示是静态的,即只有一次性地将数码管的显示数据送入数码管的存储器中,而动态显示则是通过不断地刷新数码管的显示数据,使其看上去是在不停地变化。单片机控制数码管的显示,需要通过端口输出控制信号,将位选段选信号送入数码管中,从而实现数码管的动态显示。 二、实验器材 1. C51单片机开发板 2. 74HC595移位寄存器 3. 共阴数码管 4. 面包板、杜邦线等 三、实验步骤 1. 将数码管的阳极连接到单片机的P2口,将数码管的阴极连接到74HC595移位寄存器的输出端Q0~Q7。 2. 将74HC595移位寄存器的SCK、RCK、SDA分别连接到单片机的P3.5、P3.6、P3.7口。 3. 在程序中设置数码管的显示数据,将其存入74HC595移位寄存器中。 4. 设置位选信号,将控制信号送入数码管中,实现数码管的动态显示。 四、实验代码 以下是C语言编写的数码管动态显示的实验代码: ``` #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code table[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; //数码管显示表 void delay(uint x) { uint i, j; for (i = x; i > 0; i--) for (j = 110; j > 0; j--); } void main() { uchar i = 0; while (1) { P3 = 0xFF; //清零P3口 P1 = table[i++]; //设置数码管显示数据 if (i == 10) i = 0; //循环显示0~9 P3 = ~(1 << i); //设置位选信号,显示第i个数码管 delay(1); //延时一段时间 } } ``` 五、实验结果 实验成功后,数码管应该可以进行动态滚动、计时、计数等功能的实现。通过对程序进行修改,还可以实现更多有趣的功能,如闪烁、渐变等。 六、实验结论 通过本次实验,我们掌握了单片机控制数码管的动态显示原理和方法,了解了74HC595移位寄存器的使用方法。在实验中,我们不仅学会了如何通过单片机控制数码管的显示,还锻炼了编程能力和动手能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值