用51单片机做定时器,时间显示在数码管上,要求有秒钟十秒钟分钟十分钟,四个数码管,程序一开始就直接

用51单片机做定时器,时间显示在数码管上,要求有秒钟十秒钟分钟十分钟,四个数码管,程序一开始就直接开始定时,然后用INT0中断停止。求大神解答,感激不尽。

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar disdat[4]={10,10,10,10};
uchar num=0;
uchar min=0,sec=0;
void datdeal()
{
disdat[0]=min/10;
disdat[1]=min%10;
disdat[2]=sec/10;
disdat[3]=sec%10;
}
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(num)
{
case 0:P2=0x01;break;
case 1:P2=0x02;break;
case 2:P2=0x04;break;
case 3:P2=0x08;break;
default:break;
}
datdeal();
P0=ledtab[disdat[num]];
num++;
num&=0x03;
}
void t1isr() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
if(num>=20)
{
num=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)min=0;
}
}
}
void ext0isr() interrupt 0
{
TR1=0;
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR0=1;
ET0=1;
TR1=1;
ET1=1;
EA=1;
while(1);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-06
............这不是最简单的吗?用单片机的定时器设置成50ms中断一次,然后20次就是1秒,秒到了60,然后把秒变成0,分钟加1,数码管你看看是用什么控制138加595,还是数码管芯片直接驱动
相似回答