欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

MSP430F5529实现四位数码管数字显示

发布时间:2025/4/16 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 MSP430F5529实现四位数码管数字显示 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、四位数码管

1.四位数码管的分类

四位数码管使一种半导体发光器件,其基本单元为发光二极管。按照发光二极管连接方式可以分为共阳极数码管和共阴极数码管。

共阳数码管使指将所有发光二极管的阳极接在一起形成公共阳极的数码管。当某一字段发光二极管的阴极为高电平时,相应字段被点亮,当某一字段的阳极为低电平时,相应字段不亮。

共阴数码管是指将所有发光二极管阴极接在一起形成公共阴极的数码管。当某一字段发光二极管的阳极为高电平时,相应字段被点亮,当某一字段的阳极为低电平时,相应字段不亮。

2.四位数码管的引脚图

引脚排列以左下角的1管脚开始,以逆时针方向依次为1~12管脚。其中A,B,C,D,E,F,G,DP为段引脚,DIG.1,DIG.2,DIG.3,DIG.4分别代表四个数码管的位。

3.四位数码管的驱动方式
  • 静态驱动

    静态驱动是指每个数码管每一个段码都由一个单片机的I/0口进行驱动,优点是编程简单,显示亮度高,但是缺点是占用的I/O多,驱动4个8段数码管需要32个I/O端口,容易造成硬件资源的浪费,增加了硬件电路的复杂性,减低了可靠性。

  • 动态驱动

    数码管动态显示是单片机应用最为广泛的一种显示方式。通过共用A,B,C,D,E,F,G,DP这8个段引脚,为每个数码管公共极增加位选通端,位选通端由各自独立的I/O端口控制。

    当单片机显示某一数字时,所有数码管都接受相同的数字,但哪一位显示数字取决于单片机第对四位数码管选通段的控制,只要需要显示的数码管的选通段置为高电平(低电平),其他选通端置为低电平(高电平),这一位数码管就可以正常显示数字,其他位不会显示。给较小的延迟(1~2ms),再让其他位的数码管依次显示对应的数字,就可以实现各个数码管轮流受控显示。

    由于人的视觉暂留效应和发光二极管的余辉效应,尽管实际上各位数码管并非同时显示数字,但延时时间足够短,人眼看到的就是一组稳定显示的数字,动态显示的效果和静态显示的效果是一样的。

    动态驱动能够节省大量的I/O端口,而且功耗更低,因此应用更加广泛。

  • 二、MSP430F5529单片机

  • 引脚图

  • 实物图

  • 三、使用四位数管同时显示两个不同的两位数

    本次代码要实现的目的是使用数码管显示不同的两位数。

    MSP430F5529的I/O端口与数码管引脚对应情况为:

    数码管管脚I/O端口
    1(E)P3.2
    2(D)P2.7
    3(DP)P4.2
    4( C )P4.1
    5(G)P4.3
    6(DIG.4)P6.3
    7(B)P4.0
    8(DIG.3)P6.2
    9(DIG.2)P6.1
    10(F)P3.7
    11(A)P8.2
    12(DIG.1)P6.0

    代码如下:

    #include <msp430.h> /*** main.c* author:wgx*/ #define DelayTime 8000void display_number(int number) {switch(number){case 1:P4OUT |= BIT1;//显示1P4OUT |= BIT0;P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT3;P3OUT &=~ BIT7;P8OUT &=~ BIT2;break;case 2:P8OUT |= BIT2;//显示2P4OUT |= BIT0;P4OUT |= BIT3;P3OUT |= BIT2;P2OUT |= BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT1;P3OUT &=~ BIT7;break;case 3:P8OUT |= BIT2;//显示3P4OUT |= BIT0;P4OUT |= BIT3;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT &=~ BIT2;P4OUT &=~ BIT2;P3OUT &=~ BIT7;break;case 4:P3OUT |= BIT7;//显示4P4OUT |= BIT3;P4OUT |= BIT0;P4OUT |= BIT1;P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P8OUT &=~ BIT2;break;case 5:P8OUT |= BIT2;//显示5P3OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT &=~ BIT2;P4OUT &=~ BIT2;P4OUT &=~ BIT0;break;case 6:P8OUT |= BIT2;//显示6P3OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT |= BIT2;P4OUT &=~ BIT2;P4OUT &=~ BIT0;break;case 7:P8OUT |= BIT2;//显示7P4OUT |= BIT0;P4OUT |= BIT1;P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT3;P3OUT &=~ BIT7;break;case 8:P8OUT |= BIT2;//显示8P4OUT |= BIT0;P4OUT |= BIT1;P3OUT |= BIT2;P2OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT0;P3OUT |= BIT7;P8OUT |= BIT2;break;case 9:P8OUT |= BIT2;//显示9P4OUT |= BIT0;P4OUT |= BIT1;P2OUT |= BIT7;P4OUT |= BIT3;P4OUT |= BIT0;P3OUT |= BIT7;P8OUT |= BIT2;P3OUT &=~ BIT2;break;case 0:P8OUT |= BIT2;//显示0P4OUT |= BIT0;P4OUT |= BIT1;P2OUT |= BIT7;P3OUT |= BIT2;P3OUT |= BIT7;P8OUT |= BIT2;P4OUT &=~ BIT3;break;} }void IOint()//I/O端口初始化 {P3DIR |= BIT2;//E1P2DIR |= BIT7;//D2P4DIR |= BIT2;//DP3P4DIR |= BIT1;//C4P4DIR |= BIT3;//G5P4DIR |= BIT0;//B7P3DIR |= BIT7;//F10P8DIR |= BIT2;//A11 P6DIR |= BIT0;//DIG1P6DIR |= BIT1;//DIG2P6DIR |= BIT2;//DIG3P6DIR |= BIT3;//DIG46.3P3OUT &=~ BIT2;P2OUT &=~ BIT7;P4OUT &=~ BIT2;P4OUT &=~ BIT1;P4OUT &=~ BIT3;P4OUT &=~ BIT0;P3OUT &=~ BIT7;P8OUT &=~ BIT2; P6OUT |=BIT0;P6OUT |=BIT1;P6OUT |=BIT2;P6OUT |=BIT3; }void display_dig1(int number)//数码管第一位显示 {P6OUT &=~ BIT0;P6OUT |=BIT1;P6OUT |=BIT2;P6OUT |=BIT3;display_number(number); }void display_dig2(int number)//数码管第二位显示 {P6OUT &=~ BIT1;P6OUT |= BIT0;P6OUT |= BIT2;P6OUT |= BIT3;display_number(number); } void display_dig3(int number)//数码管第三位显示 {P6OUT &=~ BIT2;P6OUT |= BIT1;P6OUT |= BIT0;P6OUT |= BIT3;display_number(number); } void display_dig4(int number)//数码管第四位显示 {P6OUT &=~ BIT3;P6OUT |= BIT1;P6OUT |= BIT2;P6OUT |= BIT0;display_number(number); } void temperaturepwm_digital_display(int temperature,int pwm) //将两个两位数转换为四个个位数并进行显示 {int dig1,dig2,dig3,dig4;dig1 = temperature/10;dig2 = temperature - dig1*10;dig3 = pwm/10;dig4 = pwm - dig3*10;while(1){display_dig1(dig1);//第一位显示__delay_cycles(DelayTime);//延迟display_dig2(dig2);//第二位显示__delay_cycles(DelayTime);//延迟display_dig3(dig3);//第二位显示__delay_cycles(DelayTime);//延迟display_dig4(dig4);//第二位显示__delay_cycles(DelayTime);//延迟} } int main(void) {int temperature = 45;//定义两个要显示的两位数int pwm = 66;WDTCTL = WDTPW | WDTHOLD; // 关闭看门狗IOint();temperaturepwm_digital_display(temperature,pwm);return 0; }

    总结

    以上是生活随笔为你收集整理的MSP430F5529实现四位数码管数字显示的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。