数码管的动态与静态显示

数码管的静态显示

数码管原理图.png

控制不同的LED灯亮灭,进而控制数码管显示不同的数字
比如 数字 2 ,他的8位二进制数为 0101 1011,读数从dp到a,转化为16进制为0x5b

共阴极数码管的编码表为
uchar code table2[] =
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
共阳极数码管的编码表为
uchar code table1[] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

  • Example
  • 循环显示0-9
    静态显示原理图如下:
静态显示原理图.png

代码如下:

    #include  
    #define uchar unsigned char;  
    #define uint unsigned int;  
    uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极
    uchar a,i,j,z;  
    void delay(z)   //延时函数
    {  
       for(j=z;j>0;j--)  
          for(i=110;i>0;i--);  
    }  
    void main()   //主函数
    {  
      while(1)  
        {  
    for(a=0;a<10;a++)//循环9次     
         {  
         P2=table[a];   //依次写入
         delay(1000); //延时1s
          }        
        }  
    }  

数码管的动态显示

  • 4位数码管显示1234,使用动态扫描
    动态显示原理图如下:


    动态显示原理图.png
  • 代码如下:

#include
#define uchar unsigned char;
#define uint unsigned int;

sbit du=P2^0; //段选
sbit we=P2^1; //位选

//位选是控制i哪一个数码管亮,段选是控制数码管显示什么
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段选
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; //位选

uchar i,j,z;
uint numd,numw;

void delay(z)   //
{

   for(j=z;j>0;j--)
      for(i=110;i>0;i--);
}

void display() //
{
     P0=tabledu[numd]; //段选
    delay(10);
    du=1; //打开段选锁存器
    du=0; //保持显示
    P0=tablewe[numw]; //位选
    delay(10);
    we=1; //打开位选锁存器
    we=0; //
    numd++; //
    if(numd==5)
    numd=1;
    numw++; //
    if(numw==4)
    numw=0;
}

void main()
{
   numd=1;
   numw=0;
   while(1)
   {   
    display(); //
    delay(1000);
   }
}

你可能感兴趣的:(数码管的动态与静态显示)