数码管介绍
- 当发光二极管被施加正向电压后,相应的段即被点亮,从而显示出不同的字符
- 七段数码管内部电路有两种连接方式,共阳型和共阴型, 51单片机使用共阳型
数码管的工作原理
数码管静态显示
- 是指利用1组段选引脚控制1位数码管。以第一位数码管中显示数字“6”为例,首先位定义P2.3引脚
sbit SegmentG1 = P2 ^ 3; // 定义数码管1
- 数字“6”的段码为0x41,因此将P0寄存器赋值为0x41,并且选中第一位数码管
P0 = 0x41; // 数码管1显示为数字6
SegmentG1 = 0; // 打开数码管1
- 由于51核心板上的数码管只有1组选段引脚。+,如果将其他位数码管同时点亮,则数码管所有位都显示统一数字。如果需要使用静态显示的方法显示多为不同的数字,则需要多组段选引脚
数码管动态显示
如果轮流点亮每位数码管,并在数码管熄灭与点亮之间的间隔中不断切换显示的数字,并且每位数码管的点亮与熄灭之间的时间间隔缩短至5ms…
实例与代码解析
- 包含头文件
#include <reg52.h>
- 位定义数码管
sbit SegmentG1 = P2 ^ 3; // 定义数码管1
sbit SegmentG2 = P2 ^ 2;
sbit SegmentG3 = P2 ^ 1;
sbit SegmentG4 = P2 ^ 0;
- 定义数码管显示数字
// 定义数码管显示数字0 - 9
static unsigned char s_arrNumber[] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
- 编写延时函数
static void DelayNms(int nms); // 内部函数声明
static void DelayNms(int nms)
{
unsigned int i, j;
for (i = 0; i < nms; i++)
{
for (j = 0; j < 123; j++)
{
}
}
}
- 编写主函数
void main()
{
while (1)
{
P0 = s_arrNumber[1]; // 数码管1显示为数字1
SegmentG1 = 0; // 打开数码管1
DelayNms(5); // 延时5ms
SegmentG1 = 1; // 关闭数码管1
P0 = s_arrNumber[2];
SegmentG2 = 0;
DelayNms(5);
SegmentG2 = 1;
P0 = s_arrNumber[3];
SegmentG3 = 0;
DelayNms(5);
SegmentG3 = 1;
P0 = s_arrNumber[4];
SegmentG4 = 0;
DelayNms(5);
SegmentG4 = 1;
}
}