找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机使用红外控制家里的灯 源程序

[复制链接]
跳转到指定楼层
楼主
ID:523178 发表于 2020-4-18 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
通过红外通信,使用遥控器控制家里的灯开关,使用继电器作为开关,高电平触发。使用继电接220v一定要看继电器的耐压值,需要大于220v才可以,小于220v的不能用作一般家电控制。程序简单,适合初学者学习,接220v需谨慎。

单片机源程序如下:

  1. #include "H_W.h"
  2. //#define GPIO_LED P2
  3. #define GPIO_SMG P0
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. uchar code smgduan[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
  7.                                                 0x7c,0x39,0x5e,0x79,0x71,0x76};
  8. //uchar remote_c_data[4];
  9. uchar display[8];
  10. //uchar Time = 0;
  11. uchar Signal_Code;

  12. sbit relay = P2^0;

  13. sbit LSA = P1^0;
  14. sbit LSB = P1^1;
  15. sbit LSC = P1^2;

  16. void Delay(uint i)
  17. {
  18.          while(i--);
  19. }

  20. /* 定义八个数码管显示器的位选函数 ,扫描数码管 */
  21. void Digdisplay()
  22. {
  23.         uchar i;
  24.         for(i = 0; i < 3; i++)
  25.         {
  26.                  switch(i)
  27.                 {
  28.                
  29.                          case (0):
  30.                                         LSA = 0; LSB = 0; LSC = 0; break;           // 000
  31.                         case (1):                                                                          
  32.                                         LSA = 1; LSB = 0; LSC = 0; break;           // 001
  33.                         case (2):                                                                          
  34.                                         LSA = 0; LSB = 1; LSC = 0; break;           // 010
  35.                 }
  36.                 GPIO_SMG = display[i];
  37.                 Delay(100);                     //改变参数的值能实现滚动显示。最大为65535,否则会溢出。
  38.                 GPIO_SMG = 0x00;           //清空数码管,以防止出现重影。
  39.         }
  40. }



  41. void main(void)
  42. {
  43.         Remote_Init();
  44. //        GPIO_LED = 0xff;
  45.         relay = 0;
  46.          while(1)
  47.         {
  48. //                Time = 0;  //每次使用前必须初始化为零
  49.                  display[0] = smgduan[remote_c_data[2] / 16];
  50.                 display[1] = smgduan[remote_c_data[2] % 16];
  51.                 display[2] = smgduan[16];
  52.                 Digdisplay();
  53.                 Signal_Code = remote_c_data[2];
  54.                 if(Signal_Code == 0x45)
  55.                 {
  56. //                           GPIO_LED = 0x00;
  57.                         relay = 1;                        //开灯
  58.                 }
  59.                 else if(Signal_Code == 0x46)
  60.                 {
  61. //                        GPIO_LED = 0xff;
  62.                         relay = 0;                        //关灯
  63.                 }
  64.         }
  65. }

  66. void ReadIr() interrupt 0
  67. {
  68.         remote_Control();        
  69. }
复制代码

全部程序51hei下载地址:
红外通信.rar (29.15 KB, 下载次数: 11)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:328014 发表于 2020-4-18 14:40 | 只看该作者
很实用 能分享或者介绍下原理图吗?
回复

使用道具 举报

板凳
ID:523178 发表于 2020-4-18 15:14 | 只看该作者
51hei团团 发表于 2020-4-18 14:40
很实用 能分享或者介绍下原理图吗?

原理图没有的,重点在红外通信上面,首先测试遥控器各个键所对应的键值,通过数码管或者串口显示,记下你想使用的键及对应的键值,然后在主函数里面判断接收到遥控器的键值,从而执行相应的功能。我写的这个是判断接收到遥控器的键值与0x45比较,一样继电器吸合,开灯;与0x46比较,一样继电器断开,关灯;你可以接其他的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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