当前位置: 首页 > news >正文

【Proteus仿真】数码管控制系列仿真——单个数码管控制/多数码管控制

目录

0案例视频效果展示

0.1例子1:控制单个数码管显示0-9

0.2例子2:8个数码管控制显示

0.3例子3:8只数码管闪烁显示数字串

0.4例子4:数码管滚动显示数字串

1基础知识补充

1.1 数码管基础知识

1.1.1外观与引脚

1.1.2 共阴(CC) vs 共阳(CA)

1.1.3段码表(以数字1为例)

1.1.4驱动方式

1.1.5 多连排数码管动态扫描

1.1.6 快速排查清单

2例子1:控制单个数码管显示0-9

2.1电路原理图

2.1.1电路组成及接线

2.2控制程序

2.2.1控制程序步骤

2.2.3源代码

3例子2:8个数码管控制显示

2.1电路原理图

2.1.1电路组成及接线

3.2控制程序

3.2.1控制程序步骤

3.2.2源代码

4例子3:8只数码管闪烁显示数字串

4.1电路原理图

4.1.1电路组成及接线

4.2控制程序

4.2.1控制程序步骤

4.2.2源代码

5例子4:数码管滚动显示数字串

5.1电路原理图

5.2.2源代码

  7 硬件工程师笔试面试相关文章链接(部分链接)


摘要:本文系统介绍了7段数码管的原理与应用,重点讲解了共阴/共阳数码管的区别、段码表生成方法及四种典型控制案例。内容包括:单个数码管0-9循环显示(直连IO)、8位数码管动态扫描(0-7滚动显示)、数字串闪烁显示和左移滚动显示三种效果实现。每个案例均提供完整的电路原理图、控制流程和51单片机C语言源代码,涉及动态扫描、环形队列等关键技术。文章还详细介绍了数码管驱动方式选择、常见问题排查方法等实用知识,为电子设计初学者提供了全面的数码管应用参考方案。

0案例视频效果展示

0.1例子1:控制单个数码管显示0-9

例子10:控制单个数码管显示0-9

0.2例子2:8个数码管控制显示

例子11:8个数码管控制显示

0.3例子3:8只数码管闪烁显示数字串

例子12:8只数码管闪烁显示数字串

0.4例子4:数码管滚动显示数字串

例子13:数码管滚动显示数字串

1基础知识补充

1.1 数码管基础知识

7段数码管(7-segment display)是最常见的数字显示器件之一,广泛用于仪表、时钟、计数器等场合。

1.1.1外观与引脚

如上图所示,7个发光段分别命名为 a、b、c、d、e、f、g(顺时针方向排列),再加一个小数点 dp。

引脚排列没有统一标准,务必看数据手册或用万用表「二极管档」量:红笔固定接公共端,黑笔依次碰其它脚,某一段亮就说明该脚对应段。

1.1.2 共阴(CC) vs 共阳(CA)

共阴:所有 LED 阴极并在一起 → 公共脚接 GND,要点亮某段就给该段阳极送高电平(+V)。

共阳:所有 LED 阳极并在一起 → 公共脚接 +V,要点亮某段就给该段阴极送低电平(GND)。

记忆口诀:
共阴 = “给1亮”
共阳 = “给0亮”

1.1.3段码表(以数字1为例)

数字1需要点亮 b、c 两段。

类型

a b c d e f g dp

十六进制

说明

共阴

0 1 1 0 0 0 0 0

0x06

b、c=1,其余=0

共阳

1 0 0 1 1 1 1 1

0xF9

b、c=0,其余=1

完整段码速查:
0 1 2 3 4 5 6 7 8 9
共阴:0x3F 0x06 0x5B 0x4F 0x66 0x6D 0x7D 0x07 0x7F 0x6F
共阳:取反即可(~共阴 & 0xFF)

1.1.4驱动方式


A. 直连IO(最简单,占用IO多)
一个段一根线,共阴或共阳公共端固定接GND/VCC
适合单个数码管、教学实验。

B. 译码/驱动芯片
74HC47(BCD→7段,共阳)
CD4511(BCD→7段,带锁存,共阴)
TM1637、MAX7219(集成扫描与亮度调节)

C. MCU+三极管/MOS(动态扫描多个位)
节省IO:段线共用,位选线轮流导通。
需要定时刷新(>100 Hz 无闪烁)。

1.1.5 多连排数码管动态扫描


以4位共阴为例:

12个IO:8段+4位选

流程:

关所有位(位选高)

送第N位段码

打开第N位(位选低)

延时1~2 ms

回到1,循环

伪代码:

const uint8_t seg_cc[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void display_4digit(uint16_t val){for(uint8_t pos=0; pos<4; pos++){set_digit_OFF();output_SEG(seg_cc[val%10]); // 输出段码set_digit_ON(pos);          // 打开位delay_ms(2);val /= 10;}}

1.1.6 快速排查清单

不亮:检查公共端电压、限流电阻(每段330 Ω~1 kΩ)。

乱亮:段码高低反了(把共阴/共阳搞反)。

闪烁:动态扫描频率太低,提高刷新或加定时器中断。

2例子1:控制单个数码管显示0-9

实现功能:循环显示0-9

本质:控制I/O口高低电平点亮数码管对应的LED灯段

2.1电路原理图

2.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>连接数码管/排阻

复位电路

晶振电路

排阻

单个数码管

2.2控制程序

2.2.1控制程序步骤

库文件

数字(0-9)对应16进制

延时函数

主程序(0-9循环显示)

2.2.3源代码

//循环显示0-9#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//主程序void main(){uchar i=0;P0=0x00;while(1){ /* for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);}  //注:另一方案 */P0=~DSY_CODE[i];i=(i+1)%10;DelayMS(300);}}

3例子2:8个数码管控制显示

实现功能:数码管从左到右依次滚动显示0~7,每次仅循环选通一只数码管

本质:控制I/O口高低电平点亮数码管对应的LED灯段

2.1电路原理图

2.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>数码管段(ABCDEFG/DP)

P2.0-P2.7—>三极管数码管驱动电路

1-8(数码管位)—>三极管数码管驱动电路

复位电路

晶振电路

8数码管

三极管数码管驱动电路

3.2控制程序

3.2.1控制程序步骤

库文件

引脚输出对应16进制码值

主程序(数码管从左到右依次滚动显示0~7,每次仅循环选通一只数码管)

3.2.2源代码

//功能:数码管从左到右依次滚动显示0~7,每次仅循环选通一只数码管#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//主程序void main(){uchar i,wei=0x80;while(1){for(i=0;i<8;i++){P2=0xff;      //关闭显示wei=_crol_(wei,1);P0=DSY_CODE[i];  //发送数字段码P2=wei;               //发送位码DelayMS(300);}}}

4例子3:8只数码管闪烁显示数字串

实现功能:8只数码管闪烁显示数字串(数码管闪烁显示由0~7构成的一串数字)

本质:控制I/O口高低电平点亮数码管对应的LED灯段

4.1电路原理图

4.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>数码管段(ABCDEFG/DP)

P2.0-P2.7—>三极管数码管驱动电路

1-8(数码管位)—>三极管数码管驱动电路

复位电路

晶振电路

8数码管

三极管数码管驱动电路

4.2控制程序

4.2.1控制程序步骤

库文件

段码表和位码表定义

延时函数

主程序(8只数码管闪烁显示数字串)

4.2.2源代码

//功能:8只数码管闪烁显示数字串(数码管闪烁显示由0~7构成的一串数字)本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。#include<reg51.h>#define uchar unsigned char#define uint unsigned int//段码表uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//位码表uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//主程序void main(){uchar i,j;while(1){for(i=0;i<30;i++){      for(j=0;j<8;j++){P0=0xff;P0=DSY_CODE[j];  //发送段码P2=DSY_IDX[j];        //发送位码DelayMS(2);}}P2=0x00;   //关闭所有数码管并延时DelayMS(1000);}}

5例子4:数码管滚动显示数字串

实现功能:数码管向左滚动显示3个字符构成的数字串

本质:控制I/O口高低电平点亮数码管对应的LED灯段

5.1电路原理图

5.1.1电路组成及接线

名称

接线

AT89C51单片机

XTAL1/XTAL2—>连接晶振电路

RST—>连接复位电路

P0.0-P0.7—>数码管段(ABCDEFG/DP)

P2.0-P2.7—>三极管数码管驱动电路

1-8(数码管位)—>三极管数码管驱动电路

复位电路

晶振电路

8数码管

三极管数码管驱动电路

5.2控制程序

5.2.1控制程序步骤

库文件

段码表定义

延时函数

主程序(8只数码管闪烁显示数字串并进行移位)

5.2.2源代码

//功能:数码管向左滚动显示3个字符构成的数字串#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//段码表uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏)uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//主程序void main(){uchar i,j,k=0,m=0x80;while(1){       //刷新若干次,保持一段时间的稳定显示for(i=0;i<15;i++){      for(j=0;j<8;j++){       //发送段码,采用环形取法,从第k个开始取第j个P0=0xff;P0=DSY_CODE[Num[(k+j)%11]]; m=_crol_(m,1);P2=m;      //发送位码DelayMS(2);}}k=(k+1)%11;    //环形队列首支针k递增,Num下标范围0~10,故对11取余}}

  7 硬件工程师笔试面试相关文章链接(部分链接)

更多文章可前往主页观看

1、硬件工程师笔面试真题汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/140742900?spm=1011.2415.3001.5331硬件工程师笔试面试高频考点汇总——(2025版)_电容或者电感对锁存器的影响-CSDN博客https://blog.csdn.net/XU157303764/article/details/1488349782、硬件工程师笔试面试汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/1419048583、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)_【【硬件工程师炼成之路】器件篇(更新中。。。)-CSDN博客https://blog.csdn.net/XU157303764/article/details/142316204

硬件工程师笔记——电子器件汇总大全-CSDN博客https://blog.csdn.net/XU157303764/article/details/147342935?spm=1011.2415.3001.5331Multisim14使用教程详尽版--(2025最新版)-CSDN博客https://blog.csdn.net/XU157303764/article/details/147197406?spm=1011.2415.3001.5331

http://www.dtcms.com/a/360583.html

相关文章:

  • leetcode 260 只出现一次的数字III
  • 你的数据是如何被保护的?
  • Linux系统的进程管理
  • vue3+vite+ts 发布npm 组件包
  • 查看所有装在c盘软件的方法
  • [知识点记录]SQLite 数据库和MySQL 数据库有什么区别?
  • DuckDB 内嵌分析:ABP 的「本地 OL盘快照」
  • 福彩双色球第2025100期号码推荐
  • 福彩双色球第2025100期数据统计
  • 吴恩达机器学习作业十一:异常检测
  • Docker 容器(二)
  • 机器视觉学习-day15-图像轮廓特征查找
  • Wi-Fi技术——OSI模型
  • 深度学习量化双雄:PTQ 与 QAT 的技术剖析与实战
  • 开源协作白板 – 轻量级多用户实时协作白板系统 – 支持多用户绘图、文字编辑、图片处理
  • globals() 小技巧
  • C++ 模板全览:从“非特化”到“全特化 / 偏特化”的完整原理与区别
  • Prometheus之启用--web.enable-remote-write-receiver
  • 基于muduo库的图床云共享存储项目(三)
  • 前端常见安全问题 + 防御方法 + 面试回答
  • 「数据获取」《中国工会统计年鉴》(1991-2013)(获取方式看绑定的资源)
  • 【人工智能99问】Qwen3简介(33/99)
  • 浅析NVMe协议:DIF
  • 多线程使用场景一(es数据批量导入)
  • 林曦词典|老死不相往来
  • 洛谷p2392kkksc03考前临时抱佛脚 详解(回溯,深度搜索法)
  • 大模型参数到底是什么?
  • CUDA与图形API的深度互操作:解锁GPU硬件接口的真正潜力
  • C++内存序不迷茫:从CPU缓存一致性理解Memory Order
  • 如何将剪贴板内容存为文件?Paste As File支持文本/图片转换