Arduino 卡片15红外遥控数码管

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MadeInJack/article/details/51712174

1、硬件部分

        数码管,常见的用来显示数字的,比如像计算器。这回我们就要来好好研究一下数码管,看看它是如何工作的。数码管,其实也算是LED中的一种。数码管的每一段,都是一个独立的LED,通过数字引脚来控制相应段的亮灭就能达到显示数字的效果。这个项目要实现的是循环显示数字0~9。

按下图连线图连接,注意数码管各段所对应的引脚。右边引脚说明图上为什么画这么几个箭头呢?个人觉得,这样看起来更方便。可以给你作为参考。我们从上面一排看,红色箭头的方向,从右往左,b  a  f  g的顺序正好对应,下面红色箭头逆时针顺序b --> a --> f --> g。蓝色箭头也是表达的同样的意思。
我还特意在连接图上,对数码管所连接的引脚做了标示。这样就能更清楚的知道哪个引脚控制哪一段了。这8个电阻同样是起限流的作用。

重点:弄明白数码管的原理可以随便接(代码中我未按这个图接线,注意针脚就行)

 


       下图是真实卡片的接线图,保留了原红外接收,我的代码将按下图设计,按0-9任一键将变成按的数字,按前进>|数字向后翻至9结束,按|<数字向前翻至0结束。

2、代码部分

#include <IRremote.h>

int RECV_PIN = 13;
IRrecv irrecv(RECV_PIN);
decode_results results;   //用于接收红外码

int currentNumber = 0;

//数码管显示0-9的数组
int num[10][8] = {
  {0,0,0,1,0,0,0,1},
  {0,1,1,1,1,1,0,1},
  {0,0,1,0,0,0,1,1},
  {0,0,1,0,1,0,0,1},
  {0,1,0,0,1,1,0,1},
  {1,0,0,0,1,0,0,1},
  {1,0,0,0,0,0,0,1},
  {0,0,1,1,1,1,0,1},
  {0,0,0,0,0,0,0,1},
  {0,0,0,0,1,1,0,1}
  };
  
//定义遥控器的上的12个按钮代码
long codes[12] = {
   0xFD30CF,0xFD08F7,               // 0 ,1
   0xFD8877,0xFD48B7,               // 2 ,3
   0xFD28D7,0xFDA857,               // 4 ,5
   0xFD6897,0xFD18E7,               // 6 ,7
   0xFD9867,0xFD58A7,               // 8 ,9
   0xFD20DF,0xFD609F,               // 前进键>|, 后退键|<
};

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn();

  for(int i=2;i<=9;i++){
    pinMode(i,OUTPUT);
    digitalWrite(i,HIGH);   //共阳极时HIGH表示灭的意思
  }
}

//显示数字
void showNumberX(int i){
  for(int pin = 2;pin<10;pin++){
    digitalWrite(pin,num[i][pin-2]);
  }
}

void loop() {
  if(irrecv.decode(&results)){
    for(int i=0;i<12;i++){
      if(results.value == codes[i] && i<=9){
        showNumberX(currentNumber = i);
        Serial.println(i);
        break;
      }else if(results.value == codes[10] && currentNumber !=0){
        currentNumber--;
        showNumberX(currentNumber);
        Serial.println(currentNumber);
        break;
      }else if(results.value == codes[11] && currentNumber != 9){
        currentNumber++;
        showNumberX(currentNumber);
        Serial.println(currentNumber);
        break;
      }
  }
    Serial.println(results.value,HEX);
    irrecv.resume();
  }
}



猜你喜欢

转载自blog.csdn.net/MadeInJack/article/details/51712174