附录二
多功能电子时钟完整程序 main.c(主程序)
#include\
uchar SetState,SetPlace; uchar renum,x,y,mn,i,nm,m;
uchar code CharCode6[]=\闹钟设定成功 uchar code CharCode7[]=\时间设定中%uchar code CharCode8[]=\闹钟设定中\void IrInit();
void DelayMs2(unsigned int); void redwear(void); void Delay10ms(void);
sbit K1=P2^0; sbit K2=P2^1; sbit K3=P2^2; sbit K4=P2^3;
void main() {
LCD12864_Init(); Ds1302Init1(); ClockInit(); renum=menu(); IT0=1; EX0=1; PX0=0;
EA=1;
while(1) { if(renum==0) { settime(); } else { m=0; setclock();
16
进入时钟\
m++; displaylcd(CharCode6); delay8(3000); settime(); } } }
void LcdDisplay() {
LCD12864_SetWindow(0, 0); LCD12864_WriteData('2'); LCD12864_WriteData('0');
LCD12864_WriteData('0'+TIME[6]/16); LCD12864_WriteData('0'+(TIME[6]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+TIME[4]/16); LCD12864_WriteData('0'+(TIME[4]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+TIME[3]/16); LCD12864_WriteData('0'+(TIME[3]&0x0f)); LCD12864_WriteData(' '); LCD12864_WriteData(' '); LCD12864_WriteData(' '); LCD12864_WriteData(' '); LCD12864_SetWindow(1, 0);
LCD12864_WriteData('0'+TIME[2]/16); LCD12864_WriteData('0'+(TIME[2]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+TIME[1]/16); LCD12864_WriteData('0'+(TIME[1]&0x0f)); LCD12864_WriteData('-'); LCD12864_WriteData('-');
LCD12864_WriteData('0'+TIME[0]/16); LCD12864_WriteData('0'+(TIME[0]&0x0f)); LCD12864_SetWindow(2, 0); LCD12864_WriteData('w'); LCD12864_WriteData('e'); LCD12864_WriteData('e');
LCD12864_WriteData('k'); LCD12864_WriteData(' ');
17
LCD12864_WriteData('0'+(TIME[5]&0x07)); DS18B20(); }
void Int0() interrupt 0 { Delay10ms(); if(K1==0)
{ LCD12864_WriteCmd(0x0c); SetState=~SetState; SetPlace=0; nm=0; if(mn==0) { displaylcd(CharCode7); delay8(3000);mn++; } if(m==0) {Ds1302Init1();} else {Ds1302Init();} } }
void Delay10ms(void) {
unsigned char a,b,c; for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--); }
void settime() { po=0;
b: while(clock()==0) { if(SetState==0) { mn=0; Ds1302ReadTime(); LcdDisplay(); } else
18
{ mn++; if(K2==0) { SetPlace++; if(SetPlace>=7) SetPlace=0; while((i<50)&&(K2==0)) { Delay10ms(); i++; } i=0; } if(K3==0||K4==0) { if(K3==0) { TIME[SetPlace]++; if((TIME[SetPlace]&0x0f)>9) { TIME[SetPlace]=TIME[SetPlace]+6; } } else {TIME[SetPlace]--; if((TIME[SetPlace]&0x0f)>9) { TIME[SetPlace]=TIME[SetPlace]-6; } } if((TIME[SetPlace]>=0x60)&&(SetPlace<2)) { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x24)&&(SetPlace==2)) { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x32)&&(SetPlace==3)) { TIME[SetPlace]=0; }
19
if((TIME[SetPlace]>=0x13)&&(SetPlace==4)) { TIME[SetPlace]=0; } if((TIME[SetPlace]>=0x8)&&(SetPlace==5)) { TIME[SetPlace]=1; } while((i<50)&&(K3==0)||(K4==0))
{ Delay10ms(); i++; } i=0; LcdDisplay(); }
if(nm==0) {
LcdDisplay(); nm++; }
}
switch (SetPlace) { case 0: y=4;x=1; case 1: y=2;x=1; case 2: y=0;x=1; case 3: y=5;x=0; case 4: y=3;x=0; case 5: y=2;x=2; case 6: y=1;x=0; } LCD12864_SetWindow(x,y);
LCD12864_WriteCmd(0x0f);
}
ring(); goto b; }
uchar numb;
20
break; break; break; break; break; break; break;