找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6644|回复: 9
收起左侧

红外解码 在LCD1602上显示出遥控发送的16进制值 源代码分享

  [复制链接]
ID:84299 发表于 2015-11-7 21:03 | 显示全部楼层 |阅读模式
按键遥控键盘某个键,用红外接收头接受,单片机解码接受数据值,在LCD1602上显示出遥控发送的16进制值。
IMG_20151107_205714.jpg

红外解码.rar

31.16 KB, 下载次数: 157, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2015-11-9 01:54 | 显示全部楼层
主程序:
  1. #include"reg51.h"  
  2. #include"intrins.h"
  3. #include"lcd1602.h"

  4. // 此口为红外信号输入MCU口  
  5. sbit IR_Out = P3^2;   
  6.   
  7. // 主程序运行标志位,运行主程序时LED灭,运行中断程序时LED亮   
  8. sbit IR_Flag = P1^4;  

  9. // LED显示口  
  10. //#define LED_Port P1  
  11.   
  12. // 用于存放按键码值,初始化为0000 0000这样接受数据时可以只考虑1了   
  13. unsigned char dat[4] = {0,0,0,0};  
  14. void init()
  15. {
  16.         IR_Out = 1;     // 此口为MCU输入口,故需要置1  
  17.     IR_Flag = 1;    // 灭LED灯  
  18.     TMOD = 0x01;    // 定时器0,方式1  
  19.     IT0 = 1;        // 外部中断0,下降沿触发  
  20.     EX0 = 1;        // 准许外部中断  
  21.     EA = 1;         // CPU准许中断  
  22. }         
  23.   
  24. /*............................................................*/  
  25. void main()  
  26. {  
  27.     init();
  28.         lcd_init();
  29.         lcd_initdata();
  30.     while(1)  
  31.     {  
  32.                 if(dat[2]==~dat[3])
  33.                 {
  34.                 lcd_conv(dat[2]);
  35.                 lcd_dis0();
  36.         IR_Flag = 1;// 执行主程序时,LED灯灭
  37.                
  38.                 }
  39.                
  40.     }  
  41. }  
  42. /*------------------------------------------------------------*-  
  43.   函数名称:Int0()
  44.   函数输入:无(容许中断时,外部触发)
  45.   函数输出:无
  46.   函数说明:外部中断0中断处理
  47. -*------------------------------------------------------------*/  
  48. void Int0() interrupt 0  
  49. {  
  50.     unsigned char i,j;  
  51.     EX0 = 0;            // 关闭外部中断0  
  52.     IR_Flag = 0;        // 执行中断程序时,LED灯亮  
  53.     i = 10;             // 0.793ms延时,运行10次  
  54.     while( --i )  
  55.     {  
  56.         // 定时0.793ms,延时0.793ms*10=7.93ms  
  57.         TH0 = 0xfc;  
  58.         TL0 = 0xe7;  
  59.         TR0 = 1;  
  60.         while( !TF0 );  
  61.         TF0 = 0;  
  62.         TR0 = 0;  
  63.          
  64.         // 这7.93ms期间只要IR_Out变高电平,就非合法的红外信号,跳出  
  65.         if( IR_Out )  
  66.         {  
  67.             EX0 = 1;    // 准许中断  
  68.             return ;  
  69.         }  
  70.     }  
  71.       
  72.     // 程序进行到这里,表明是合法的红外信号(利用9ms判断)  
  73.     while( !IR_Out );   // 等待9ms低电平过去  
  74.       
  75.     // 程序进行到这里,表明经过9ms低电平  
  76.     TH0 = 0xf6;  
  77.     TL0 = 0xff;  
  78.     TR0 = 1;  
  79.     while( !TF0 );  
  80.     TF0 = 0;  
  81.     TR0 = 0;            // 延时2.305ms  
  82.       
  83.     // IR_Out 为低表明是连发码,不予理睬,跳出  
  84.     if( !IR_Out )  
  85.     {  
  86.         EX0=1;  
  87.         return;  
  88.     }  
  89.   
  90.     // 程序进行到这里,表明是引导码,等待4.5ms高电平的过去  
  91.     while( IR_Out );      
  92.       
  93.     // 开始接收用户码  
  94.     for(i=0; i<4; i++)  
  95.     {  
  96.         for(j=0; j<8; j++)  
  97.         {  
  98.             while( !IR_Out );   // 等待低电平过去  
  99.             dat[i] >>= 1;     // 把上次的数据位右移一位  
  100.   
  101.             TH0 = 0xfc;  
  102.             TL0 = 0xe7;  
  103.             TR0 = 1;  
  104.             while( !TF0 );  
  105.             TR0=0;  
  106.             TF0=0;              //延时0.793ms   
  107.               
  108.             // 若为数据"1",则延时后IR_Out为高电平  
  109.             if( IR_Out )   
  110.             {  
  111.                 dat[i] |= 0x80;     // 所有数据位1放最高位  
  112.                 while( IR_Out );    // 等待高电平过去  
  113.             }  
  114.         }  
  115.     }     
  116.   //LED_Port = dat[2];  
  117.     EX0=1;      // 开中断  
  118.     return;  
  119. }  
复制代码
回复

使用道具 举报

ID:87193 发表于 2015-11-9 09:19 | 显示全部楼层
不错的设计,下载看看
回复

使用道具 举报

ID:353 发表于 2016-9-11 14:12 | 显示全部楼层
下来看看
回复

使用道具 举报

ID:139200 发表于 2016-9-12 16:13 | 显示全部楼层
下载下来做了仿真感觉不错
回复

使用道具 举报

ID:139204 发表于 2016-9-12 16:16 | 显示全部楼层
很棒的设计,但是代码有点看不懂,正在学习中
回复

使用道具 举报

ID:139236 发表于 2016-9-22 09:01 | 显示全部楼层
找这个例程好久了,感谢分享
回复

使用道具 举报

ID:102702 发表于 2017-3-31 00:46 | 显示全部楼层
正需要这个,下来研究研究
回复

使用道具 举报

ID:127666 发表于 2019-12-16 22:30 | 显示全部楼层
学习有用,谢谢分享
回复

使用道具 举报

ID:600695 发表于 2021-4-18 01:26 | 显示全部楼层
没仿真成功,不知道那错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表