红外遥控器按键编码测试
/chenjunglp
红外遥控器按键编码测试
#include <regx51.h> #define uchar unsigned char #define uint unsigned int #define IR_RE P3_2 bit k=0; 位,为 0 则为有效信号,为 1 则为无效 uchar date[4]={0,0,0,0}; 原码,反码,数据原码,反码 /*--------------------------延时 1ms 程子程序-----------Байду номын сангаас-----------*/ delay1000() { uchar i,j; i=5; do{j=95; do{j--;} while(j); i--; }while(i); } /*---------------------------延时 882us 子程序-----------------------*/ delay882() { uchar i,j; i=6; do{j=71; do{j--;} while(j); i--; }while(i); } /*--------------------------延时 2400us 程子程序-----------------------*/ delay2400() { uchar i,j; i=5; do{j=237; do{j--;} while(j); i--; }while(i);
//红外解码判断标志 //date 数组为存放地址
/chenjunglp
} //************************************************************** //************************************************************** /*----------------------------------------------------------*/ /*-----------------------红外解码程序(核心)-----------------*/ /*----------------------------------------------------------*/ void IR_decode() { uchar i,j; while(IR_RE==0); delay2400(); if(IR_RE==1) //延时 2.4ms 后如果是高 电平则是新码 { delay1000(); delay1000(); for(i=0;i<4;i++) { for(j=0;j<8;j++) { while(IR_RE==0); // 等待地址码第 1 位高电平到来 delay882(); //延时 882us 判断此时 引脚电平 ///CY=IR_RE; if(IR_RE==0) { date[i]>>=1; date[i]=date[i]|0x00; } else if(IR_RE==1) { delay1000(); date[i]>>=1; date[i]=date[i]|0x80; } } //1 位数据接收结束 } //32 位二进制码接收结 束 } } //*****************************************************************
/chenjunglp
//******************************************************************** /*------------------主要用于处理红外遥控键值--------------------*/ void jiema() { uchar i; k=0; for(i=0;i<8;i++) { delay1000(); if(IR_RE==1) //刚开始为 9ms 的引导码. { k=1; break; } } if(k==0) { IR_decode(); //如果接收到的是有效信号, 则调用解码程序 P2=~date[3]; delay2400(); delay2400(); delay2400(); } } //********************************************************************* //******************************** void main() { SP=0x60; while(1) { while(IR_RE==0) jiema(); } } //********************************************
//堆栈指针