logo资料库

红外接收系统程序.docx

第1页 / 共38页
第2页 / 共38页
第3页 / 共38页
第4页 / 共38页
第5页 / 共38页
第6页 / 共38页
第7页 / 共38页
第8页 / 共38页
资料共38页,剩余部分请下载后查看
红外接收主板主程序:
红外接收子程序:
1602显示子程序:
温度传感器子程序:
CO传感器ADC0832子程序:
红外发射子程序:
红外接收主板主程序: #include #include #include #include #include #include #include sfr T2MOD=0xc9; uchar code disk0[]=" 2000-01-01 SUN "; uchar code disk1[]="00:00:00 T=00.0"; uchar code disk2[]="MON"; uchar code disk3[]="TUE"; uchar code disk4[]="WED"; uchar code disk5[]="THU"; uchar code disk6[]="FIR"; uchar code disk7[]="STA"; uchar code disk8[]="SUN"; uchar code disk9[]=" A Invalid Date "; uchar code disk10[]=" Input Again "; uchar code disk11[]=" Please Set Date"; uchar code disk12[]=" Welcome To Use "; uchar code disk13[]=" uchar code disk14[]=" 20"; uchar code disk15[]=" Now T:"; uchar code disk16[]="Alarm T:"; uchar code disk17[]=" COnongdu:"; uchar code disk18[]=" CO-Alarm:"; ALARM"; uchar counter,shi,ge,keynum,keynum1,funnum=0,cnt=1,shi1,ge1,a; uchar month=1,day=1,year=1,hour,min,sec,hour1=6,min1=10,sec1=0; uchar tbai=4,tshi=0,tge,tnum; uint dat0; uchar irnum,irnum0=0; sbit OUT=P3^6; int sbit BUZZ=P3^7; sbit zheng=P3^6; sbit fan=P3^5; void keysan_rili(); TP0=0,TP1=0,T=0;
//******************************** void init_timer() { //定时器 0 初始化 T=1; RCAP2H=(65536-50000)/256; RCAP2L=(65536-50000)%256; T2CON=0; T2MOD=0; EA=1; ET2=1; do { irrec_work(); keysan_rili(); } while((disp[4]!=0)||(disp[5]!=1)); 按下继续向下执行 for(a=0;a<8;a++){disp[a]=0;} T=0; lcd_cmd(0x0c); TR2=1; } //********************* void delay_50us(uint t2) { uint l; for(;t2>0;t2--) for(l=19;l>0;l--); } void delay_1ms(uint t3) { uint i,j; for(i=t3;i>0;i--) for(j=110;j>0;j--); //判断功能键 2 是否按下,若没按下则停在此处,若 //开始计数 } //******************************** void write_hms(uint add,uchar date) { shi=date/10; ge=date%10; lcd_cmd(0xc0+add); delay_1ms(10); //写数据(时,分,秒)
write_data(0x30+shi); delay_1ms(10); write_data(0x30+ge); delay_1ms(10); } void write_ymd(uint add,uchar date) { //写数据(年,月,日) shi=date/10; ge=date%10; lcd_cmd(0x80+add); delay_1ms(2); write_data(0x30+shi); delay_1ms(2); write_data(0x30+ge); delay_1ms(2); } void write_ymd1(uint ymd0,uchar add0) 据(年,月,日) { lcd_cmd(0x80+add0); delay_1ms(2); write_data(ymd0); delay_1ms(2); } void write_hms1(uint hms0,uchar add0) 据(时,分,秒) { lcd_cmd(0xc0+add0); delay_1ms(10); write_data(hms0); delay_1ms(10); } void write_hms_nao(uint hms,uchar add) 秒) { lcd_cmd(0xc0+add); delay_1ms(2); write_data(hms); delay_1ms(2); } //写日历时间变动后的数 //写日历时间变动后的数 //写闹钟数据(时,分,
//写温度数据(百,十,个) //写 CO 数据 void write_temp(uint add,uchar bsg) { lcd_cmd(0xc0+add); delay_1ms(2); write_data(bsg); delay_1ms(2); } void write_co(uint add,uchar co) { lcd_cmd(0xc0+add); delay_1ms(2); write_data(co); delay_1ms(2); } void write_hms_nao1(uint add1,uchar date1 ) 据(时,分,秒) { //写改变后的闹钟数 shi1=date1/10; ge1=date1%10; lcd_cmd(0xc0+add1); delay_1ms(2); write_data(0x30+shi1); delay_1ms(2); write_data(0x30+ge1); delay_1ms(2); } void week(uchar pp) { switch(pp) { case 1: zifuchuan(disk2,0,12);break; case 2: zifuchuan(disk3,0,12);break; case 3: zifuchuan(disk4,0,12);break; case 4: zifuchuan(disk5,0,12);break; case 5: zifuchuan(disk6,0,12);break; case 6: zifuchuan(disk7,0,12);break; case 7: zifuchuan(disk8,0,12);break; } lcd_cmd(0x80+14); } //字符串选择显示
void timer2(void) interrupt 5 //using 1 序 { //定时器 2 中断子程 TF2=0; counter++; if(counter==20) { counter=0; sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hour++; if(hour==24) { hour=0; cnt++; if(cnt==8) { cnt=1; } day++; if((month==1||month==3||month==5||month==7||month==8||month==10||month==12) &&(day==32)) //31 天月份判断 { day=1; month++; if(month==13) { month=1; year++; if(year==99) { year=0; } if(funnum==1||funnum==2||funnum==3); else write_ymd(3,year); }
if(funnum==1||funnum==2||funnum==3); else write_ymd(6,month); } if((month==4||month==6||month==9||month==11)&&(day==31)) //30 天月份判断 { day=1; month++; if(month==13) { month=1; year++; if(year==99) { year=0; } if(funnum==1||funnum==2||funnum==3); else write_ymd(3,year); } if(keynum1==1||funnum==2||funnum==3); else write_ymd(6,month); } if((month==2)&&((day==30)&&((year%4)!=0))) //29 天月份判断 { day=1; month++; if(month==13) { month=1; year++; if(year==99) { year=0; } if(funnum==1||funnum==2||funnum==3); else write_ymd(3,year); } if(funnum==1||funnum==2||funnum==3); else write_ymd(6,month); } if((month==2)&&((day==29)&&((year%4)==0))) //28 天月份判断 { day=1; month++; if(month==13)
{ } month=1; year++; if(year==99) { year=0; } if(funnum==1||funnum==2||funnum==3); else write_ymd(3,year); if(funnum==1||funnum==2||funnum==3); else write_ymd(6,month); } if(funnum==1||funnum==2||funnum==3); else write_ymd(9,day); delay_1ms(10); week(cnt); } if(funnum==1||funnum==2); else write_hms(0,hour); } if(funnum==1||funnum==2||funnum==3); else write_hms(3,min); } if(funnum==1||funnum==2||funnum==3); else write_hms(6,sec); } } void keysan_rili() { if((disp[4]==0)&&(disp[5]==4)) { for(a=0;a<8;a++){disp[a]=0;} keynum++; if(keynum==7) { lcd_cmd(0xc0+7); lcd_cmd(0x0f); } if(keynum==6) { //按键扫描,调节日历 //判断功能键 2 是否按下 //功能键按下 7 次,秒位数值闪烁 //功能键按下 6 次,分位数值闪烁
lcd_cmd(0xc0+4); lcd_cmd(0x0f); } if(keynum==5) { lcd_cmd(0xc0+1); lcd_cmd(0x0f); } if(keynum==4) { lcd_cmd(0x80+14); lcd_cmd(0x0f); } if(keynum==3) { lcd_cmd(0x80+10); lcd_cmd(0x0f); } if(keynum==2) { lcd_cmd(0x80+7); lcd_cmd(0x0f); } if(keynum==1) { TR2=0; lcd_cmd(0x80+4); lcd_cmd(0x0f); } if(keynum==8) { //功能键按下 5 次,时位数值闪烁 //功能键按下 4 次,星期数值闪烁 //功能键按下 3 次,日期数值闪烁 //功能键按下 2 次,月份数值闪烁 //功能键按下 1 次,年份数值闪烁 //功能键按下 8 次,返回计时 if(!T) {TR2=1;} keynum=0; lcd_cmd(0x0c); if(month==4||month==9||month==6||month==11||month==2) //设置日期 检查 { } if(day==31) {TR0=0; TP0=1;} if((month==2)&&((day==29)||(day==30)||(day==31))) {
分享到:
收藏