第1,用NPN三极管(比如9012)做数码管列输入驱动
第2,用NPN或者PNP三极管(随你选)做数码管行输入驱动

第3,#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit _led=P2^7;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
uchar num=0,temp=0,count=0;
uchar aa;
uchar hour,min,sec;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint z);
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar aa);
void read_key();
void led();
void time_change();
void main()
{
P2=0xff;
hour=12;

min=0;
sec=0;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
aa=0xff;
while(1)
{
time_change();
display(table[hour/10],table[hour%10],table[min/10],
table[min%10],table[sec/10],table[sec%10],0xff);
}
}

如何使用单片机at89c51驱动4位8段数码管,如果用到芯片来驱动的,电路图如何连接?
PNP E接电源正,C接电阻接数码管段,B接电阻接控制端(若单片机输出为推挽结构负载能力强如avr可不加三极管直接驱动作段控制)
NPN E接地 , C接数码管位, B接电阻接控制端
看你将四位数码管接在单片机的哪一组输出口?例如51单片机一般都是四组八位输i/o口P0,P1,P2,P3口?一般P0口是三态i/o是要接上拉电阻的。其他接口是不用接上拉电阻的。上拉电阻一般选用1k~4k7都可以保证各管脚输出的电流小于500mA就可以了。?
图我传的这个图?六位数码管虽然是共阴极的?(但是不影响原理)因为他接在51单片机的三态接口上?只需接上拉电阻?(排阻)即可?。这种电路图用两个锁存器U1,U2分别控制数码管的位选和片选信号?(在读中标的WEI1-WEI6是位选信号,a-g等是段选信号)。锁存器U2,U1是同型号的?用图中的wela?和dula的(高电平和低电平)分别控制位选和段选的直通和所存。这样一组i/o口就能驱动数码管了。节省了硬件的开销。希望能帮到你!祝你好运


