找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18947|回复: 22
打印 上一主题 下一主题
收起左侧

HX1838红外无线遥控模块51单片机程序

  [复制链接]
跳转到指定楼层
楼主
红外无线模块:
1.硬件:红外接收器+遥控器
2.连接方式:接收器的+、-分别连接在单片机的VCC、GND上面,S为信号输出端连接在单片机的IO口上面(例程里面连接在了P3^2引脚)
3.遥控器上面每一个按键对应的键码值已经在程序中给出,程序的内容是用遥控器控制单片机上面的流水灯

单片机源程序如下:
  1. #include<reg52.h>    //包含单片机寄存器的头文件
  2. #include<intrins.h> //包含_nop_()函数定义的头文件
  3. #define uchar unsigned char
  4. #define uint  unsigned int


  5. sbit IRIN=P3^2;         //红外接收器数据线


  6. sbit led1=P1^0;
  7. sbit led2=P1^1;
  8. sbit led3=P1^2;
  9. sbit led4=P1^3;
  10. sbit led5=P1^4;
  11. sbit led6=P1^5;
  12. sbit led7=P1^6;
  13. sbit led8=P1^7;

  14. uchar IRCOM[7];

  15. void delay(unsigned char x) ;

  16. /*******************************************************************/
  17. void main()
  18. {
  19.          unsigned int  a;
  20.    
  21.         IRIN=1;                    //I/O口初始化        
  22.         IE=0x81;                 //允许总中断中断,使能 INT0 外部中断
  23.         TCON=TCON|0x01;               //触发方式为脉冲负边沿触发
  24.         
  25.          while(1)
  26.          {               
  27.             for(a=100;a>0;a--)
  28.    {
  29.      void IR_IN();
  30.    }        
  31.           }
  32. }
  33. /**********************************************************/
  34. void IR_IN() interrupt 0 using 0
  35. {
  36.         unsigned char j,k,N=0;
  37.         unsigned char q=0;
  38.         EX0 = 0;   
  39.         delay(15);
  40.         if (IRIN==1)
  41.         {
  42.                 EX0 =1;
  43.                 return;
  44.         }
  45.                    //确认IR信号出现
  46.         while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
  47.                 delay(1);
  48.         
  49.         for (j=0;j<4;j++)         //收集四组数据
  50.         {
  51.                 for (k=0;k<8;k++)        //每组数据有8位
  52.                 {
  53.                         while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
  54.                         {delay(1);}
  55.                         while (!IRIN)          //等 IR 变为高电平
  56.                                 delay(1);
  57.                         while (IRIN)           //计算IR高电平时长
  58.                         {
  59.                                 delay(1);
  60.                                 N++;           
  61.                                 if (N>=30)
  62.                                 {
  63.                                         EX0=1;
  64.                                         return;
  65.                                 }                  //0.14ms计数过长自动离开。
  66.                         }                        //高电平计数完毕               
  67.                         IRCOM[j]=IRCOM[j] >> 1;     //数据最高位补“0”
  68.                         if(N>=8)
  69.                         {
  70.                                 IRCOM[j] = IRCOM[j] | 0x80;                  //数据最高位补“1”
  71.                         }  
  72.                         N=0;
  73.                 }
  74.         }
  75.         
  76.         if(IRCOM[2]!=~IRCOM[3])
  77.         {
  78.                 EX0=1;
  79.                 return;
  80.         }
  81.         
  82.         IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位
  83.         IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位
  84.         
  85.         if(IRCOM[5]>9)
  86.         {
  87.                 IRCOM[5]=IRCOM[5]+0x37;
  88.         }
  89.         else
  90.         IRCOM[5]=IRCOM[5]+0x30;
  91.         
  92.         if(IRCOM[6]>9)
  93.         {
  94.                 IRCOM[6]=IRCOM[6]+0x37;
  95.         }
  96.         else
  97.         IRCOM[6]=IRCOM[6]+0x30;

  98.         q= (((IRCOM[6]&0x0f)<<4) + (IRCOM[5]&0x0f));
  99.    

  100.         switch(q)    //判断按键键码值
  101.         {
  102.                 case 0x04:led1=1;led2=0;led3=1;led4=0;led5=1;led6=0;led7=1;led8=0;break;  //(#)
  103.                 case 0x19:led1=0;break;  //(0)
  104.                 case 0x40:led5=0;break;  //(5)
  105.                 case 0x43:led6=0;break;  //(6)
  106.                 case 0x44:led4=0;break;  //(4)
  107.                 case 0x45:led1=0;break;  //(1)
  108.                 case 0x46:led2=0;break;  //(2)
  109.                 case 0x47:led3=0;break;  //(3)
  110.                 case 0x07:led7=0;break;  //(7)
  111.                 case 0x18:led1=0;led2=0;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;break;  //(上)
  112.                 case 0x09:led1=0;led2=0;led3=0;led4=0;led5=0;led6=0;led7=0;led8=0;break;  //(9)
  113.                 case 0x08:led1=1;led2=1;led3=1;led4=1;led5=0;led6=0;led7=1;led8=1;break;  //(左)
  114.                 case 0x13:led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;break;  //(ok)
  115.                 case 0x51:led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=0;led8=0;break;  //(右)
  116.                 case 0x15:led8=0;break;  //(8)
  117.                 case 0x52:led1=1;led2=1;led3=0;led4=0;led5=1;led6=1;led7=1;led8=1;break;  //(下)
  118.                 case 0x16:led1=0;led2=1;led3=0;led4=1;led5=0;led6=1;led7=0;led8=1;break;  // (*)
  119.         
  120.                 default :break;
  121.         }

  122.          EX0 = 1;
  123. }


  124. /***************延时函数*****************************/
  125. void delay(unsigned char x)    //x*0.14MS
  126. {
  127.         unsigned char i;
  128.         while(x--)
  129.         {
  130.                 for (i = 0; i<13; i++) {}
  131.         }
  132. }
复制代码

所有资料51hei提供下载:
CR2025.zip (28.47 KB, 下载次数: 291)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏16 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:365823 发表于 2019-2-18 16:26 | 只看该作者
感谢分享
回复

使用道具 举报

板凳
ID:293438 发表于 2019-3-24 20:37 | 只看该作者
学习了
回复

使用道具 举报

地板
ID:65956 发表于 2019-3-25 09:02 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:472506 发表于 2019-3-25 12:08 | 只看该作者
学习学习。
回复

使用道具 举报

6#
ID:500015 发表于 2019-3-28 16:44 | 只看该作者
谢谢!
回复

使用道具 举报

7#
ID:62865 发表于 2019-10-21 16:37 | 只看该作者
tzr448106883 发表于 2019-7-31 18:15
你好啊  我把这个代码写到STC89C52能用但是 写到STC15W401AS就用不了 是什么原因?

15系列的比89系列的速度快,估计是延时时间不一致
回复

使用道具 举报

8#
ID:428298 发表于 2019-12-11 10:51 | 只看该作者
太棒啦!
回复

使用道具 举报

9#
ID:485431 发表于 2020-2-9 15:07 | 只看该作者
怎么没有看到电源键的作用??
回复

使用道具 举报

10#
ID:452950 发表于 2020-3-7 14:29 | 只看该作者
正好用到这款红外遥控,有了键值就不用自己另外解码了,多谢
回复

使用道具 举报

11#
ID:686739 发表于 2020-3-7 19:59 来自手机 | 只看该作者
学习一下
回复

使用道具 举报

12#
ID:704402 发表于 2020-3-8 09:59 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

13#
ID:434551 发表于 2020-3-8 11:17 | 只看该作者
感谢分享                              
回复

使用道具 举报

14#
ID:688189 发表于 2020-3-8 18:45 | 只看该作者
感谢分享
回复

使用道具 举报

15#
ID:703745 发表于 2020-3-11 13:48 来自手机 | 只看该作者
xxpp2011 发表于 2020-3-7 14:29
正好用到这款红外遥控,有了键值就不用自己另外解码了,多谢

请问大佬程序成功了吗?为什么我下进去不行呢?
回复

使用道具 举报

16#
ID:452950 发表于 2020-3-24 16:23 | 只看该作者
最高权限 发表于 2020-3-11 13:48
请问大佬程序成功了吗?为什么我下进去不行呢?

我买的红外遥控看起来是同一款,可能厂家不一样,实际的数据码与楼主发的不一致,所以后来自己解码了。
回复

使用道具 举报

17#
ID:699194 发表于 2020-3-30 17:49 | 只看该作者
楼主,为什么我烧录你的程序,红外遥控没有反应(和你一样的红外模块),请问是什么原因的呢
回复

使用道具 举报

18#
ID:314869 发表于 2020-4-7 13:26 | 只看该作者
学习了
回复

使用道具 举报

19#
ID:356226 发表于 2020-4-7 16:32 | 只看该作者
感谢楼主的分享,对我的课程设计有一定的启发
回复

使用道具 举报

20#
ID:618097 发表于 2020-4-26 10:23 | 只看该作者
你好,这个与晶振有没有关系,我用的是12M的,
回复

使用道具 举报

21#
ID:497323 发表于 2021-3-10 16:15 | 只看该作者
楼主主频晶振设置为多少M?0.14mS的延时程序用了14个循环
回复

使用道具 举报

22#
ID:923440 发表于 2021-8-23 21:03 | 只看该作者
xxpp2011 发表于 2020-3-24 16:23
我买的红外遥控看起来是同一款,可能厂家不一样,实际的数据码与楼主发的不一致,所以后来自己解码了。

你好,这个红外模块的键值码用什么可以测出来呀
回复

使用道具 举报

23#
ID:923440 发表于 2021-8-24 10:07 | 只看该作者
xxpp2011 发表于 2020-3-24 16:23
我买的红外遥控看起来是同一款,可能厂家不一样,实际的数据码与楼主发的不一致,所以后来自己解码了。

大佬,请问这个怎么解码,我 用的也是这款遥控器,发现也不能显示,求解码的程序谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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