红外接收主板主程序:
#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)))
{