Arduion 驱动4位LED数码管

 本示例演示如何使用Arduion UNO开发板驱动4位共阳极数码管,可自定义码值表定义数码管可显示的字符。示例中,可显示小数数字及一些字母。

共阳:低电平点亮

共阴:高电平点亮 

 

4位数码管本尊清晰裸照
数码管接线图
Arduion接线图
显示字母“FULL”
4位数码管引脚图
单个LED与Arduion引脚关系图

 

//4位共阳数码管示例
#define SEG_A 12  //A引脚
#define SEG_B 8   //B引脚
#define SEG_C 4   //C引脚
#define SEG_D 6   //D引脚
#define SEG_E 7   //E引脚
#define SEG_F 11  //F引脚
#define SEG_G 3   //G引脚
#define SEG_H 5   //小数点引脚

#define LED1 13   //第一个二极管引脚
#define LED2 10   //第二个二极管引脚
#define LED3 9    //第三个二极管引脚
#define LED4 2    //第四个二极管引脚

//LED显示字符的字典表
unsigned char table[31][8] = {
  {0,0,0,0,0,0,1,1},   //0
  {1,1,1,1,0,0,1,1},   //1
  {0,0,1,0,0,1,0,1},   //2
  {0,0,0,0,1,1,0,1},   //3
  {1,0,0,1,1,0,0,1},   //4
  {0,1,0,0,1,0,0,1},   //5
  {0,1,0,0,0,0,0,1},   //6
  {0,0,0,1,1,1,1,1},   //7
  {0,0,0,0,0,0,0,1},   //8
  {0,0,0,0,1,0,0,1},   //9
  {0,0,0,0,0,0,1,0},   //0.
  {1,1,1,1,0,0,1,0},   //1.
  {0,0,1,0,0,1,0,0},   //2.
  {0,0,0,0,1,1,0,0},   //3.
  {1,0,0,1,1,0,0,0},   //4.
  {0,1,0,0,1,0,0,0},   //5.
  {0,1,0,0,0,0,0,0},   //6.
  {0,0,0,1,1,1,1,0},   //7.
  {0,0,0,0,0,0,0,0},   //8.
  {0,0,0,0,1,0,0,0},   //9.
  {0,1,1,0,0,0,1,1},   //C
  {0,1,1,0,0,0,0,1},   //E
  {0,1,1,1,0,0,0,1},   //F
  {1,0,0,1,0,0,0,1},   //H
  {1,0,0,1,1,1,1,1},   //I
  {1,0,0,0,1,1,1,1},   //J
  {1,1,1,0,0,0,1,1},   //L
  {0,0,1,1,0,0,0,1},   //P
  {0,0,0,1,1,0,0,1},   //Q
  {0,0,0,1,0,0,0,1},   //R
  {1,0,0,0,0,0,1,1}    //U
};

//LED数码管
unsigned int ledTable[4] = {LED1,LED2,LED3,LED4};

void setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_H, OUTPUT);
  
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  
  //不知道为什么,打开串口,可以正常显示类似FULL四个字母。注释掉最多显示三个字母。
  //有懂的朋友可以在留言中评论
  Serial.begin(9600);
}

void loop() {
  //char str[] = {'8'};
  //char str[] = {'1','.','3','4','5'};
  //char str[] = {'7','5','3','0','.'};
  //char str[] = {'3','8','.','0'};
  char str[] = {'2','6','9','.','8'};
  //char str[] = {'E'};
  //char str[] = {'E','R','R'};
  //char str[] = {'E','R','R','E'};
  //char str[] = {'E','E','R','0'};//ERRO
  //char str[] = {'L','E','0'};//LED
  //char str[] = {'F','U','L','L'};//FULL
  displayStr(str);
}

//显示某个字符
void displayChar(int led, int tblIdx){
  //去除余晖
  digitalWrite(SEG_A,HIGH);            
  digitalWrite(SEG_B,HIGH);
  digitalWrite(SEG_C,HIGH);
  digitalWrite(SEG_D,HIGH);
  digitalWrite(SEG_E,HIGH);
  digitalWrite(SEG_F,HIGH);
  digitalWrite(SEG_G,HIGH);
  digitalWrite(SEG_H,HIGH);

  //当前显示LED高电平
  digitalWrite(LED1,LOW);
  digitalWrite(LED2,LOW);
  digitalWrite(LED3,LOW);
  digitalWrite(LED4,LOW);
  digitalWrite(led,HIGH);

  //查询码值表
  digitalWrite(SEG_A,table[tblIdx][0]);
  digitalWrite(SEG_B,table[tblIdx][1]);
  digitalWrite(SEG_C,table[tblIdx][2]);
  digitalWrite(SEG_D,table[tblIdx][3]);
  digitalWrite(SEG_E,table[tblIdx][4]);
  digitalWrite(SEG_F,table[tblIdx][5]);
  digitalWrite(SEG_G,table[tblIdx][6]);
  digitalWrite(SEG_H,table[tblIdx][7]);
}

//显示字符串
void displayStr(const char *str){
  int len = strlen(str);
  if (len > 5)
    len = 5;
  int ledIdx = 0;
  for(int i = 0; i < len; i++){
    
    int tblIdx = 0;
    char c = str[i];
    //字母编码表
    if (c == 'C')
      tblIdx = 20;
    else if (c == 'E')
      tblIdx = 21;
    else if (c == 'F')
      tblIdx = 22;
    else if (c == 'H')
      tblIdx = 23;
    else if (c == 'I')
      tblIdx = 24;
    else if (c == 'J')
      tblIdx = 25;
    else if (c == 'L')
      tblIdx = 26;
    else if (c == 'P')
      tblIdx = 27;
    else if (c == 'Q')
      tblIdx = 28;
    else if (c == 'R')
      tblIdx = 29;
    else if (c == 'U')
      tblIdx = 30;
    else{//数字及小数点编码表
      tblIdx = str[i] - '0';
      if (i < len - 1 && str[i+1]=='.'){
        tblIdx += 10;
        i++;
      }
    }
    displayChar(ledTable[ledIdx], tblIdx);
    ledIdx++;
  }
}

 操作步骤:

  1. 将数码管插入面包板,共两边单边6个引脚,从面包板30处插入,方便记忆
  2. 将杜邦线插入到Arduion,从13-2引脚,从左到右
  3. 13-8引脚插入面包板数码管的外侧(上边缘),从左到右
  4. 7-2  引脚插入面包板数码管的内侧(下边缘),从左到右
  5. 编译并上传程序,即可看到示例
60帧拍摄3s不闪烁,显示数字 269.8

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值