- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uint a,b,i,min,hour,minge,minshi,hourge,hourshi,amin,ahour,aminge,aminshi,ahourge,ahourshi,sec;
- uchar int_time;
- sbit key1=P1^0;
- sbit key2=P1^1;
- sbit key3=P1^2;
- sbit key4=P1^3;
- sbit lcdrs=P2^0;
- sbit lcdrw=P2^1;
- sbit lcden=P2^2;
- sbit led=P2^4;
- sbit sound=P2^5;
- uchar code table1[]={'0','1','2','3','4','5','6','7','8','9'};
- uchar code table2[]="Time:00:00 " ;
- uchar code Alarm_1[]="Alarm:00:00 ";
- uchar code nul[]=" ";
- void delay(unsigned int xms) //??????
- { uint i,j;
- for(i=xms;i>0;i--)
- for(j=124;j>0;j--);
- }
- void write_com(uchar com) //LCD???????
- { delay(5) ;
- lcdrs=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date) //LCD???????
- {
- delay(5);
- lcdrs=1;
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void clock_write()
- { while(1)
- {
- if(key1==0)
- { delay(10);
- if(key1==0)
- {
- if(hour==23) // ???????
- hour=0;
- else
- hour++;
- hourge=hour%10;
- hourshi=hour/10;
- write_com(0x0f);
- delay(2);
- write_com(0x80+6);
- write_data(table1[hourge]);
- delay(5);
- write_com(0x80+5);
- delay(2);
- write_data(table1[hourshi]);
- while(!key1);
- delay(1);
- }
- }
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- if(min==59) //????????
- min=0;
- else
- min++;
- minge=min%10;
- minshi=min/10;
- write_com(0x0f);
- write_com(0x80+9);
- write_data(table1[minge]);
- delay(1);
- write_com(0x80+8);
- write_data(table1[minshi]);
- delay(1);
- while(!key2);
- }
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- write_com(0x0c);
- TR1=1;
- while(!key3);
- break;
- }
- }
- }
- }
- void alarm()
- {
- while(1)
- {
- if(key1==0)
- {
- delay(10);
- if(key1==0)
- {
- if(ahour==24)
- ahour=0;
- else
- ahour++;
- ahourge=ahour%10;
- ahourshi=ahour/10;
- write_com(0x0f);
- delay(2);
- write_com(0x80+0x40+8);
- write_data(':');
- write_com(0x80+0x40+7);
- write_data(table1[ahourge]);
- delay(1);
- write_com(0x80+0x40+6);
- delay(2);
- write_data(table1[ahourshi]);
- delay(1);
- while(!key1);
- }
- }
- if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- if(amin==59)
- amin=0;
- else
- amin++;
- aminge=amin%10;
- aminshi=amin/10;
- write_com(0x0f);
- delay(2);
- write_com(0x80+0x40+10);
- write_data(table1[aminge]);
- delay(1);
- write_com(0x80+0x40+9);
- delay(2);
- write_data(table1[aminshi]);
- delay(1);
- while(!key2);
- }
- }
- if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- write_com(0x0c);
- write_com(0x80+0x40);
- for(i=0;i<11;i++)
- write_data(nul[i]);
- while(!key3);
- break;
- }
- }
- }
- }
- void keyscan()
- {
- if(key1==0)
- {
- delay(10);
- if(key1==0)
- {
- while(!key1);
- time();
- }
- }
- else if(key2==0)
- {
- delay(10);
- if(key2==0)
- {
- while(!key2)
- {
- ahourge=ahour%10;
- ahourshi=ahour/10;
- write_com(0x80+0x40+7);
- write_data(table1[ahourge]);
- delay(5);
- write_com(0x80+0x40+6);
- delay(2);
- write_data(table1[ahourshi]);
- aminge=amin%10;
- aminshi=amin/10;
- write_com(0x80+0x40+10);
- write_data(table1[aminge]);
- delay(5);
- write_com(0x80+0x40+9);
- delay(2);
- write_data(table1[aminshi]);
- write_com(0x80+0x40);
- for(i=0;i<11;++i)
- write_data(Alarm_1[i]);
- }
- write_com(0x80+0x40);
- for(i=0;i<11;i++)
- write_data(nul[i]);
- }
- }
- else if(key3==0)
- {
- delay(10);
- if(key3==0)
- {
- while(!key3);
- ahourge=ahour%10;
- ahourshi=ahour/10;
- write_com(0x80+0x40+7);
- write_data(table1[ahourge]);
- delay(5);
- write_com(0x80+0x40+6);
- delay(2);
- write_data(table1[ahourshi]);
- aminge=amin%10;
- aminshi=amin/10;
- write_com(0x80+0x40+10);
- write_data(table1[aminge]);
- delay(5);
- write_com(0x80+0x40+9);
- delay(2);
- write_data(table1[aminshi]);
- write_com(0x80+0x40);
- for(i=0;i<11;++i)
- write_data(Alarm_1[i]);
- alarm();
- }
- }
- else if(key4==0)
- delay(5);
- if(key4==0)
- {
- while(!key4);
- a=a+1;
- if(a%2==0)
- {
- for(b=0;b<6;b++)
- {
- sound=~sound;
- delay(200);
- }
- sound=1;
- }
- else if(a%2==1)
- {
- sound=0;
- delay(300);
- sound=1;
- delay(300);
- }
- sound=1;
- }
- }
- void main()
- {
- TMOD=0x01;
- TH0=(65536-46483)/256;
- TL1=(65536-46483)%256;
- EA=1;
- ET0=1;
- TR0=1;
- int_time=0;
- sec=55;
- min=59;
- hour=23;
- }
- void T0_interserve(void) interrupt 1
- {
- int_time++;
- if(int_time==20)
- {int_time=0;
- sec++;
- }
- if(sec==60)
- { sec=0;
- min++;
- }
- if(min==60)
- {min=0;
- hour++;
- }
- if(hour==24)
- {hour=0;}
- TH0=(65536-46483)/256;
- TL1=(65536-46483)%256;
- }
复制代码 |