作者:徐仁俊 2011.5.12,采用1602液晶显示器. 红外调时采用“海尔”遥控码 CH+(0xb0), CH-(0xa0) , MENU(0x9c) 分别调节时间 ******************************************************************************************************/ #includesbit dula=P2^6; sbit wela=P2^7; sbit lcdwr=P3^6; sbit lcdrs=P3^5; sbit lcden=P3^4; sbit key1=P3^0; sbit key2=P3^1; sbit key3=P3^3; sbit DQ=P2^2; sbit ir=P3^2; #define uchar unsigned char #define uint unsigned int uchar code table0[]=" 2011-04-03 SUN";//16 uchar code table1[]=" 00:00:00";//10 uchar code table9[]="0123456789"; uchar code table2[]="MON"; uchar code table3[]="TUE"; uchar code table4[]="WED"; uchar code table5[]="THU"; uchar code table6[]="FRI"; uchar code table7[]="SAT"; uchar code table8[]="SUN"; uchar num,m,n,aa,bb,cc,dd,kk,flag,i,j,flag1,pp,flag2; uchar ss[4]; char shi,fen,miao,ee,ff,gg; uchar dat=0; uint dd1,temp; void delay(uchar z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void delay1(uchar i) { while(i--); } void write_com(uchar com) { lcdrs=0; delay(5); P0=com; delay(5); lcden=1; delay(5); lcden=0; } void write_data(uchar date) { lcdrs=1; delay(5); P0=date; delay(5); lcden=1; delay(5); lcden=0; } void init() { dula=0; wela=0; lcdwr=0; lcdrs=1; lcden=0; shi=00; fen=00; miao=00; bb=0; cc=0; dd=0; ee=03; ff=04; gg=11; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x80); write_com(0x01); for(num=0;num<15;num++) { write_data(table0[num]); delay(5); } write_com(0x80+0x40); for(num=0;num<15;num++) { write_data(table1[num]); delay(5); } ss[0]=0; ss[1]=0; ss[2]=0; ss[3]=0; TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0; TL1=0; EA=1; ET0=1; TR0=1; TR1=0; write_com(0x80+0x40+4); write_data(0xdf); write_com(0x80+0x40+5); write_data('C'); } uint low_ir_time() { TH1=0; TL1=0; TR1=1; while(!ir); TR1=0; return TH1*256+TL1; } uint high_ir_time() { TH1=0; TL1=0; TR1=1; while(ir); TR1=0; return TH1*256+TL1; } void init_DS18B20() { uchar x; DQ=1; delay1(8); DQ=0; delay1(80); DQ=1; delay1(14); x=DQ; delay1(20); } void sfm_date(uchar add,uchar date1) { uchar shi,ge; shi=date1/10; ge=date1%10; write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); } void nyr_date1(uchar add,uchar date1) { uchar shi,ge; shi=date1/10; ge=date1%10; write_com(0x80+add); write_data(0x30+shi); write_data(0x30+ge); } read_DS18B20(void) { uchar i=0; uchar dat=0; for(i=8;i>0;i--) { DQ=0; dat=dat>>1; DQ=1; if(DQ==1) { dat=dat|0x80; } delay1(4); } return (dat); } write_DS18B20(uchar dat) { uchar i=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay1(5); DQ=1; dat=dat>>1; } delay1(4); } chuli_dat(void) { uchar aa=0; uchar bb=0; uchar cc=0; init_DS18B20(); write_DS18B20(0xCC); write_DS18B20(0x44); init_DS18B20(); write_DS18B20(0xCC); write_DS18B20(0xBE); aa=read_DS18B20(); bb=read_DS18B20(); cc=(aa>>4)|(bb<<4); if(cc>128) { cc=~cc+1; write_com(0x80+0x40+0x4a); write_data(0x2d); } return(cc); } void ir_key() { if(pp==0x9c) { bb++; pp=0; if(bb==1) { TR0=0; write_com(0x80+0x40+13); write_com(0x0f); } if(bb==2) { write_com(0x80+0x40+10); } if(bb==3) { write_com(0x80+0x40+7); } if(bb==4) { write_com(0x80+12); } if(bb==5) { write_com(0x80+9); } if(bb==6) { write_com(0x80+6); } if(bb==7) { write_com(0x80+3); } if(bb==8) { bb=0; TR0=1; write_com(0x0c); } } if(bb==1) { if(pp==0xb0) { miao++; pp=0; if(miao==60) { miao=0; } sfm_date(13,miao); write_com(0x80+0x40+13); } if(pp==0xa0) { miao--; pp=0; if(miao==-1) { miao=59; } sfm_date(13,miao); write_com(0x80+0x40+13); } } if(bb==2) { if(pp==0xb0) { fen++; pp=0; if(fen==60) { fen=0; } sfm_date(10,fen); write_com(0x80+0x40+10); } if(pp==0xa0) { fen--; pp=0; if(fen==-1) { fen=59; } sfm_date(10,fen); write_com(0x80+0x40+10); } } if(bb==3) { if(pp==0xb0) { shi++; pp=0; if(shi==24) { shi=0; } sfm_date(7,shi); write_com(0x80+0x40+7); } if(pp==0xa0) { shi--; pp=0; if(shi==-1) { shi=23; } sfm_date(7,shi); write_com(0x80+0x40+7); } } if(bb==4) { if(pp==0xb0) { dd++; pp=0; if(dd==1) { for(cc=0;cc<3;cc++) { write_data(table2[cc]); } } write_com(0x80+12); if(dd==2) { for(cc=0;cc<3;cc++) { write_data(table3[cc]); } } write_com(0x80+12); if(dd==3) { for(cc=0;cc<3;cc++) { write_data(table4[cc]); } } write_com(0x80+12); if(dd==4) { for(cc=0;cc<3;cc++) { write_data(table5[cc]); } } write_com(0x80+12); if(dd==5) { for(cc=0;cc<3;cc++) { write_data(table6[cc]); } } write_com(0x80+12); if(dd==6) { for(cc=0;cc<3;cc++) { write_data(table7[cc]); } } write_com(0x80+12); if(dd==7) { dd=0; for(cc=0;cc<3;cc++) { write_data(table8[cc]); } } write_com(0x80+12); } if(pp==0xa0) { dd++; pp=0; if(dd==1) { for(cc=0;cc<3;cc++) { write_data(table8[cc]); } } write_com(0x80+12); if(dd==2) { for(cc=0;cc<3;cc++) { write_data(table7[cc]); } } write_com(0x80+12); if(dd==3) { for(cc=0;cc<3;cc++) { write_data(table6[cc]); } } write_com(0x80+12); if(dd==4) { for(cc=0;cc<3;cc++) { write_data(table5[cc]); } } write_com(0x80+12); if(dd==5) { for(cc=0;cc<3;cc++) { write_data(table4[cc]); } } write_com(0x80+12); if(dd==6) { for(cc=0;cc<3;cc++) { write_data(table3[cc]); } } write_com(0x80+12); if(dd==7) { dd=0; for(cc=0;cc<3;cc++) { write_data(table2[cc]); } } write_com(0x80+12); } } if(bb==5) { if(pp==0xb0) { ee++; pp=0; if(ee==32) { ee=1; } nyr_date1(9,ee); write_com(0x80+9); } if(pp==0xa0) { ee--; pp=0; if(ee==0) { ee=31; } nyr_date1(9,ee); write_com(0x80+9); } } if(bb==6) { if(pp==0xb0) { ff++; pp=0; if(ff==13) { ff=1; } nyr_date1(6,ff); write_com(0x80+6); } if(pp==0xa0) { ff--; pp=0; if(ff==0) { ff=12; } nyr_date1(6,ff); write_com(0x80+6); } } if(bb==7) { if(pp==0xb0) { gg++; pp=0; if(gg==41) { gg=11; } nyr_date1(3,gg); write_com(0x80+3); } if(pp==0xa0) { gg--; pp=0; if(gg==10) { gg=41; } nyr_date1(3,gg); write_com(0x80+3); } } }[page] void set_key() { if(key1==0) { bb++; delay(8); if(key1==0) { if(bb==1) { while(!key1); TR0=0; write_com(0x80+0x40+13); write_com(0x0f); } if(bb==2) { while(!key1); write_com(0x80+0x40+10); } if(bb==3) { while(!key1); write_com(0x80+0x40+7); } if(bb==4) { while(!key1); write_com(0x80+12); } if(bb==5) { while(!key1); write_com(0x80+9); } if(bb==6) { while(!key1); write_com(0x80+6); } if(bb==7) { while(!key1); write_com(0x80+3); } if(bb==8) { bb=0; while(!key1); TR0=1; write_com(0x0c); } } } if(bb==1) { if(key2==0) { delay(8); while(!key2); miao++; if(miao==60) { miao=0; } sfm_date(13,miao); write_com(0x80+0x40+13); } if(key3==0) { delay(8); while(!key3); miao--; if(miao==-1) { miao=59; } sfm_date(13,miao); write_com(0x80+0x40+13); } } if(bb==2) { if(key2==0) { delay(8); while(!key2); fen++; if(fen==60) { fen=0; } sfm_date(10,fen); write_com(0x80+0x40+10); } if(key3==0) { delay(8); while(!key3); fen--; if(fen==-1) { fen=59; } sfm_date(10,fen); write_com(0x80+0x40+10); } } if(bb==3) { if(key2==0) { delay(8); while(!key2); shi++; if(shi==24) { shi=0; } sfm_date(7,shi); write_com(0x80+0x40+7); } if(key3==0) { delay(8); while(!key3); shi--; if(shi==-1) { shi=23; } sfm_date(7,shi); write_com(0x80+0x40+7); } } if(bb==4) { if(key2==0) { delay(8); dd++; while(!key2); if(dd==1) { for(cc=0;cc<3;cc++) { write_data(table2[cc]); } } write_com(0x80+12); if(dd==2) { for(cc=0;cc<3;cc++) { write_data(table3[cc]); } } write_com(0x80+12); if(dd==3) { for(cc=0;cc<3;cc++) { write_data(table4[cc]); } } write_com(0x80+12); if(dd==4) { for(cc=0;cc<3;cc++) { write_data(table5[cc]); } } write_com(0x80+12); if(dd==5) { for(cc=0;cc<3;cc++) { write_data(table6[cc]); } } write_com(0x80+12); if(dd==6) { for(cc=0;cc<3;cc++) { write_data(table7[cc]); } } write_com(0x80+12); if(dd==7) { dd=0; for(cc=0;cc<3;cc++) { write_data(table8[cc]); } } write_com(0x80+12); } if(key3==0) { dd++; delay(8); while(!key3); if(dd==1) { for(cc=0;cc<3;cc++) { write_data(table8[cc]); } } write_com(0x80+12); if(dd==2) { for(cc=0;cc<3;cc++) { write_data(table7[cc]); } } write_com(0x80+12); if(dd==3) { for(cc=0;cc<3;cc++) { write_data(table6[cc]); } } write_com(0x80+12); if(dd==4) { for(cc=0;cc<3;cc++) { write_data(table5[cc]); } } write_com(0x80+12); if(dd==5) { for(cc=0;cc<3;cc++) { write_data(table4[cc]); } } write_com(0x80+12); if(dd==6) { for(cc=0;cc<3;cc++) { write_data(table3[cc]); } } write_com(0x80+12); if(dd==7) { dd=0; for(cc=0;cc<3;cc++) { write_data(table2[cc]); } } write_com(0x80+12); } } if(bb==5) { if(key2==0) { delay(8); while(!key2); ee++; if(ee==32) { ee=1; } nyr_date1(9,ee); write_com(0x80+9); } if(key3==0) { delay(8); while(!key3); ee--; if(ee==0) { ee=31; } nyr_date1(9,ee); write_com(0x80+9); } } if(bb==6) { if(key2==0) { delay(8); while(!key2); ff++; if(ff==13) { ff=1; } nyr_date1(6,ff); write_com(0x80+6); } if(key3==0) { delay(8); while(!key3); ff--; if(ff==0) { ff=12; } nyr_date1(6,ff); write_com(0x80+6); } } if(bb==7) { if(key2==0) { delay(8); while(!key2); gg++; if(gg==41) { gg=11; } nyr_date1(3,gg); write_com(0x80+3); } if(key3==0) { delay(8); while(!key3); gg--; if(gg==10) { gg=41; } nyr_date1(3,gg); write_com(0x80+3); } } } void check_DS18B20() { dd1=chuli_dat(); m=dd1/10; n=dd1%10; write_com(0x80+0x40+2); write_data(table9); write_com(0x80+0x40+3); write_data(table9[n]); } void main() { init(); while(1) { if(ir==0) { restart: while(ir); temp=low_ir_time(); if((temp<8500)||(temp>9500)) continue; temp=high_ir_time(); if((temp<4000)&&(temp>5000)) continue; for(i=0;i<4;i++) { for(j=0;j<8;j++) { temp=low_ir_time(); if((temp<200)||(temp>800)) goto restart; temp=high_ir_time(); if((temp<200)||(temp>2000)) goto restart; ss[i]=ss[i]>>1; if(temp>1120) { ss[i]=ss[i]|0x80; } } } if(ss[2]=~ss[3]) { pp=ss[2]; } } set_key(); ir_key(); } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; if(aa==20) { aa=0; miao++; check_DS18B20(); if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; flag=1; } sfm_date(7,shi); } sfm_date(10,fen); } sfm_date(13,miao); } if(flag==1) { flag=0; ee++; if(ee==32) { ee=1; flag1=1; } nyr_date1(9,ee); //write_com(0x80+9); dd++; if(dd==8) { dd=0; } if(dd==1) { write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table2[cc]); } } write_com(0x80+12); if(dd==2) { write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table3[cc]); } } //write_com(0x80+12); if(dd==3) { write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table4[cc]); } } //write_com(0x80+12); if(dd==4) { write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table5[cc]); } } //write_com(0x80+12); if(dd==5) { write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table6[cc]); } } //write_com(0x80+12); if(dd==6) { write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table7[cc]); } } //write_com(0x80+12); if(dd==7) { dd=0; write_com(0x80+12); for(cc=0;cc<3;cc++) { write_data(table8[cc]); } } // write_com(0x80+12); } if(flag1==1) { flag1=0; ff++; if(ff==13) { ff=1; flag2=1; } nyr_date1(6,ff); write_com(0x80+6); } if(flag2==1) { flag2=0; gg++; if(gg==41) { gg=11; } nyr_date1(3,gg); write_com(0x80+3); } }
上一篇:STC让数码管更亮了!
下一篇:用EM78P153S给同事写流水灯
推荐阅读最新更新时间:2024-03-16 14:26