|
/* 程序功能:数码管显示秒表计时,前2个数码管表示小时,3、4数码管表示分钟,5、6数码管表示秒
欢迎交流51单片机编程思路 QQ30777103
*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define Duan P0
sbit Wei_a=P1^0;
sbit Wei_b=P1^1;
sbit Wei_c=P1^2;
uchar smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
static uint i;
void delay(uint t)
{
while(t--);
}
void Timer1Init()
{
TMOD=0X10;
TH1=0XFC; TL1=0X18;
ET1=1;
EA=1;
TR1=1;
}
void Timer1() interrupt 3
{
TH1=0XFC; TL1=0X18;
i++;
}
void SMG_Display()
{
static uchar sec,minu,hour;
uchar j;
if(i==1000)
{
i=0;
sec++;
}
if(sec==60)
{
sec=0;
minu++;
}
if(minu==60)
{
hour++;
}
if(hour==24)
{
hour=0;
}
for(j=0;j<6;j++)
{
switch(j)
{
case 0: Wei_a=0; Wei_b=0; Wei_c=0; Duan=~smg[hour/10]; break;
case 1: Wei_a=1; Wei_b=0; Wei_c=0; Duan=~smg[hour%10]|0x80; break;
case 2: Wei_a=0; Wei_b=1; Wei_c=0; Duan=~smg[minu/10]; break;
case 3: Wei_a=1; Wei_b=1; Wei_c=0; Duan=~smg[minu%10]|0x80; break;
case 4: Wei_a=0; Wei_b=0; Wei_c=1; Duan=~smg[sec/10]; break;
case 5: Wei_a=1; Wei_b=0; Wei_c=1; Duan=~smg[sec%10]; break;
}
Duan=0x00;
}
}
void main()
{
Duan=0x00;
Timer1Init();
while(1)
SMG_Display();
} |
|