欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 单片机:实现数码管00盗99显示(附带源码)

单片机:实现数码管00盗99显示(附带源码)

2025/11/7 22:52:37 来源:https://blog.csdn.net/m0_61840987/article/details/144444853  浏览:    关键词:单片机:实现数码管00盗99显示(附带源码)

单片机实现数码管00到99显示

在嵌入式开发中,数码管是最常用的显示设备之一,特别适合用于显示数字信息。本项目的目标是利用8051单片机控制数码管实现数字显示,从00到99的循环显示。我们将通过按键或定时器来控制数字的增减,并通过数码管来显示数字。

一、项目需求

  1. 显示功能:在数码管上显示00到99之间的数字,并能循环显示。
  2. 控制功能:通过按键或者定时器的触发来更新数码管上的显示。
  3. 数码管连接:使用共阳数码管或共阴数码管显示数字。

二、系统设计

2.1 数码管显示原理

数码管由7个LED段组成,可以通过点亮不同的LED来显示数字。每个数码管的数字显示都可以通过指定不同的段码来实现。例如,数字0对应的段码为0x3F,数字1对应的段码为0x06,依此类推。

我们使用4位数码管显示两位数字,其中每一位显示0-9的数字,通过切换不同的显示位置,来显示一个完整的00-99范围内的数字。

2.2 硬件设计
  1. 单片机:使用8051单片机(如AT89C51)。
  2. 数码管:使用2位数码管,分别显示十位和个位数字。
  3. 按键控制:通过按键或定时器控制数字的增减。
2.3 软件设计
  • 数码管驱动:通过控制数码管的段选择和位选择来实现数字显示。
  • 数字更新:通过计数器控制数字的增减。
  • 按键控制:通过按键触发增减操作。

三、程序设计

3.1 数码管的段码定义

首先,我们需要定义每个数字的段码。常见的7段数码管(共阳或共阴)段码如下:

数字段码 (0x3F)
00x3F
10x06
20xB6
30x76
40xEE
50x7A
60xFA
70x06
80xFE
90x7E

其中,每个数字对应一个7段数码管的段码,我们将这些段码存储在数组中,便于后续的数字显示。

3.2 主程序框架
  1. 初始化数码管和按键。
  2. 控制数字的增减(按键控制或定时器中断)。
  3. 显示当前数字。
3.3 完整代码实现
#include <reg51.h>  // 包含8051单片机的寄存器定义// 数码管段码(共阴数码管)
unsigned char code digit_code[] = {0x3F, // 00x06, // 10xB6, // 20x76, // 30xEE, // 40x7A, // 50xFA, // 60x06, // 70xFE, // 80x7E  // 9
};// 数码管连接端口
#define DIGIT1 P0  // 十位数码管连接到P0口
#define DIGIT2 P1  // 个位数码管连接到P1口// 定义数码管选择信号
#define SELECT_DIGIT1 P2_0  // 控制十位数码管
#define SELECT_DIGIT2 P2_1  // 控制个位数码管// 当前数字
unsigned char tens = 0;  // 十位
unsigned char ones = 0;  // 个位// 延时函数(用来调整数码管刷新时间)
void delay_ms(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++) {for (j = 0; j < 120; j++) {// 空循环,产生延时}}
}// 数码管显示函数
void display_number(unsigned char tens, unsigned char ones) {// 显示十位DIGIT1 = digit_code[tens];  // 显示十位数SELECT_DIGIT1 = 0;  // 激活十位数码管delay_ms(5);        // 延时,避免闪烁SELECT_DIGIT1 = 1;  // 关闭十位数码管// 显示个位DIGIT2 = digit_code[ones];  // 显示个位数SELECT_DIGIT2 = 0;  // 激活个位数码管delay_ms(5);        // 延时,避免闪烁SELECT_DIGIT2 = 1;  // 关闭个位数码管
}// 主程序
void main() {while (1) {// 循环显示00到99for (tens = 0; tens < 10; tens++) {for (ones = 0; ones < 10; ones++) {display_number(tens, ones);  // 显示当前数字delay_ms(500);  // 延时500ms,每秒更新一次}}}
}

四、程序说明

  1. 数码管段码定义

    • digit_code[]数组存储了0到9的数字对应的段码。每个数字的段码对应7个LED的开关状态。
  2. 数码管显示函数

    • display_number(unsigned char tens, unsigned char ones)函数将十位和个位的数字分别显示在两个数码管上。通过控制不同的数码管位和段码来实现数字显示。
  3. 任务调度

    • 主程序中的for循环从00到99循环显示,通过更新tensones变量来显示不同的数字。
  4. 延时函数

    • delay_ms()用于延时,调整数码管的刷新时间。为了避免数码管闪烁,刷新时间不宜过短。

五、总结

通过本项目,我们使用8051单片机控制数码管显示00到99的数字。通过控制数码管的段码和位选择,我们可以显示任意数字。该项目不仅实现了数码管的基本显示功能,还通过延时函数和控制逻辑避免了显示的闪烁问题。

如果需要增加更多的功能,例如通过按键控制数字的增减,或者通过外部输入改变显示内容,可以在此基础上进一步扩展。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词