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

本文详细介绍了如何利用MSP430F5529单片机的I/O资源驱动四位数码管同时显示两个不同的两位数,涉及静态和动态驱动方式,并给出了相应的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、四位数码管
1.四位数码管的分类

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

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

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

在这里插入图片描述

2.四位数码管的引脚图

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

在这里插入图片描述

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

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

  2. 动态驱动

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

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

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

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

二、MSP430F5529单片机
  1. 引脚图
    在这里插入图片描述

  2. 实物图
    在这里插入图片描述

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

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

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 8000

void display_number(int number)
{
    switch(number)
    {
        case 1:
            P4OUT |= BIT1;//显示1
            P4OUT |= BIT0;
            P3OUT &=~ BIT2;
            P2OUT &=~ BIT7;
            P4OUT &=~ BIT2;
            P4OUT &=~ BIT3;
            P3OUT &=~ BIT7;
            P8OUT &=~ BIT2;
            break;
        case 2:
            P8OUT |= BIT2;//显示2
            P4OUT |= BIT0;
            P4OUT |= BIT3;
            P3OUT |= BIT2;
            P2OUT |= BIT7;
            P4OUT &=~ BIT2;
            P4OUT &=~ BIT1;
            P3OUT &=~ BIT7;
            break;
        case 3:
            P8OUT |= BIT2;//显示3
            P4OUT |= BIT0;
            P4OUT |= BIT3;
            P4OUT |= BIT1;
            P2OUT |= BIT7;
            P3OUT &=~ BIT2;
            P4OUT &=~ BIT2;
            P3OUT &=~ BIT7;
            break;
        case 4:
            P3OUT |= BIT7;//显示4
            P4OUT |= BIT3;
            P4OUT |= BIT0;
            P4OUT |= BIT1;
            P3OUT &=~ BIT2;
            P2OUT &=~ BIT7;
            P4OUT &=~ BIT2;
            P8OUT &=~ BIT2;
            break;
        case 5:
            P8OUT |= BIT2;//显示5
            P3OUT |= BIT7;
            P4OUT |= BIT3;
            P4OUT |= BIT1;
            P2OUT |= BIT7;
            P3OUT &=~ BIT2;
            P4OUT &=~ BIT2;
            P4OUT &=~ BIT0;
            break;
        case 6:
            P8OUT |= BIT2;//显示6
            P3OUT |= BIT7;
            P4OUT |= BIT3;
            P4OUT |= BIT1;
            P2OUT |= BIT7;
            P3OUT |= BIT2;
            P4OUT &=~ BIT2;
            P4OUT &=~ BIT0;
            break;
        case 7:
            P8OUT |= BIT2;//显示7
            P4OUT |= BIT0;
            P4OUT |= BIT1;
            P3OUT &=~ BIT2;
            P2OUT &=~ BIT7;
            P4OUT &=~ BIT2;
            P4OUT &=~ BIT3;
            P3OUT &=~ BIT7;
            break;
        case 8:
            P8OUT |= BIT2;//显示8
            P4OUT |= BIT0;
            P4OUT |= BIT1;
            P3OUT |= BIT2;
            P2OUT |= BIT7;
            P4OUT |= BIT3;
            P4OUT |= BIT0;
            P3OUT |= BIT7;
            P8OUT |= BIT2;
            break;
        case 9:
            P8OUT |= BIT2;//显示9
            P4OUT |= BIT0;
            P4OUT |= BIT1;
            P2OUT |= BIT7;
            P4OUT |= BIT3;
            P4OUT |= BIT0;
            P3OUT |= BIT7;
            P8OUT |= BIT2;
            P3OUT &=~ BIT2;
            break;
        case 0:
            P8OUT |= BIT2;//显示0
            P4OUT |= BIT0;
            P4OUT |= BIT1;
            P2OUT |= BIT7;
            P3OUT |= BIT2;
            P3OUT |= BIT7;
            P8OUT |= BIT2;
            P4OUT &=~ BIT3;
            break;
    }
}

void IOint()//I/O端口初始化
{
    P3DIR |= BIT2;//E1
    P2DIR |= BIT7;//D2
    P4DIR |= BIT2;//DP3
    P4DIR |= BIT1;//C4
    P4DIR |= BIT3;//G5
    P4DIR |= BIT0;//B7
    P3DIR |= BIT7;//F10
    P8DIR |= BIT2;//A11  
    P6DIR |= BIT0;//DIG1
    P6DIR |= BIT1;//DIG2
    P6DIR |= BIT2;//DIG3
    P6DIR |= BIT3;//DIG46.3

    P3OUT &=~ 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;
}

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王贝贝的爸爸

觉得有用给点鼓励吧,求求你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值