红外解码

  1. #include <reg52.h>  
  2. #include "1602.h"  
  3. #include "delay.h"  
  4.   
  5. sbit IR = P3^2;  
  6. unsigned int irtime;  
  7. bit startflag;  
  8. bit irok,irpro_ok;  
  9. bit irhandleok = 0;  
  10.   
  11. sbit LED0 = P1^0;  
  12. sbit LED1 = P1^1;  
  13. sbit LED2 = P1^2;  
  14. sbit LED3 = P1^3;  
  15. sbit LED4 = P1^4;  
  16. sbit LED5 = P1^5;  
  17. sbit LED6 = P1^6;  
  18. sbit LED7 = P1^7;  
  19.   
  20. void uart_init();  
  21. void int0_init();  
  22. void timer0_init();  
  23.   
  24. void uart_send_byte(unsigned char byte);  
  25. void uart_send_str(unsigned char *str);  
  26. void data_handle(void);  
  27. unsigned char ircode[4];  
  28. unsigned  
  29.   
  30. void int0_init()  
  31. {  
  32.     IT0 = 1;//下降沿触发  
  33.     EA = 1;  
  34.     EX0 = 1;  
  35. }  
  36.   
  37. void timer0_init()  
  38. {  
  39.     EA = 1;  
  40.     TMOD |= 0x02;  
  41.     TH0 = 0;  
  42.     ET0 = 1;  
  43.     TR0 = 1;  
  44. }  
  45.   
  46. void timer0_isr() interrupt 1  
  47. {  
  48.     irtime++;//0.256ms   13.5 /0.256 = 53; 2.245/0.256 = 9 ;1.12/0.256 = 4  
  49. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是51单片机红外解码程序的基本框架,具体实现需要根据具体的红外解码器型号和使用的编译器进行适当的修改: ```c #include <reg51.h> #define uint unsigned int #define uchar unsigned char sbit IR = P1^0; // 红外接收器连接在P1.0口 uchar ir_data[4]; // 存放红外解码后的数据 void delay_us(uint us) // 微秒级延时函数 { while(us--); } void delay_ms(uint ms) // 毫秒级延时函数 { uint i; while(ms--) for(i=0; i<110; i++); } void ir_init() // 红外接收器初始化函数 { EA = 1; // 开启总中断 EX0 = 1; // 开启外部中断0 IT0 = 1; // 设置外部中断0为下降沿触发 } void ir_interrupt() interrupt 0 // 外部中断0的中断服务程序 { uint i, j; uchar k; delay_us(1000); // 延时1ms if(IR == 0) // 判断是否为红外信号起始位 { delay_us(500); // 延时500us if(IR == 0) // 判断是否为红外信号起始位 { for(i=0; i<4; i++) // 解码4个字节的数据 { k = 0; for(j=0; j<8; j++) // 解码1个字节的数据 { delay_us(500); // 延时500us if(IR == 1) // 判断是否为红外信号高电平 k |= (1 << (7 - j)); // 将接收到的高低电平转换为二进制数 } ir_data[i] = k; // 将解码后的数据存入数组中 } } } } void main() { ir_init(); // 初始化红外接收器 while(1); } ``` 以上代码实现了基本的红外解码功能,但具体的解码方式需要根据红外解码器的型号和使用的编译器进行适当的修改。需要注意的是,红外解码器的输出信号一般为高低电平交替的脉冲信号,需要通过延时函数来进行解码。此外,不同的红外解码器还可能有不同的起始位和终止位等特殊要求,需要在代码中进行相应的判断和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值