#include<reg51.h>
#include<intrins.h>
bit ringoff=1;
bit keyrelease;
unsigned int C,state,i;
unsigned int H,M,S;
unsigned int RH,RM;
unsigned char keyinput=0x00 ;
unsigned char input=0x00 ;
unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xc6
};
unsigned char code dispbit[]={
0x01,0x02,0x04,0x08,0x10,0x20
};
unsigned int buffer[]={0,0,0,0,0,0};
void delayMS(unsigned int t)
{
unsigned char i;
while(t--)
for(i=0;i<125;i++);
}
void keyprice(unsigned char key);
void display ();
void main(){
C=0;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
keyrelease=1;
P3=0XFE;
while(1){
keyinput = P1&0Xf0;
if(keyinput!=0xf0){
delayMS(1);
if(keyinput!=0x0f)
{
if( keyrelease ==1)
{
keyrelease=0;
input=keyinput;
}
}
else{
keyrelease=1;
keyprice(input);
input=0xff;
}
}
else{
keyrelease=1;
keyprice(input);
input=0xff;
}
if(ringoff==0&&H==RH&&M==RM)
{
P3=0XFF;
}
display();
}
}
void time1() interrupt 1
{
TH0 =(65535-10000)/256;
TL0 =(65536-10000)%256;
TR0=1;
C++;
if( C==100)
{
S++;
C=0;
if(S>=60)
{
M++;
S=0;
if(M>=60)
{
H++;
S=0;
if(H>=24)
{
H=0;
}
}
}
}
}
void keyprice(unsigned char key){
switch(key){
case 0xe0: state++;
if(state>5) state=0;
break;
case 0xd0: switch(state){
case 0x01: if(H>0) H--;
else H=23; break;
case 0x02: if(M>0) M--;
else M=59; break;
case 0x03: if(S>0) S--;
else S=59; break;
case 0x04: if(RH>0) RH--;
else RH=23; break;
case 0x05: if(RM>0) RM--;
else RM=59; break;
} break;
case 0xb0: switch(state){
case 0x01: if(H<23) H++;
else H=0; break;
case 0x02: if(M<59) M++;
else M=0; break;
case 0x03: if(S<59) S++;
else S=0; break;
case 0x04: if(RH<23) RH++;
else RH=0; break;
case 0x05: if(RM<59) RM++;
else RM=0; break;
} break;
case 0x70: ringoff=~ringoff;
break;
default : break;
}
}
void display () {
if(state==4 || state==5)
{
buffer[0]=RH/10;
buffer[1]=RH%10;
buffer[2]=RM/10;
buffer[3]=RM%10;
buffer[4]=0xff;
buffer[5]=0xff;
for(i=0;i<4;i++)
{
P0=table[buffer[i]];
P2=dispbit[i];
delayMS(1);
P2=0x0;
}
}
else
{
buffer[0]=H/10;
buffer[1]=H%10;
buffer[2]=M/10;
buffer[3]=M%10;
buffer[4]=S/10;
buffer[5]=S%10;
for(i=0;i<6;i++)
{
P0=table[buffer[i]];
P2=dispbit[i];
delayMS(1);
P2=0x0;
}
}
}
89c51+Ds1302实现的电子打铃器
4星 · 超过85%的资源 需积分: 10 174 浏览量
2010-12-27
16:25:55
上传
评论 1
收藏 81KB RAR 举报
大饭团生了个小土豆
- 粉丝: 0
- 资源: 2