丄帝De咗臂 发表于 2015-5-8 17:34:29

红外遥控显示器

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


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


【接线】接线示意图如下




【程序】代码程序如下
#include<IRremote.h>//红外遥控库函数
/********************************设置变量********************************/
#define IR_IN8//红外接收:D8
IRrecv irrecv(IR_IN);
decode_results results;

//设置控制各段的数字I/O脚
int a=16;//模拟口的A2,以下同
int b=17;
int c=4;
int d=3;
int e=2;
int f=15;
int g=14;
int dp=5;

//以下用数组给数码管管脚、0-9十个数字赋值
byte segs = { a, b, c, d, e, f, g };//除了小数点的7笔划段
byte seven_seg_digits = { { 1,1,1,1,1,1,0 },// = 0
                                 { 0,1,1,0,0,0,0 },// = 1
                                 { 1,1,0,1,1,0,1 },// = 2
                                 { 1,1,1,1,0,0,1 },// = 3
                                 { 0,1,1,0,0,1,1 },// = 4
                                 { 1,0,1,1,0,1,1 },// = 5
                                 { 1,0,1,1,1,1,1 },// = 6
                                 { 1,1,1,0,0,0,0 },// = 7
                                 { 1,1,1,1,1,1,1 },// = 8
                                 { 1,1,1,1,0,1,1 }   // = 9
                           };
/**************************译码输出子函数******************************/
//执行译码结果函数,输出用灯光、数码管显示,必要可以加蜂鸣器
void remote_deal(void)
{
switch(results.value)
{
    case 0xFFA25D: //左上角的电源开关按键
      init_wire();//数码管熄灭
      buzzer_led();//蜂鸣器鸣叫
    break;
//以下显示所按的数字
   case 0xFF6897://显示0
   lightSegments(0);
   break;
   case 0xFF30CF://1
    lightSegments(1);
   break;
   case 0xFF18E7://2
    lightSegments(2);
   break;
   case 0xFF7A85://3
    lightSegments(3);
   break;
   case 0xFF10EF://4
    lightSegments(4);
   break;
   case 0xFF38C7://5
    lightSegments(5);
   break;
   case 0xFF5AA5://6
    lightSegments(6);
   break;
   case 0xFF42BD://7
    lightSegments(7);
   break;
   case 0xFF4AB5://8
    lightSegments(8);
   break;
   case 0xFF52AD://显示9
    lightSegments(9);
   break;
}
}
/***************************初始化设置函数******************************/
void setup() {
irrecv.enableIRIn();// 启动红外解码
unsigned char i;
for(i=2;i<=19;i++)
{
    pinMode(i,OUTPUT);//设置2~19引脚为输出模式
   }
//pinMode(LED_RED,OUTPUT);//设置与红灯连接的引脚为输出模式
pinMode(IR_IN,INPUT);//设置红外接收引脚为输入
digitalWrite(9,LOW);//为红外接收头的接地端,节省连接的导线
digitalWrite(10,HIGH);//为红外接收头的+端,节省连接的导线
digitalWrite(18,HIGH);//A4,为蜂鸣器-
digitalWrite(19,HIGH);//A5,为蜂鸣器-,蜂鸣器可接在A4、A5中的任何一个
Serial.begin(9600);//在计算机的串口窗口里面观察键码值,需要打开串口窗口
}
/***************************主函数(循环)******************************/
void loop()
{
if(irrecv.decode(&results)) //解码成功,把数据放入results变量中
{
   remote_deal();   //执行译码结果
   //以下是观察键码值的程序:
   Serial.println("ir_code");
   Serial.println(results.value, HEX);//显示十进制
   irrecv.resume();
}
}
/***********************熄灭数码管全部笔画子函数************************/
void init_wire()
{
for (int i=0;i<7;i++)
{
    digitalWrite(segs, HIGH);
    }
digitalWrite(dp,HIGH);
}
/************************点亮对应数字的数码管0-9*************************/
void lightSegments(int x)
{
for (int i=0;i<7;i++)
{
digitalWrite(segs, 1-seven_seg_digits);
   }
buzzer_led();//蜂鸣器函数,数码管眨眼
for (int i=0;i<7;i++)
{
    digitalWrite(segs, 1-seven_seg_digits);
}
}
/********************蜂鸣器函数,同时数码管眨眼**********************/
void buzzer_led()
{
delay(20);//数码管亮
init_wire();//数码管熄灭
digitalWrite(18,LOW);//蜂鸣器响
digitalWrite(19,LOW);//蜂鸣器响
delay(80);//响持续时间
digitalWrite(18,HIGH);//蜂鸣器停
digitalWrite(19,HIGH);
}【效果】最终效果展示两个图


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

大连林海 发表于 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
让我教你,是不是在说我写的不够详细,哈哈

让我学的更多吧
页: [1]
查看完整版本: 红外遥控显示器