write_data(':'); write_com(0x80+0x40); for(i=0;i<6;++i) write_data(Alarm_2[i]); while(P3==0xff); if(key1==0||key2==0||key3==0) { delay(10); if(key1==0||key2==0||key3==0) {display2(); } } else if(key4==0) goto loop; } if(cnt==3) { while(!key3); //表示闹钟时间设置退出 ahourge3=ahour3; ahourshi3=ahour3/10; write_com(0x80+0x40+7); write_data(table1[ahourge3]); delay(5); write_com(0x80+0x40+6); delay(2); write_data(table1[ahourshi3]); aminge3=amin3; aminshi3=amin3/10; write_com(0x80+0x40+10); write_data(table1[aminge3]); delay(5); write_com(0x80+0x40+9); delay(2); write_data(table1[aminshi3]); write_com(0x80+0x40+8); write_data(':'); write_com(0x80+0x40); for(i=0;i<6;++i) write_data(Alarm_3[i]); while(P3==0xff); if(key1==0||key2==0||key3==0) { delay(10); if(key1==0||key2==0||key3==0) {display3();
26
} } else if(key4==0) goto loop; }
if(cnt==4) { while(!key3); //表示闹钟时间设置退出 ahourge4=ahour4; ahourshi4=ahour4/10; write_com(0x80+0x40+7); write_data(table1[ahourge4]); delay(5); write_com(0x80+0x40+6); delay(2); write_data(table1[ahourshi4]); aminge4=amin4; aminshi4=amin4/10; write_com(0x80+0x40+10); write_data(table1[aminge4]); delay(5); write_com(0x80+0x40+9); delay(2); write_data(table1[aminshi4]); write_com(0x80+0x40+8); write_data(':'); write_com(0x80+0x40); for(i=0;i<6;++i) write_data(Alarm_4[i]); while(P3==0xff); if(key1==0||key2==0||key3==0) { delay(10); if(key1==0||key2==0||key3==0) {display4(); } } else if(key4==0) goto loop; }
if(cnt>4) {
cnt=0; }
27
} }
void lcd_init() //LCD初始化 { lcden=0; lcdrw=0; write_com(0x38); //设置8位格式,2行,5×7 write_com(0x0c); //整体显示,关光标,不闪烁 write_com(0x06); //设定输入方式,增量不转移 write_com(0x01); //清除屏幕显示 delay(2); write_com(0x80); for(i=0;i<16;i++) { write_data(table2[i]); //写入显示时间数据 delay(1); }
write_com(0x40); for(i=0;i<8;i++) { write_data(table3[i]); //写入自定义字符“日” delay(1); } write_com(0x40+8); for(i=0;i<16;i++) { write_data(table5[i]); //写入自定义字符“月” delay(1); } write_com(0x40+16); for(i=0;i<8;i++) { write_data(table4[i]); //写入自定义字符 delay(1); } write_com(0x40+24); for(i=0;i<8;i++) { write_data(table6[i]); //写入自定义字符 “C” delay(1);
28
} write_com(0x40+32); for(i=0;i<8;i++) { write_data(table7[i]); //写入自定义字符“秒” delay(1); } write_com(0x40+40); for(i=0;i<8;i++) { write_data(table8[i]); delay(1); } write_com(0x40+48); for(i=0;i<8;i++) { write_data(table9[i]); delay(1); } }
void judge() { if(sec==60) { min++; sec=0; } if(min==60) { hour++; min=0; } if(hour==24) { ri++; hour=0; } if(ri==30) { yue++; ri=1; }
//写入自定义字符“秒” //写入自定义字符“年” 29
if(yue==12) { nian++; yue=1; } }
void init() //C51初始化函数 { key1=1;key2=1;key3=1;key4=1;sec=0;a=0;sound=1; TMOD=0x10; //定时计数器T1工作在方式1 TL1=0xB0; TH1=0x3C; //计数初值为15536,50ms定时 EA=1; ET1=1; TR1=1; }
void speak()//music { if(amin1==min&&ahour1==hour||amin2==min&&ahour2==hour||amin3==min&&ahour3==hour||amin4==min&&ahour4==hour) //显示时间与闹钟设置时间完全一样且闹钟\ { delay(5); sound=~sound; led=0; // delay(10); // delay(10); // delay(10); } else {led=1; sound=1;} }
void led1() interrupt 3 //LED1中断函数 50ms定时 { TL1=0xB0; TH1=0x3C; speak(); //num1++; num2++;
30