红外
来源:互联网 发布:可编程键盘软件 编辑:程序博客网 时间:2024/04/28 10:37
#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
- 红外
- 红外
- 红外
- 红外
- 红外
- 红外
- 红外
- 红外传感
- 红外热像仪
- 红外载波
- 红外成像
- 红外解码
- 红外通信
- 红外报警器
- 红外发光二极管
- 红外通信协议
- 红外摄像头
- 红外发光二极管
- 70后游戏辅助开发程序猿的人生路(一)
- 蓝桥杯 2013 5 网络寻路
- Spring分布式事务实现
- strcpy与memcpy的实现与区别
- android studio 导入eclipse项目
- 红外
- 【BZOJ】4289 PA2012 Tax
- JavaWeb集成开发环境IDE配置及HelloWorld.
- 九度 题目1490:字符串链接
- 《C++语言的设计和演化》
- 异步任务和多线程的区别
- 这是一个实现下拉刷新的react native组件 react-native-pullview
- glassfish 创建数据库连接池的大坑
- MVP 实现登录注册