要求是 1,:每1/6秒跑一分钟,24小时4分钟跑完这个 (做完了) 2:可以设置时间(做的不对) 3:可以设置闹钟(还没做),程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit P03=P0^3;
sbit P30=P3^0;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
uchar hour,min,keyflag,alarm;
uint codenum,i;
void delay();
uchar code table[]
={
0x0E,0x1E,0x2E,0x3E,0x4E,
0x5E,0x6E,0x7E,0x8E,0x9E
};
void display()
{
P1=table[hour/10];
P2=0xf7;
delay();
P1=table[hour%10];
P2=0xfb;
delay();
P1=table[min/10];
P2=0xfd;
delay();
P1=table[min%10];
P2=0xfe;
delay();
}
void buzzer()
{
P03=0;
delay();
P03=1;
delay();
}
void main()
{
TH0=0/256;
TL0=0%256;
TMOD=0x01;
TR0=1;
EA=1;
ET0=1;
EX0=1;
EX1=1;
IT0=0;
while(1)
{
if(keyflag==0)
{
while(keyflag==0)
{
display();
if(codenum==2)
{codenum=0;
min++;
}
if(min==60)
{ min=0;
hour++;
}
if(hour==24)
hour=0;
}
}
if(keyflag==1)
{ TR0=0;
hour=0;min=0;
while(keyflag==1)
{
if(P34==0)
{
hour++;
while(P34!=1);
}
if(P35==0)
{
min++;
while(P35!=1);
}
}
}
if(keyflag==2)
{
keyflag=0;
TR0=1;
}
}
}
void exint_O() interrupt 0
{
keyflag++;
}
void timer0int() interrupt 1
{
TH0=0/256;
TL0=0%256;
codenum++;
}
void delay()
{
TH1=(65000/256);
TL1=(65000%256);
TR1=1;
while(!TF1);
TR1=0;
TF1=0;
}
就是51单片机呀,注释写了,不过在另一个帖子上了,太长了,不给发
EX1 是给闹钟准备的,还没用上,TR1 确实忘写了,不过写上反应也没差别呀
不对,TR1 我写在子程序里了
看delay函数
我没用到ET1 ,只用了ET 0 和EX0