问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

单排数码管控制原理与实现方法详解

创作时间:
作者:
@小白创作中心

单排数码管控制原理与实现方法详解

引用
CSDN
1.
https://blog.csdn.net/gzymcgs/article/details/139296964

单排数码管是一种常见的显示设备,广泛应用于各种电子设备中。与传统的共阴极或共阳极数码管相比,单排数码管具有IO引脚少、成本低、可以直接由单片机驱动等优点。本文将详细介绍单排数码管的控制原理和具体实现方法,帮助读者掌握这种显示设备的使用技巧。

单排引脚数码管

在电子设备中,数码管是一种常见的显示设备。传统的数码管通常采用共阴极或共阳极结构,每个数码管需要多个IO引脚进行控制,还需要额外的驱动芯片和译码器,成本较高。在某些特殊情况下,如IO资源紧张的场合,使用这种单排数码管可以大大节省IO资源和成本。

单排数码管可以直接由单片机驱动,只需要在IO引脚上加一个限流电阻即可。这种数码管的价格也不贵,非常适合在资源受限的场合使用。


一、控制原理

单排数码管的控制原理与传统的数码管有所不同。传统的数码管是通过控制每个段的高低电平来点亮或熄灭,而单排数码管则是通过每两个IO引脚相互配合使用来点亮一个段。

例如,要点亮DIG1的A段,需要控制数码管的pin1为低电平、pin6为高电平。同理,其他段的点亮也需要通过相应的IO引脚组合来实现。如果要显示数字0,就需要依次点亮A、B、C、D、E、F这6个LED。

需要注意的是,这里的“依次点亮”并不是同时点亮这些LED,而是通过快速切换来实现视觉上的同时点亮效果。这是单排数码管与普通数码管的一个重要区别。

在实际控制过程中,会遇到一个看似矛盾的问题:例如,要点亮数字0,需要控制多个LED,而这些LED的控制引脚会有重叠。例如,LED_A需要pin1为低电平,而LED_F需要pin1为高电平,这似乎产生了冲突。

解决这个问题的关键在于理解单排数码管的控制条件:点亮一个LED,只允许控制该LED的2个IO引脚有高低电平,不允许其他IO引脚有高低电平

因此,在使用时不能同时初始化所有IO引脚为输出模式,而应该每次只设置需要使用的2个IO引脚为输出模式,其他未使用的IO引脚则设置为输入模式。这样可以避免不必要的LED被点亮。

二、具体操作流程

这里以STM8S105单片机为例,介绍具体的控制流程:

  1. 首先将所有用于数码管控制的IO引脚设置为输入模式,以确保没有电流输出。
  2. 对需要点亮的LED,将其对应的2个IO引脚设置为输出模式,并根据需要设置一个为高电平、另一个为低电平。

下面是具体的代码实现:

// 用于数码管的引脚重置--将所有IO引脚设置为浮空输入模式
void SMG_Pin_Reset(void)
{
    // 浮空输入无中断
    GPIO_Init(SMG_GPIO_PORT, (GPIO_Pin_TypeDef)(SMG_PIN1|SMG_PIN2|SMG_PIN3|SMG_PIN4|SMG_PIN5|SMG_PIN6), GPIO_MODE_IN_FL_NO_IT);
}

// HighPinNum 需要设定为高电平的引脚 LowPinNum需要设定为低电平的引脚
// 每次点亮新的LED时都要关闭所有SMG引脚 防止别的LED亮
void SMG_LEDN_Set(u8 HighPinNum,u8 LowPinNum)
{
    SMG_Pin_Reset(); // 重置一次消除残影 关闭所有引脚
    GPIO_Init(SMG_GPIO_PORT, SMG_GetPin(HighPinNum), GPIO_MODE_OUT_PP_LOW_FAST);
    GPIO_Init(S2M_GPIO_PORT, SMG_GetPin(LowPinNum), GPIO_MODE_OUT_PP_HIGH_FAST);
    GPIO_Write(SMG_GPIO_PORT, SMG_GetPin(HighPinNum), Bit_SET);
    GPIO_Write(SMG_GPIO_PORT, SMG_GetPin(LowPinNum), Bit_RESET);
}

通过上述方法,可以精确控制单排数码管的显示,实现各种数字和字符的显示效果。

本文详细介绍了单排数码管的控制原理和具体实现方法,希望对从事嵌入式开发或单片机编程的读者有所帮助。通过理解单排数码管的工作原理和控制方法,可以更好地利用这种显示设备,实现更高效、更低成本的电子设备设计。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号