红外解码
来源:互联网 发布:数据库安全策略 编辑:程序博客网 时间:2024/05/17 04:48
- #include <reg52.h>
- #include "1602.h"
- #include "delay.h"
- sbit IR = P3^2;
- unsigned int irtime;
- bit startflag;
- bit irok,irpro_ok;
- bit irhandleok = 0;
- sbit LED0 = P1^0;
- sbit LED1 = P1^1;
- sbit LED2 = P1^2;
- sbit LED3 = P1^3;
- sbit LED4 = P1^4;
- sbit LED5 = P1^5;
- sbit LED6 = P1^6;
- sbit LED7 = P1^7;
- void uart_init();
- void int0_init();
- void timer0_init();
- void uart_send_byte(unsigned char byte);
- void uart_send_str(unsigned char *str);
- void data_handle(void);
- unsigned char ircode[4];
- unsigned
- void int0_init()
- {
- IT0 = 1;//下降沿触发
- EA = 1;
- EX0 = 1;
- }
- void timer0_init()
- {
- EA = 1;
- TMOD |= 0x02;
- TH0 = 0;
- ET0 = 1;
- TR0 = 1;
- }
- void timer0_isr() interrupt 1
- {
- irtime++;//0.256ms 13.5 /0.256 = 53; 2.245/0.256 = 9 ;1.12/0.256 = 4
- }
- unsigned char irdata[33];
- unsigned char bitnum = 0;
- void int0_isr() interrupt 0
- {
- if(startflag)
- {
- if((irtime > 40) && (irtime < 60))
- {
- bitnum = 0;
- }
- irdata[bitnum] = irtime ;
- bitnum++;
- irtime = 0;
- if (bitnum == 33)
- {
- bitnum = 0;
- irok = 1;
- startflag = 0;
- }
- }
- else
- {
- irtime = 0;
- startflag = 1;
- }
- }
- void uart_init()
- {
- SCON = 0x50;//串口用作 //SM0 = 0; SM1 = 1; REN = 1;
- TMOD |= 0x20;//设置定时器1为工作方式2
- TH1 = 0xfd;// ET1 = 1;//打开定时器中断允许
- TR1 = 1;//打开定时器
- }
- void uart_send_byte(unsigned char byte)
- {
- SBUF = byte; //TI位自动置1,手动清0
- while(!TI);//while(TI != 1);
- TI = 0;
- }
- void uart_send_str(unsigned char *str)
- {
- while( *str != '\0')
- {
- uart_send_byte(*str);
- str++;
- }
- }
- unsigned char putbuf[35];
- void main()
- {
- unsigned char i ;
- int0_init();
- uart_init();
- timer0_init();
- LCD_Init();
- LCD_Clear();
- while(1)
- {
- /*if(irok == 1)
- {
- putbuf[0] = irdata[0] / 10 + 0x30;
- putbuf[1] = irdata[0] % 10 +0x30;
- for(i = 0; i < 32 ;i++)
- {
- putbuf[i+2] = irdata[i+1] + 0x30;
- }
- for(i = 2 ;i < 35;i++)
- {
- if(putbuf[i] > (6 + '0'))
- {
- putbuf[i] = 1 + '0';
- }
- else
- {
- putbuf[i] = 0 + '0';
- }
- }
- putbuf[34] = '\0';
- uart_send_str(putbuf);
- uart_send_str("\r\n");
- irok = 0;
- }*/
- data_handle();
- if(irok)
- {
- if(irhandleok)
- {
- /*if(ircode[2])
- {
- switch(ircode[2])
- {
- case 0x45 :LED0 = ~LED0;break;
- case 0x46 :LED1 = ~LED1;break;
- case 0x47 :LED2 = ~LED2;break;
- case 0x44 :LED3 = ~LED3;break;
- case 0x40 :LED4 = ~LED4;break;
- case 0x43 :LED5 = ~LED5;break;
- case 0x07 :LED6 = ~LED6;break;
- case 0x15 :LED7 = ~LED7;break;
- }
- }*/
- /* if(ircode[2])
- {
- switch(ircode[2])
- {
- case 0x45 :LCD_Write_Char(0,0,'1');break;
- case 0x46 :LCD_Write_Char(0,0,'2');break;
- case 0x47 :LCD_Write_Char(0,0,'3');break;
- case 0x44 :LCD_Write_Char(0,0,'4');break;
- case 0x40 :LCD_Write_Char(0,0,'1');break;
- case 0x43 :LED5 = ~LED5;break;
- case 0x07 :LED6 = ~LED6;break;
- case 0x15 :LED7 = ~LED7;break;
- }
- }*/
- putbuf[0] = (ircode[0] / 16) > 9 ? (ircode[0] / 16 +0x37) :(ircode[0] / 16 +0x30);
- putbuf[1] = (ircode[0] % 16) > 9 ? (ircode[0] % 16 +0x37) :(ircode[0] % 16 +0x30);
- putbuf[2] = (ircode[1] / 16) > 9 ? (ircode[1] / 16 +0x37) :(ircode[1] / 16 +0x30);
- putbuf[3] = (ircode[1] % 16) > 9 ? (ircode[1] % 16 +0x37) :(ircode[1] % 16 +0x30);
- putbuf[4] = (ircode[2] / 16) > 9 ? (ircode[2] / 16 +0x37) :(ircode[2] / 16 +0x30);
- putbuf[5] = (ircode[2] % 16) > 9 ? (ircode[2] % 16 +0x37) :(ircode[2] % 16 +0x30);
- putbuf[6] = (ircode[3] / 16) > 9 ? (ircode[3] / 16 +0x37) :(ircode[3] / 16 +0x30);
- putbuf[7] = (ircode[3] % 16) > 9 ? (ircode[3] % 16 +0x37) :(ircode[3] % 16 +0x30);
- putbuf[8] = '\r';
- putbuf[9] = '\n';
- uart_send_str(putbuf);
- irhandleok = 0;
- }
- irok = 0;
- }
- }
- }
- /*unsigned char irnum[4];
- void change_16(void)
- {
- unsigned char i,j,k;
- unsigned code = 0;
- k = 1;
- for(i = 0;i < 4;i++)
- {
- for(j = 0;j < 8;j++)
- {
- code = irdata[k];
- if(code > 6)
- {
- code |= 0x80;
- }
- if(j < 8)
- {
- code >>= 1;
- }
- }
- }
- }*/
- void data_handle(void)
- {
- unsigned char i ,j,k;
- unsigned char temp = 0;
- k = 1;
- if(irok)
- {
- for(i = 0;i < 4;i++)
- {
- for(j = 0;j < 8;j++)
- {
- temp >>= 1;
- if(irdata[k] > 6)
- {
- temp |= 0x80;
- }
- k++;
- ircode[i] = temp;
- }
- }
- if( (ircode[0]+ ircode[1] == 0xff) && (ircode[2] + ircode[3] == 0xff))
- irhandleok = 1;
- irok = 0;
- }
- }
0 0
- 红外解码
- 红外解码
- 红外解码
- 红外解码
- SAA3010T红外解码
- 红外软件解码文档
- NEC红外遥控解码
- 红外遥控器解码
- Arduino 红外解码算法
- C8051F310 红外解码程序
- 红外解码 IRCode
- 红外遥控器解码原理
- HS9148红外遥控解码
- 红外遥控解码
- 红外遥控解码
- NEC协议红外解码
- 单片机红外解码
- 红外解码控制数码管
- linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程
- 使用ida逆向分析dll动态链接库时,动态调式指定输出函数
- vs2013+caffe+minst+cifar10运行
- <fieldset> 使用练习
- Hive语句优化
- 红外解码
- C#初识隐式转换
- 解析.NET对象的跨应用程序域访问(下篇)
- vector用法
- compiz(特效组件) 卸载
- React Native指南汇集了各类react-native学习资源、开源App和组件(必须收藏)
- 计数功能
- java 实现 牛顿迭代法求开方
- Hive UDF整理