数字温度计单片机课程设计用74LS573驱动4位数码管

2025-03-20 19:47:34
推荐回答(1个)
回答1:

在proteus中用74hc573,做数码管显示的仿真。

#include
#include
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
uchar temp,aa,numdu,numwe,bai,shi,ge;
uint shu;
void init();
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={
0x3f , 0x06 , 0x5b , 0x4f ,
0x66 , 0x6d , 0x7d ,
0x07, 0x7f , 0x6f ,
0x77, 0x7c , 0x39 ,0x5e ,0x79 ,
0x71 ,0x00
};
void display(uchar bai,uchar shi,uchar ge);
void main()
{
shu=219;
init();
while(1)
{
display(bai,shi,ge);
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(1);

wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(1);
wela=1;
P0=0xfb;
wela=0;
dula=1;
P0=table[ge];
dula=0;
delay(1);
}
void init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==2)
{
aa=0;
shu--;
if(shu==10)
{
TR0=0;
ET0=0;
}
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
}
}