• 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧
  • 欢迎加博主微信:jiang_shaobo

Arduino 入门到精通 四位数码管

点滴 admin 4年前 (2015-08-11) 1151次浏览 已收录 扫描二维码

这次我们进行的实验是使用arduino驱动一块共阳四位数码管。驱动数码管限流电阻肯定是必不可少的,限流电阻有两种接法,一种是在d1-d4阳极接,总共接4颗。这种接法好处是需求电阻比较少,但是会产生每一位上显示不同数字亮度会不一样,1最亮,8最暗。另外一种接法就是在其他8个引脚上接,这种接法亮度显示均匀,但是用电阻较多。本次实验使用8220Ω电阻(因为没有100Ω电阻,所以使用220Ω的代替,100欧姆亮度会比较高)。

SMG1

4位数码管总共有12个引脚,小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。左上角为最大的12号管脚。

SMG2

下图为数码管的说明手册

SMG3

 

 

 

下面是硬件连接图

SMG4

SWSMG5

 

 源代码如下:


#define SEG_A 2
#define SEG_B 3
#define SEG_C 4
#define SEG_D 5
#define SEG_E 6
#define SEG_F 7
#define SEG_G 8
#define SEG_H 9

#define COM1 10
#define COM2 11
#define COM3 12
#define COM4 13


unsigned char table[10][8] =                
{
    {0, 0,  1,  1,  1,  1,  1,  1},         //0
    {0, 0,  0,  0,  0,  1,  1,  0},         //1
    {0, 1,  0,  1,  1,  0,  1,  1},         //2
    {0, 1,  0,  0,  1,  1,  1,  1},         //3
    {0, 1,  1,  0,  0,  1,  1,  0},         //4
    {0, 1,  1,  0,  1,  1,  0,  1},         //5
    {0, 1,  1,  1,  1,  1,  0,  1},         //6
    {0, 0,  0,  0,  0,  1,  1,  1},         //7
    {0, 1,  1,  1,  1,  1,  1,  1},         //8
    {0, 1,  1,  0,  1,  1,  1,  1}          //9
};

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(COM1,OUTPUT);
    pinMode(COM2,OUTPUT);
    pinMode(COM3,OUTPUT);
    pinMode(COM4,OUTPUT);
}

void loop()
{
    Display(1,1);           //第1位显示1
    delay(500);
    Display(2,2);           //第2位显示2
    delay(500);
    Display(3,3);           //第3位显示3
    delay(500);
    Display(4,4);           //第4位显示4
    delay(500);
}

void Display(unsigned char com,unsigned char num)
{
    digitalWrite(SEG_A,LOW);            //去除余晖
    digitalWrite(SEG_B,LOW);
    digitalWrite(SEG_C,LOW);
    digitalWrite(SEG_D,LOW);
    digitalWrite(SEG_E,LOW);
    digitalWrite(SEG_F,LOW);
    digitalWrite(SEG_G,LOW);
    digitalWrite(SEG_H,LOW);

    switch(com)                     //选通位选
    {
        case 1:
            digitalWrite(COM1,LOW);     //选择位1
            digitalWrite(COM2,HIGH);
            digitalWrite(COM3,HIGH);
            digitalWrite(COM4,HIGH);
            break;
        case 2:
            digitalWrite(COM1,HIGH);
            digitalWrite(COM2,LOW);     //选择位2
            digitalWrite(COM3,HIGH);
            digitalWrite(COM4,HIGH);
            break;
        case 3:
            digitalWrite(COM1,HIGH);
            digitalWrite(COM2,HIGH);
            digitalWrite(COM3,LOW);     //选择位3
            digitalWrite(COM4,HIGH);
            break;
        case 4:
            digitalWrite(COM1,HIGH);
            digitalWrite(COM2,HIGH);
            digitalWrite(COM3,HIGH);
            digitalWrite(COM4,LOW);     //选择位4
            break;
        default:break;
    }

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

喜欢 (1)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。