编写的一个8个数码管显示的数字时钟可调闹钟 但不能正常运行 程序还没编完!!
#include<reg51.h>
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit LED=P2^2;
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char StrTab[8];
unsigned char minute=19,hour=23,second;
void delay(unsigned int cnt)
{
while(--cnt);
}
void displaypro(void)
{
StrTab[0]=tab[hour/10];
StrTab[1]=tab[hour%10];
StrTab[2]=0x40;
StrTab[3]=tab[minute/10];
StrTab[4]=tab[minute%10];
StrTab[5]=0x40;
StrTab[6]=tab[second/10];
StrTab[7]=tab[second%10];
}
main()
{
TMOD=0x01; //定时器0 10ms
TH0=0xd8; //初始值
TL0=0xf0;
ET0=1;
TR0=1;
TMOD=0x10; //定时器1 动态扫描
TH1=0xf8;
TL1=0xf0;
ET1=1;
TR1=1;
EA=1;
displaypro();
while(1)
{
if(!KEY3)
{
delay(10000);
if(!KEY3)
{
hour++;
if(hour==24)
hour=0;
displaypro();
}
}
if(!KEY2)
{
delay(10000);
if(!KEY2)
{
minute++;
if(minute==60)
minute=0;
displaypro();
}
}
if(!KEY1)
{
delay(10000);
if(!KEY1)
{
second++;
if(second==60)
second=0;
displaypro();
}
}
}
}
//定时器1中断//
void time1_isr(void)interrupt 3 using 0
{
static unsigned char num;
TH1=0xf8;
TL1=0xf0;
switch(num)
{
case 0:P3=0xfe;P0=StrTab[num];break;
case 1:P3=0xfd;P0=StrTab[num];break;
case 2:P3=0xfb;P0=StrTab[num];break;
case 3:P3=0xf7;P0=StrTab[num];break;
case 4:P3=0xef;P0=StrTab[num];break;
case 5:P3=0xdf;P0=StrTab[num];break;
case 6:P3=0xbf;P0=StrTab[num];break;
case 7:P3=0x7f;P0=StrTab[num];break;
default:break;
}
num++;
if(num==8)
num=0;
}
//定时器0//
void time(void)interrupt 1 using 1
{
static unsigned char count;
TH0=0xd8;
TL0=0xf0;
count++;
switch(count)
{
case 0:
case 20:
case 40:
case 60:
case 80:displaypro();break;
case 50:P1=~P1;break; //半秒 LED 闪烁
default:break;
}
if(count==100)
{
count=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
}
|