单片机控制的LED动态扫描显示原理

核心提示现已DS8为个位来讨论,十、百、千为分别为DS7、DS6、DS5。1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机P23、P22、P21、P20为低电平。2、动态扫描显示

现已DS8为个位来讨论,十、百、千为分别为DS7、DS6、DS5。1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机P23、P22、P21、P20为低电平。2、动态扫描显示原理如下:(1)P23、P22、P21、P20输出高电平,关闭所有数码管;(2)显示个位——把要显示的数据送到P10~P17,P23送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P23送高电平;(3)显示十位——把要显示的数据送到P10~P17,P22送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P22送高电平;(4)显示百位——把要显示的数据送到P10~P17,P21送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P21送高电平;(5)显示千位——把要显示的数据送到P10~P17,P20送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P20送高电平。(6)以此顺序循环,把它做成子程序,在主循环中调用。

//单片机中LED显示电路用三极管驱动电路四个数码管。可以参考一下

#include<reg52.h>

sbit led0=P3^2;

sbit led1=P3^3;

sbit led2=P3^4;

sbit led3=P3^5;

sbit ledd=P3^7;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char g,s,b,d,a;

unsigned ?int num;

void delay(unsigned char x)

{

unsigned char i,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}?

void display()

{

P1=table[d];

led3=0;

delay(5);

led3=1;

P1=table[b];

led2=0;

delay(5);

led2=1;

P1=table[s];

led1=0;

delay(5);

led1=1;

P1=table[g];

led0=0;

delay(5);

led0=1;

}

void ont()

{

num=0;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void main()

{

ont();

while(1)

{

if(a==20)

{

a=0;

ledd=~ledd;

num++;

d=num/1000;

b=num%1000/100;

s=num%100/10;

g=num%10;

}

display();

if(num==10000)

{

num=0;

}

} }

void time_0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

}

 
友情链接
鄂ICP备19019357号-22