51---动态数码管

1.1、什么是动态数码管
(1)数码管还是原来的数码管(共阳极或共阴极均可);动态数码管有两端:COM端和段码端
(2)段码一侧还是接一个单片机端口
(3)COM(共极)接单片机一个IO口,多个联排数码管的COM共同接一个IO端口
分析对比静态和动态数码管,发现本质区别是:静态数码管中只要给了段码数码管就一定工作(显示只取决于段码端),动态数码管中段码端给了段码值后还需要COM端配合才能点亮数码管。


1.2、动态数码管如何工作
(1)在某一特定时间段中,联排数码管中只有一个数码管在工作,其他均在休息(不工作)
(2)COM端选择哪个数码管工作,段码端输出这个数码管要显式的数字的段码;延时;COM端选择下一个数码管工作,同时段码端改输出这个数码管要显示的数字的段码;延时;COM端选择下一个数码管工作······
(3)快速切换工作的数码管,则人看到的是所有的数码管都在亮(其实亮度是比静态驱动低的)。
(4)动态数码管利用了人眼的视觉暂留
第一,宏观上所有的数码管都是同时亮的,所以人以为所有数码管同时工作,所以多个数码管可以合在一起来显示(譬如显示12345678)

第二,微观上数码管是依次亮的,我们可以给不同的数码管送不同的段码,所以不同的数码管可以显示不同的数字。所以相当于8个数码管的显示是独立的。



1.3、8个联排数码管一起显示520.1314

#include<reg51.h>


void delay(void)
{
   unsigned char i, j;
   for(i = 0; i < 20; i++)
   for(j = 0; j < 10; j++);
   
}


void main(void)
{
   unsigned char shumaguan[8] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd,0xfe};   //依次选择数码管1-8
   unsigned char duanxuan[8] = {0x6d, 0x5b, 0x3f, 0x80, 0x06, 0x4f,  0x06, 0x66}; //依次显示520.1314
   while(1)
   {
      unsigned char i = 0;
 for(i = 0; i<8; i++)
 {
    P2 = shumaguan[i];
P0 = duanxuan[i];
delay();
P0 = 0x0;
}
}
  
     
   
   
   }


猜你喜欢

转载自blog.csdn.net/qq_35576988/article/details/78396144