洛 阳 理 工 学 院 课 程 设 计 报 告
}
/*------------------------------------------------ 全局变量声明 ------------------------------------------------*/ //unsigned
char
code
}
dofly_DuanMa[10]={0xff,0xfe,0xfd,0xdf,0xbf,0xbe,0xbd,0x9e,0x9c,0xff}; // 显示led灯 L0,L1,L5,L6 unsigned
char
code
dofly_DuanMa[10]={0x00,0x01,0x02,0x04,0x08,0x03,0x07,0x05,0x0f,0x00}; // 显示led灯 L0,L1,L5,L6 ,0xbe,0xbd,0x9e,0x9c,0xff unsigned char irtime; //红外用全局变量
bit irpro_ok,irok; unsigned char IRcord[4]; unsigned char irdata[33];
/*------------------------------------------------ 函数声明 ------------------------------------------------*/ void Ir_work(void); void Ircordpro(void);
/*------------------------------------------------ 定时器0初始化 ------------------------------------------------*/ void TIM0init(void)//定时器0初始化 {
TMOD=0x02; //定时器0工作方式2,TH0是重装值,TL0是初值
11
洛 阳 理 工 学 院 课 程 设 计 报 告
TH0=0x00; //重载值 TL0=0x00; //初始化值 ET0=1; //开中断 TR0=1; }
/*------------------------------------------------ 外部中断0初始化 ------------------------------------------------*/ void EX0init(void) {
IT0 = 1; //指定外部中断0下降沿触发,INT0 (P3.2) EX0 = 1; //使能外部中断 EA = 1; //开总中断 }
/*------------------------------------------------ 定时器0中断处理 ------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1 {
irtime++; //用于计数2个下降沿之间的时间 }
/*------------------------------------------------ 外部中断0中断处理 ------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数 {
12
洛 阳 理 工 学 院 课 程 设 计 报 告
static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位
if(startflag) {
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1 irtime=0; i++; if(i==33)
{ irok=1; i=0; }
} else }
/*------------------------------------------------ 键值处理 ------------------------------------------------*/
void Ir_work(void) //红外键值散转程序 {
switch(IRcord[2]) //判断第三个数码值
13
{ irtime=0; startflag=1; }
洛 阳 理 工 学 院 课 程 设 计 报 告
{
case 0x16:DataPort=dofly_DuanMa[0];break;//0 按下遥控器上面0的
按键灯灭
case 0x0c:DataPort=dofly_DuanMa[1];break;//L0 显示相应的灯亮 case 0x18:DataPort=dofly_DuanMa[2];break;//L1 case 0x5e:DataPort=dofly_DuanMa[3];break;//L5 case 0x08:DataPort=dofly_DuanMa[4];break;//L6 case 0x1c:DataPort=dofly_DuanMa[5];break;//L0,L6 case 0x5a:DataPort=dofly_DuanMa[6];break;//L1,L6 case 0x42:DataPort=dofly_DuanMa[7];break;//L1,L5,L6 case 0x52:DataPort=dofly_DuanMa[8];break;//L0,L1,L5,L6 case 0x4a:DataPort=dofly_DuanMa[9];break;//灯灭
default:break; }
/*------------------------------------------------ 红外码值处理 ------------------------------------------------*/ void Ircordpro(void) //红外码值处理函数 {
unsigned char i, j, k; unsigned char cord,value; k=1;
for(i=0;i<4;i++) //处理4个字节 {
for(j=1;j<=8;j++) //处理1个字节8位 {
14
}
irpro_ok=0;//处理完成标志
相关推荐: