单片机 数码管 扫描显示 用少量的 IO 口完成多位数码管扫描显示,一般在程序中需要加入
显示消隐,即在 先关闭 数码管 再写入段码 接着写入 位选码,
电路图片 传不上
#include
#define uchar unsigned char
#define uint unsigned int
sbit led0 = P3^2;
sbit led1 = P3^3;
sbit led2 = P3^4;
sbit led3 = P3^5;
void main(void)
{
P1 = 0xff;
TMOD = 0x21;
TH1 = 0xfa;
TL1 = 0xfa;
TH0 = 0xdc; //11.0592晶振 10ms
TL0 = 0x00;
SCON = 0x40;
PCON = 0x00;
IE = 0x8a;
while(1)
{
TR0 = 1;
}
}
void Timer0(void) interrupt 1 // T0 中断 1 ( INT0 中断 0 )
{
uchar a;
TH0 = 0xdc;
TL0 = 0x00;
P3 |= 0x3c; // P3 或 3CH 显示消隐
a++;
if(a==1)
{
P1 = 0x3f; // 显示 0
P3 ^= 0x04;
}
if(a==2)
{
P1 = 0x06; // 显示 1
P3 ^= 0x08;
}
if(a==3)
{
P1 = 0x5b; // 显示 2
P3 ^= 0x10;
}
if(a==4)
{
a=0;
P1 = 0x4f; // 显示 3
P3 ^= 0x20;
}
}
在每次送完段选数据后,在送入位选数据之前,需要加上一句“P0=0xff;”,这条语句就是“消影”。
写个片段:
dula=1;
P0=table[1];
dula=0;
P0=0xff;//送位选数据前关闭所有显示
wela=1;
P0=0xfe;
wela=0;
delayms(10);
(对共阳极数码管)
可以清数据,也可以清位选,你看差办
你可以用芯片74HC245,还有一些有消隐引脚的数字芯片,可以上网查查