P2=0xef;
delay(300);//短暂延时
P0=mDis_Gewei; //显示个位 P2=0xdf; delay(300); if(key_value==0x09) //如果读到K1为0 { key_value=0; min++; if(min==60) min=0; }
P0=hDis_Shiwei;//显示十位 P2=0xfb;
delay(300);//短暂延时
P0=hDis_Gewei; //显示个位 P2=0xf7; delay(300); if(key_value==0x43) //如果读到K1为0 { key_value=0; hour++; if(hour==24) hour=0; } if(key_value==0x40) //如果读到K1为0 { key_value=0; hour--; if(hour==0) hour=23; }
sDis_Shiwei=~tab[second/10];//十位显示值处理 sDis_Gewei=~tab[second]; //个位显示处理 mDis_Shiwei=~tab[min/10];//十位显示值处理 mDis_Gewei=~tab[min]; //个位显示处理 hDis_Shiwei=~tab[hour/10];//十位显示值处理 hDis_Gewei=~tab[hour]; //个位显示处理
if(key_value==0x45) //如果读到K1为0 { key_value=0; minx=min; hourx=hour;
}
flag=0; } if(key_value==0x15) //如果读到K1为0 { key_value=0; min--; if(min==0) min=59; }
if((min==(minx+1)) && (hour==hourx)) {flag=0;}
if((min==minx) && (hour==hourx) && flag==0) {
while(1) {
TR2=1; //启动定时器 ET2=1; //打开定时器2中断 i=0;
while(i<100) //音乐数组长度 ,唱完从头再来 {
k=sszymmh[i]+7*sszymmh[i+1]-1; timer0h=FREQH[k]; timer0l=FREQL[k]; RCAP2H=timer0h; RCAP2L=timer0l;
time=sszymmh[i+2]; i=i+3; song();
if(key_value==0x47) //如果读到K1为0 { key_value=0; flag=1; TR2=0; //启动定时器
ET2=0; //打开定时器2中断 break; } } break; } }
}
timer1() interrupt 3 {
unsigned char count; TH1=0xd8;//重新赋值 TL1=0xf0; count++;
if (count==100) {
count=0;
second++;//秒加1 if(second==60) { second=0; min=min+1; } if(min==60) { min=0; hour=hour+1; } if(hour==24) { hour=0; second=0; min=0; } } }
void t2int() interrupt 5 {
TR2=0; TF2=0;
speaker=!speaker;
TR2=1; }
Decode.c
/******************************************************************/ /* 红 外 遥 控 解 码 */ /* CPU & XTAL :89c52 @ 12Mhz */ /* 支持的红外编码方案: NEC6121 */ /* 编码格式:引导信号(或连发信号)+地址码+地址码+控制码+控制码反码 */ /******************************************************************/
#include \//#include \#include
#define uchar unsigned char #define uint unsigned int
/******************************************************************/ /* 变 量 保 存 区 */ /******************************************************************/ static unsigned char Timer0_cnt; //定时器计数值 static unsigned char Timer0_cnt_bk; static bit timeout; //超时标志 static bit Guide; //引导码有效 static bit Continuous; //连发码 static unsigned char IR_time[33]; //保存每两个下降沿之间的时间间隔
/******************************************************************/ /* 结 构 体 区 */ /* 保存一次解码后接受到的四字节数据 */ /******************************************************************/ static struct IR_data //红外接收数据寄存 {
unsigned char addr1; //地址1(客户码1) unsigned char addr2; //地址2(客户码2) unsigned char data1; //数据1(数据码) unsigned char data2; //数据2(数据码反码) }IR_data;
uchar key_value; //键值 bit key_flg; //按钮按下标志 bit cycle_flg; //循环标志
相关推荐: