Arduino入门到精通第31课:数码管显示实验(组图)

点击316  回复0  分享1

    数码管显示实验
    数码管是一种常见的普遍的显示数字的显示器件,日常生活中例如:电磁炉,全自动洗衣机,太阳能水温显示,电子钟…..等等数不甚数。说以掌握数码管的显示原理,是很有必要的。
    数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示),本实验所使用的是八段数码管。按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

    数码管的每一段是由发光二极管组成,所以在使用时跟发光二极管一样,也要连接限流电阻,否则电流过大会烧毁发光二极管的。本实验用的是共阴极的数码管,共阴数码管在应用时应将公共极接到GND,当某一字段发光二极管的阳极为低电平时,相应字段就点熄灭。当某一字段的阳极为高电平时,相应字段就点亮。介绍完原理,
    我们开始准备实验用元器件。
    八段数码管*1
    220Ω直插电阻*8
    面包板*1 面包板跳线*1 扎
    我们参考实物连接图按原理图连接好电路。


    数码管共有七段显示数字的段,还有一个显示小数点的段。当让数码管显示数字时,只要将相应的段点亮即可。例如:让数码管显示数字1,则将b、c 段点亮即可。将每个数字写成一个子程序。在主程序中每隔2s 显示一个数字,让数码管循环显示1~8 数字。每一个数字显示的时间由延时时间来决定,时间设置的大些,显示的时间就长些,时间设置的小些,显示的时间就短。
    参考程序源代码:
    //设置控制各段的数字IO 脚
    int a=7;//定义数字接口7 连接a 段数码管
    int b=6;// 定义数字接口6 连接b 段数码管
    int c=5;// 定义数字接口5 连接c 段数码管
    int d=10;// 定义数字接口10 连接d 段数码管
    int e=11;// 定义数字接口11 连接e 段数码管
    int f=8;// 定义数字接口8 连接f 段数码管
    int g=9;// 定义数字接口9 连接g 段数码管
    int dp=4;// 定义数字接口4 连接dp 段数码管
    void digital_0(void) //显示数字5
    {
    unsigned char j;
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,LOW);
    digitalWrite(dp,LOW);
    }
    void digital_1(void) //显示数字1
    {
    unsigned char j;
    digitalWrite(c,HIGH);//给数字接口5 引脚高电平,点亮c 段
    digitalWrite(b,HIGH);//点亮b 段
    for(j=7;j<=11;j++)//熄灭其余段
    digitalWrite(j,LOW);
    digitalWrite(dp,LOW);//熄灭小数点DP 段
    }
    void digital_2(void) //显示数字2
    {
    unsigned char j;
    digitalWrite(b,HIGH);
    digitalWrite(a,HIGH);
    for(j=9;j<=11;j++)
    digitalWrite(j,HIGH);
    digitalWrite(dp,LOW);
    digitalWrite(c,LOW);
    digitalWrite(f,LOW);
    }
    void digital_3(void) //显示数字3
    {
    digitalWrite(g,HIGH);
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(dp,LOW);
    digitalWrite(f,LOW);
    digitalWrite(e,LOW);
    }
    void digital_4(void) //显示数字4
    {
    digitalWrite(c,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);
    digitalWrite(a,LOW);
    digitalWrite(e,LOW);
    digitalWrite(d,LOW);
    }
    void digital_5(void) //显示数字5
    {
    unsigned char j;
    digitalWrite(a,HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);
    }
    void digital_6(void) //显示数字6
    {
    unsigned char j;
    for(j=7;j<=11;j++)
    digitalWrite(j,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(dp,LOW);
    digitalWrite(b,LOW);
    }
    void digital_7(void) //显示数字7
    {
    unsigned char j;
    for(j=5;j<=7;j++)
    digitalWrite(j,HIGH);
    digitalWrite(dp,LOW);
    for(j=8;j<=11;j++)
    digitalWrite(j,LOW);
    }
    void digital_8(void) //显示数字8
    {
    unsigned char j;
    for(j=5;j<=11;j++)
    digitalWrite(j,HIGH);
    digitalWrite(dp,LOW);
    }
    void digital_9(void) //显示数字5
    {
    unsigned char j;
    digitalWrite(a,HIGH);
    digitalWrite(b,HIGH);
    digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);
    digitalWrite(dp,LOW);
    }
    void setup()
    {
    int i;//定义变量
    for(i=4;i<=11;i++)
    pinMode(i,OUTPUT);//设置4~11 引脚为输出模式
    }
    void loop()
    {
    while(1)
    {
    digital_0();//显示数字1
    delay(1000);//延时1s
    digital_1();//显示数字1
    delay(1000);//延时1s
    digital_2();//显示数字2
    delay(1000); //延时1s
    digital_3();//显示数字3
    delay(1000); //延时1s
    digital_4();//显示数字4
    delay(1000); //延时1s
    digital_5();//显示数字5
    delay(1000); //延时1s
    digital_6();//显示数字6
    delay(1000); //延时1s
    digital_7();//显示数字7
    delay(1000); //延时1s
    digital_8();//显示数字8
    delay(1000); //延时1s
    digital_9();//显示数字8
    delay(1000); //延时1s
    }
    }

    实验现象:数码管显示0-9 循环显示。



    【相关精彩阅读】
    Arduino入门到精通第30课:火焰报警实验(组图)
    http://tieba.aiwenwen.com/tie/126555.html
    Arduino入门到精通第29课:倾斜开关实验(组图)
    http://tieba.aiwenwen.com/tie/126554.html

    Arduino入门到精通第31课:数码管显示实验(组图)


    发表回复

    申请加精
    加大 减小

    * 验证码,看不清楚?请点击刷新验证码 看不清楚?请点击刷新验证码

    每位会员第一次回帖审核成功可获5分[积分规则]
    关闭
    爱问问贴吧郑重承诺:我们将尽一切努力,坚决杜绝低俗信息,为广大网友创造一个绿色、健康、和谐的网络空间。同时,我们也真诚的希望广大网友对我们的工作进行监督。请点击:关于爱问问整治低俗内容的公告