8456浏览
查看: 8456|回复: 3

[项目] 红外遥控显示器

[复制链接]
【简介】做了一个简单红外遥控显示器,主要功能:用红外遥控模块控制数码管显示0-9十个数字;每按动一次,数码管闪灭一次,同时蜂鸣器叫一声。接线完成图如下
红外遥控显示器图3


【器材】Arduino Nano,共阳一位数码管,50-220之间电阻,红外遥控套件,蜂鸣器,面包板,面包线
【原理】电路原理图如下
红外遥控显示器图4

【接线】接线示意图如下

红外遥控显示器图5



【程序】代码程序如下
  1. #include<IRremote.h>//红外遥控库函数
  2. /********************************设置变量********************************/
  3. #define IR_IN  8  //红外接收:D8
  4. IRrecv irrecv(IR_IN);
  5. decode_results results;
  6. //设置控制各段的数字I/O脚
  7. int a=16;//模拟口的A2,以下同
  8. int b=17;
  9. int c=4;
  10. int d=3;
  11. int e=2;
  12. int f=15;
  13. int g=14;
  14. int dp=5;
  15. //以下用数组给数码管管脚、0-9十个数字赋值
  16. byte segs[7] = { a, b, c, d, e, f, g };//除了小数点的7笔划段
  17. byte seven_seg_digits[10][7] = { { 1,1,1,1,1,1,0 },  // = 0
  18.                                  { 0,1,1,0,0,0,0 },  // = 1
  19.                                  { 1,1,0,1,1,0,1 },  // = 2
  20.                                  { 1,1,1,1,0,0,1 },  // = 3
  21.                                  { 0,1,1,0,0,1,1 },  // = 4
  22.                                  { 1,0,1,1,0,1,1 },  // = 5
  23.                                  { 1,0,1,1,1,1,1 },  // = 6
  24.                                  { 1,1,1,0,0,0,0 },  // = 7
  25.                                  { 1,1,1,1,1,1,1 },  // = 8
  26.                                  { 1,1,1,1,0,1,1 }   // = 9
  27.                              };
  28. /**************************译码输出子函数******************************/
  29. //执行译码结果函数,输出用灯光、数码管显示,必要可以加蜂鸣器
  30. void remote_deal(void)
  31. {
  32.   switch(results.value)
  33.   {
  34.     case 0xFFA25D: //左上角的电源开关按键
  35.       init_wire();//数码管熄灭
  36.       buzzer_led();//蜂鸣器鸣叫
  37.     break;
  38. //以下显示所按的数字
  39.    case 0xFF6897://显示0
  40.      lightSegments(0);
  41.    break;
  42.    case 0xFF30CF://1
  43.     lightSegments(1);
  44.    break;
  45.    case 0xFF18E7://2
  46.     lightSegments(2);
  47.    break;
  48.    case 0xFF7A85://3
  49.     lightSegments(3);
  50.    break;
  51.    case 0xFF10EF://4
  52.     lightSegments(4);
  53.    break;
  54.    case 0xFF38C7://5
  55.     lightSegments(5);
  56.    break;
  57.    case 0xFF5AA5://6
  58.     lightSegments(6);
  59.    break;
  60.    case 0xFF42BD://7
  61.     lightSegments(7);
  62.    break;
  63.    case 0xFF4AB5://8
  64.     lightSegments(8);
  65.    break;
  66.    case 0xFF52AD://显示9
  67.     lightSegments(9);
  68.    break;
  69.   }
  70. }
  71. /***************************初始化设置函数******************************/
  72. void setup() {
  73.   irrecv.enableIRIn();// 启动红外解码
  74.   unsigned char i;
  75.   for(i=2;i<=19;i++)
  76.   {
  77.     pinMode(i,OUTPUT);//设置2~19引脚为输出模式
  78.    }
  79.   //pinMode(LED_RED,OUTPUT);//设置与红灯连接的引脚为输出模式
  80.   pinMode(IR_IN,INPUT);//设置红外接收引脚为输入
  81.   digitalWrite(9,LOW);//为红外接收头的接地端,节省连接的导线
  82.   digitalWrite(10,HIGH);//为红外接收头的+端,节省连接的导线
  83.   digitalWrite(18,HIGH);//A4,为蜂鸣器-
  84.   digitalWrite(19,HIGH);//A5,为蜂鸣器-,蜂鸣器可接在A4、A5中的任何一个
  85.   Serial.begin(9600);//在计算机的串口窗口里面观察键码值,需要打开串口窗口
  86. }
  87. /***************************主函数(循环)******************************/
  88. void loop()
  89. {  
  90.   if(irrecv.decode(&results)) //解码成功,把数据放入results变量中
  91.   {
  92.      remote_deal();   //执行译码结果
  93.      //以下是观察键码值的程序:
  94.      Serial.println("ir_code");
  95.      Serial.println(results.value, HEX);//显示十进制
  96.      irrecv.resume();
  97.   }
  98. }
  99. /***********************熄灭数码管全部笔画子函数************************/
  100. void init_wire()
  101. {
  102.   for (int i=0;i<7;i++)
  103. {
  104.     digitalWrite(segs[i], HIGH);
  105.     }
  106.   digitalWrite(dp,HIGH);
  107. }
  108. /************************点亮对应数字的数码管0-9*************************/
  109. void lightSegments(int x)
  110. {
  111.   for (int i=0;i<7;i++)
  112. {
  113.   digitalWrite(segs[i], 1-seven_seg_digits[x][i]);
  114.    }
  115.   buzzer_led();//蜂鸣器函数,数码管眨眼
  116.   for (int i=0;i<7;i++)
  117. {
  118.     digitalWrite(segs[i], 1-seven_seg_digits[x][i]);
  119.   }
  120. }
  121. /********************蜂鸣器函数,同时数码管眨眼**********************/
  122. void buzzer_led()
  123. {
  124.   delay(20);//数码管亮
  125.   init_wire();//数码管熄灭
  126.   digitalWrite(18,LOW);//蜂鸣器响
  127.   digitalWrite(19,LOW);//蜂鸣器响
  128.   delay(80);//响持续时间
  129.   digitalWrite(18,HIGH);//蜂鸣器停
  130.   digitalWrite(19,HIGH);
  131. }
复制代码
【效果】最终效果展示两个图

红外遥控显示器图1红外遥控显示器图2

【拓展】若各位大虾看过之后有拓展想法,麻烦告知,下面我的拓展想法。
显示设备的拓展,如一位数码管可换成四位数码管或其他数码管、液晶显示屏、LED矩阵等。

P50508-170931.jpg

大连林海  初级技神

发表于 2015-5-8 18:26:28

楼主好牛 快来教教我
回复

使用道具 举报

丄帝De咗臂  高级技匠
 楼主|

发表于 2015-5-8 18:29:27

大连林海 发表于 2015-5-8 18:26
楼主好牛 快来教教我

让我教你,是不是在说我写的不够详细,哈哈
回复

使用道具 举报

大连林海  初级技神

发表于 2015-5-8 18:44:02

丄帝De咗臂 发表于 2015-5-8 18:29
让我教你,是不是在说我写的不够详细,哈哈

让我学的更多吧
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail