新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机红外遥控解码程序

单片机红外遥控解码程序

作者:时间:2012-08-24来源:网络收藏
#includereg52.h>#includeintrins.h>#define uchar unsigned char//宏定义#define uint unsigned int#define ulong unsigned longsbit   sound=P2^3;              //蜂鸣器sbit      IR=P1^2;       //IR_DATAuchar dm,i,j,k;  //IR_解码用的变量uchar  aa[2];    //定义1个数组,用来存储代码,8位的数据码和8位的数据反码ulong  bb;       //定义bb用来存放用户识别码,这里采用的是26位的用户识别uchar newdata;    //IR收到新的数据提示主函数去处理//0.9msvoid delay0_9ms(void){unsigned char j,k;for(j=18;j>0;j--)for(k=20;k>0;k--) ;}//1msvoid delay1ms(void){unsigned char i,j;for(i=2;i>0;i--)for(j=230;j>0;j--) ;}//4.5msvoid delay4_5ms(void){unsigned char i,j;for(i=10;i>0;i--)for(j=225;j>0;j--) ;}//100msvoid delay100ms(void){unsigned char i,j,k;for(i=200;i>0;i--)  for(j=20;j>0;j--)for(k=10;k>0;k--) ;}IR_JM(unsigned char date){switch(date){case 0x01:   {P0=0X00;break;} case 0x10:   {break;}default:     {break;}}}void main(){IT0=1;           //外部中断0触发方式控制位,下降沿触发EX0=1;           //外部中断0(INT0)中断允许位EA=1;            //总中断dm=0;       while(newdata){newdata=0;IR_JM(aa[0]);}}void t0(void) interrupt 0//外部中断0的函数{EA=0;                        //暂时关闭CPU的所有中断请求for(k=0;k10;k++)  //重复10次,目的是检测在9毫秒内如果出现高电平就退出{                      //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadelay0_9ms();                   //延时0.9毫秒if (IR==1) {k=10;break;}    //延时0.9毫秒后判断P3.2脚是否出现高电平如果有就退出else if(k==9)                //重复10次?{          //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbwhile(IR==0);       //等待高电平避开9毫秒低电平引导脉冲delay4_5ms();           //延时4.5毫秒避开4.5毫秒的结果码/********************************************//26位的用户码,前13位数据码,后13位数据反码*********************************************/for(j=1;j=26;j++)//每组数据为26位{                 while(IR==0);  //delay0_9ms();if(IR==1){delay1ms();dm=dm|0x2000000;              
//因为是26位,一个"1",后面25个"0",转化二进制即为"1000000"    if(j26) dm=dm>>1;           
 //数据"1",右移一个"1",一共25次}                else  if(j26) dm=dm>>1;           
 //数据"0",一共25次}                    bb=dm;dm=0;/***************************************************//16位的用户码,前8位数据码,后8位数据反码****************************************************/for(i=0;i2;i++)     {                for(j=1;j=8;j++)//每组数据为8位{                while(IR==0);  //delay0_9ms();if(IR==1){delay1ms();dm=dm|0x80;if(j8) dm=dm>>1;           //数据"1",右移一个"1",一共7次}                else  if(j8) dm=dm>>1;       //数据"0",一共7次}                    aa[i]=dm;dm=0;}              /***************************************************//显示部分****************************************************/            if(aa[0]==~aa[1])         //验证成功{   sound=0; delay100ms();sound=1;newdata=1;}}                     //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb}                             //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEA=1;}


评论


相关推荐

技术专区

关闭