嵌入式数码管静态显示

嵌入式数码管静态显示

使用两个并排的共阴极4位数码管,显示数字(要求在8位任意一个位置只显示一位数字)。两个数码管一共有8个阴极引脚和16个阳极引脚,为了节省MCU的引脚。我们可以将两个数码管的8个阳极接在一起。这样只使用8个GPIO引脚就能控制数码管的显示内容了。

设计思路

我们使用了8个GPIO引脚来控制数码管的阳极。因为我们只要求同一时刻只显示一位数字,所以我们可以使用74HC138(三八译码器)芯片进一步节省MCU的引脚。使用74HC138芯片就可以使用三个引脚控制八个的引脚的输出。如下图所示:

74HC245N(放大驱动器)

因为51单片机高电平的驱动能力很微弱,不足以点亮数码管,可以使用74HC245N芯片放大电流。使用74HC245N之后,51单片引脚的输出就只用作信号传输,电流由74HC245N芯片的电源提供。

实现思路

为了实现当前需求,分别是显示的位置和显示内容。确定显示位置称为数码管的位选,确定显示内容称为数码管的段选。首先位选我们通过74HC138芯片控制,是通过单片机的P13、P14、P15引脚控制。数码管的段选通过单片机的P00~P07这8个引脚控制,具体的对应关系如下图。

#include <STC89C5xRC.H>

#define SMG_EN P36  
typedef unsigned char u8;
typedef unsigned int u16;

static u8 s_digit_codes[10] = {
    0x3F,   //0
    0x06,   //1
    0x5B,   //2
    0x4F,   //3
    0x66,   //4
    0x6D,   //5
    0x7D,   //6
    0x07,   //7
    0x7F,   //8
    0x6F,   //9
};
/**
 * @brief 数码管显示函数
 * 
 * @param dig  显示的位置
 * @param num  显示的数字
 */
void DigitalTube_DisplaySingle(u8 dig, u8 num){
    P0 = 0;   //清空上一次的显示
    /**
     * 因为位选的三个引脚为P13,P14,P15。是P1的中间3位 00[000]000
     * 所以先将中间三位清零,在将显示位置的数左移三位,最后进行或运算。
     */
    P1 &= 0xC7;   
    dig <<= 3;
    P1 |= dig;

    P0 = num;
}
void main(){
    // 数码管开关
    SMG_EN = 0;
    DigitalTube_DisplaySingle(5, s_digit_codes[0]);

    while(1);  // 可以卡主运行程序
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

钱入式橙子

哥哥姐姐,赏点,吃不起饭辣!!

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

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

打赏作者

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

抵扣说明:

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

余额充值