51单片机驱动共阴极数码管显示0~9
51单片机驱动共阴极数码管显示0~9
文章目录
概要
项目采用共阴极单支数码管作为显示器件,通过单片机I/O口输出段选信号控制数码管段亮灭,配合延时函数实现数字0~9每隔1秒自动加1,并循环往复显示的功能。
硬件设计
1. 核心器件
- STC89C51/52单片机
- 共阴极单支数码管
- 10K排阻(用于P0口上拉)
- 单片机最小系统(晶振11.0592MHz、复位电路、电源电路)
2. 电路连接
- 数码管段选脚(a~g)直接连接单片机P0口(P0.0~P0.7);
- P0口并联10K排阻做上拉,保证数码管亮度正常;
- 数码管公共端接地(符合共阴极接法);
- 单片机VCC接5V,GND接地,晶振与复位电路按最小系统标准接法。
可参考下图电路连接:

软件设计
程序采用C语言编写,在Keil C51环境下编译,核心包含段码表、延时函数、数字循环自增三部分。
1. 设计思路
- 定义共阴极数码管0~9标准段码表;
- 编写毫秒级延时函数,实现1秒定时;
- 定义变量计数0~9,循环赋值给数码管并刷新。
2. 完整代码(带详细注释)
#include <reg52.h>// 包含51单片机寄存器定义的头文件,必须写
#include "delayms.h"// 包含毫秒级延时函数定义的头文件,必须写
//阴级数码段0-9的段码
unsigned char code seg_table[10] = {
0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F
};
void main(void)
{
unsigned char num;
while(1)
{
// 从 0 显示到 9
for(num = 0; num < 10; num++)
{
P0 = seg_table[num]; // P0输出段码
delay_ms(1000); // 延时,保持显示
}
}
}
编译下载
1.打开keil5项目工程,点击左上角的编译按键进行程序编译,编译结果显示0错误0警告就进行下一步的下载操作

2.打开proteus仿真工程,双击单片机进入配置页面,然后选择导入下载文件,最后点击OK,这样就下载好程序到单片机中了

3.效果演示:点击仿真运行按键,程序开始运行,数码管从0开始显示,每隔1秒自动加1,依次显示0→1→2→…→9,到达9后立即回到0,持续循环,显示稳定无闪烁。

小结
我们成功用单片机驱动了共阴极数码管,实现了0到9每隔一秒循环显示的效果,通过这次实验也掌握了数码管的基本接法、I/O口控制和简单延时程序的写法。
最后,我已经把本次实验的完整源码、Proteus仿真文件、工程文件都整理好啦,需要的同学直接复制链接到百度网盘自取下载:
链接: https://pan.baidu.com/s/1iWTMH6eLHeQVXDkhH_JIDg?pwd=2rd4 提取码: 2rd4
⚠️ 特别提醒:本项目资料仅用于学习与技术交流分享,严禁用于任何商业用途或二次开发售卖,感谢理解!
更多推荐



所有评论(0)