可以根据以下程序修改,数码管显示
此程序为国信长天51板子的程序,用到38译码器
#include
#define uchar unsigned char
#define uint unsigned int
sbit HC138A=P2^5;
sbit HC138B=P2^6;
sbit HC138C=P2^7;
uchar num,num0,num1,num2;
void display(uchar w,uchar value) ;
void delayms(uint xms) ;
void sec(uchar );
void min(uchar );
void hour(uchar );
uchar table1[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90 ,0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0xbf};
//不带小数点的数字0-9和带点小数的
uchar table2[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 }; //数码管位选
void T_Tint()
{
TMOD=0X01;
TH0=(65536-49990)/256;
TL0=(65536-49990)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
T_Tint();
//display(8,0);
while(1)
{
sec(num0);
display(6,20);
delayms(2);
min(num1);
display(3,20);
delayms(2);
hour(num2);
}
}
void display(uchar w,uchar value)
{
WR=1;
P0=table1[value];
HC138A=1;
HC138B=1;
HC138C=1;
WR=0;
WR=1;
P0=table2[w];
HC138A=0;
HC138B=1;
HC138C=1;
WR=0;
WR=1;
}
void sec(uchar num0)
{
uchar shi,ge;
shi=num0/10;
ge=num0%10;
display(7,shi);
delayms(2);
display(8,ge);
delayms(2);
}
void min(uchar num1)
{
uchar shi,ge;
shi=num1/10;
ge=num1%10;
display(4,shi);
delayms(2);
display(5,ge);
delayms(2);
}
void hour(uchar num2)
{
uchar shi,ge;
shi=num2/10;
ge=num2%10;
display(1,shi);
delayms(2);
display(2,ge);
delayms(2);
}
void T0ISR()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num==20)
{
num=0;
num0++;
}
if(num0==60)
{
num0=0;
num1++;
if(num1==60)
{
num1=0;
num2++;
if(num2==24)
{
num=0;
}
}
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}