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

单片机控制LED数码管显示,你学会了吗?

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

单片机控制LED数码管显示,你学会了吗?

引用
CSDN
8
来源
1.
https://blog.csdn.net/lin5103151/article/details/103267665
2.
https://blog.csdn.net/Kiuessi/article/details/135151909
3.
https://blog.csdn.net/BROKEN__Y/article/details/127167381
4.
https://blog.csdn.net/gutie_bartholomew/article/details/121039357
5.
https://zhuanlan.zhihu.com/p/37804311
6.
https://blog.csdn.net/weixin_43772810/article/details/120645023
7.
https://www.cnblogs.com/YYZYCS/p/16273316.html
8.
https://www.cnblogs.com/bujidao1128/p/18457216

在我们的日常生活中,LED数码管无处不在:从电子钟到计算器,从汽车仪表盘到各种家用电器,它们以清晰直观的方式为我们显示着各种信息。那么,这些看似简单的数码管是如何工作的呢?今天,我们就来一起揭开LED数码管的神秘面纱,并学习如何用单片机控制它显示数字。

01

LED数码管的基础知识

LED数码管是一种由多个发光二极管组成的显示器件,通常用于显示数字和一些简单的字符。最常见的数码管由8个发光二极管组成,其中7个用于显示数字的笔画,1个用于显示小数点。根据内部结构的不同,LED数码管可分为共阳极和共阴极两种类型。

  • 共阳极数码管:所有发光二极管的阳极连接在一起,需要低电平(0)才能点亮。
  • 共阴极数码管:所有发光二极管的阴极连接在一起,需要高电平(1)才能点亮。

数码管的8个段分别对应a、b、c、d、e、f、g和dp(小数点)。要显示不同的数字或字符,需要控制这些段的亮灭状态。

02

单片机如何控制LED数码管

单片机控制LED数码管主要有两种方式:静态显示和动态显示。

静态显示

静态显示是将每个数码管的段选线独立连接到单片机的I/O口,通过直接输出对应的段码来控制显示内容。这种方式简单直观,但占用较多的I/O口资源。

动态显示

动态显示则是一种更节省I/O口资源的方法。它将所有数码管的同名段连接在一起,通过位选线控制哪个数码管显示内容。单片机通过快速扫描各个数码管,利用人眼的视觉暂留效应,实现多位数码管的同时显示。

03

实际应用案例:用单片机控制数码管显示数字

接下来,我们通过一个具体的例子来学习如何用单片机控制LED数码管显示数字。这里我们使用共阳极数码管,通过动态显示的方式实现多位数字的显示。

硬件连接

我们将4位共阳极数码管的段选线(a-g)连接到单片机的P0口,位选线(位1-位4)连接到P1口。每个数码管的公共端通过电阻连接到电源。

软件编程

下面是一个简单的C语言程序,用于控制数码管显示递增的数字。

#include <reg51.h>

// 定义段选和位选的端口
sbit SEG = P0^0;
sbit DIG = P1^0;

// 定义数码管显示的段码表(共阳极)
unsigned char code segCode[] = {
    0xC0, // 0
    0xF9, // 1
    0xA4, // 2
    0xB0, // 3
    0x99, // 4
    0x92, // 5
    0x82, // 6
    0xF8, // 7
    0x80, // 8
    0x90  // 9
};

// 延时函数
void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 123; j++);
}

// 主函数
void main() {
    unsigned char i = 0;
    while (1) {
        for (i = 0; i < 10; i++) {
            // 选择第1位数码管
            DIG = 0xFE;
            SEG = segCode[i];
            delay(5);

            // 选择第2位数码管
            DIG = 0xFD;
            SEG = segCode[i];
            delay(5);

            // 选择第3位数码管
            DIG = 0xFB;
            SEG = segCode[i];
            delay(5);

            // 选择第4位数码管
            DIG = 0xF7;
            SEG = segCode[i];
            delay(5);
        }
    }
}

代码解释

  1. 段码表:定义了0-9数字对应的段码。由于是共阳极数码管,所以需要低电平点亮。
  2. 延时函数:用于控制数码管的显示时间。
  3. 主函数:通过循环控制4位数码管依次显示0-9的数字。每次显示一个数字时,先选择对应的位选线,然后输出段码,最后通过延时函数控制显示时间。

通过这个简单的例子,我们可以看到单片机控制LED数码管的基本原理和实现方法。无论是静态显示还是动态显示,关键在于理解数码管的工作原理和单片机的I/O控制方式。希望这篇文章能帮助你更好地理解和应用LED数码管。

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