亚博智能论坛  
  
查看: 534|回复: 0

课程16--四位数码管

[复制链接]
  • TA的每日心情
    慵懒
    2017-7-29 14:25
  • 121

    主题

    161

    帖子

    576

    积分

    超级版主

    Rank: 9Rank: 9Rank: 9

    积分
    576
    发表于 2017-6-2 12:15:31 | 显示全部楼层 |阅读模式
    四位数码管
    这次我们进行的实验是使用arduino驱动一块共阴四位数码管。实验的目的是:第一位显示1,第二位显示2,第三位显示3,第四位显示4,每次只显示一位,显示间隔0.5秒。
    我们开始准备实验用元器件:
    四位数码管
    1
    220Ω直插电阻
    1
    面包板
    1
    面包板跳线
    1
    管脚顺序:
    4位数码管总共有12个引脚,从正面看小数点朝下正放在面前时,左下角为1,其他管脚顺序为逆时针旋转。左上角为最大的12号管脚。
    CV406YUI66G]VYUD8CE49L8.png
    按照下图链接好电路后,就可以开始编写程序了。
    RPYXEE~B3CGV[)WX659)DBB.png
    参考例程
    #define SEG_A 2 //Arduino Pin2--->SegLed Pin11
    #define SEG_B 3 //Arduino Pin3--->SegLed Pin7
    #define SEG_C 4 //Arduino Pin4--->SegLed Pin4
    #define SEG_D 5 //Arduino Pin5--->SegLed Pin2
    #define SEG_E 6 //Arduino Pin6--->SegLed Pin1
    #define SEG_F 7 //Arduino Pin7--->SegLed Pin10
    #define SEG_G 8 //Arduino Pin8--->SegLed Pin5
    #define SEG_H 9 //Arduino Pin9--->SegLed Pin3
    #define COM1 10 //Arduino Pin10--->SegLed Pin12
    #define COM2 11 //Arduino Pin11--->SegLed Pin9
    #define COM3 12 //Arduino Pin12--->SegLed Pin8
    #define COM4 13 //Arduino Pin13--->SegLed Pin6

    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]);
    }




    回复

    使用道具 举报

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

    本版积分规则

    快速回复 返回顶部 返回列表