文章目录
- 1.数码管显示6个9
-
- [2 数码管显示2个7(一头一尾)](#2 数码管显示2个7(一头一尾))
-
- [2.1 效果图](#2.1 效果图)
- [2.2 代码](#2.2 代码)
- 3.数码管轮播显示6位
-
- [3.1 效果图](#3.1 效果图)
- [3.2 代码](#3.2 代码)
- 4.数码管轮播显示2位
-
- 7.数位管闪烁显示
-
- [8. 6位数码管依次显示数字11.12.13【动态显示】](#8. 6位数码管依次显示数字11.12.13【动态显示】)
-
- [8.1 效果图](#8.1 效果图)
- [8.2 代码](#8.2 代码)
1.数码管显示6个9
1.1效果图
1.2代码
c
复制代码
#include<reg52.h> // 头文件
// 定义锁存器控制引脚
sbit dula=P3^4; // 锁存器U2(段选)
sbit wela=P1^6; // 锁存器U2(位选)
// 共阴极 0~9
//unsigned char code seg_table[] = {
// 0x3F, // 0
// 0x06, // 1
// 0x5B, // 2
// 0x4F, // 3
// 0x66, // 4
// 0x6D, // 5
// 0x7D, // 6
// 0x07, // 7
// 0x7F, // 8
// 0x6F // 9
//};
// 主函数
void main()
{
// 1.位选控制
wela=1; // 打开位选
P0=0xc0; //1100 00 00
wela=0; // 关闭位选
// 2.段选控制
dula=1; // 打开段选
P0=0x6f; // 数码管显示"7" 0110 1111
dula=0; // 关闭段选
// 3.保持
while(1);
}
2 数码管显示2个7(一头一尾)
2.1 效果图
2.2 代码
c
复制代码
#include<reg52.h> // 头文件
// 定义锁存器控制引脚
sbit dula=P3^4; // 锁存器U2(段选)
sbit wela=P1^6; // 锁存器U2(位选)
// 共阴极 0~9
//unsigned char code seg_table[] = {
// 0x3F, // 0
// 0x06, // 1
// 0x5B, // 2
// 0x4F, // 3
// 0x66, // 4
// 0x6D, // 5
// 0x7D, // 6
// 0x07, // 7
// 0x7F, // 8
// 0x6F // 9
//};
// 主函数
void main()
{
// 1.位选控制
wela=1; // 打开位选
P0=0xde; //1101 1110
wela=0; // 关闭位选
// 2.段选控制
dula=1; // 打开段选
P0=0x07; // 数码管显示"7" 0110 1111
dula=0; // 关闭段选
// 3.保持
while(1);
}
3.数码管轮播显示6位
3.1 效果图
3.2 代码
c
复制代码
#include<reg52.h> // 头文件
#define uchar unsigned char
#define uint unsigned int
// 定义锁存器控制引脚
sbit dula=P3^4; // 锁存器U2(段选)
sbit wela=P1^6; // 锁存器U3(位选)
// 共阴极数码管段码表
uchar code seg_code[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 延时函数
void delay(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
// 数码管展示函数
void display_digit(uchar digit) {
P0 = seg_code[digit]; // 发送数字对应的段码
dula=1; // 打开段选
delay(5); // 稳定信号
dula=0; // 关闭段选
}
// 主函数
void main()
{
uchar digit;
while(1)
{
// 1.位选控制
wela=1; // 打开位选
P0=0xc0; // 位选2个数码管 1111 0011
wela=0; // 关闭位选
// 2.段选控制
for(digit = 0; digit < 10; digit++) // 轮流显示0到9
{
display_digit(digit); // 显示当前数字
delay(500); // 适当延时,以便观察每个数字
}
}
}
4.数码管轮播显示2位
效果图
代码
c
复制代码
#include<reg52.h> // 头文件
#define uchar unsigned char
#define uint unsigned int
// 定义锁存器控制引脚
sbit dula=P3^4; // 锁存器U2(段选)
sbit wela=P1^6; // 锁存器U3(位选)
// 共阴极数码管段码表
uchar code seg_code[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 延时函数
void delay(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
// 数码管展示函数
void display_digit(uchar digit) {
P0 = seg_code[digit]; // 发送数字对应的段码
dula=1; // 打开段选
delay(5); // 稳定信号
dula=0; // 关闭段选
}
// 主函数
void main()
{
uchar digit;
while(1)
{
// 1.位选控制
wela=1; // 打开位选
P0=0xf3; // 位选2个数码管 1111 0011
wela=0; // 关闭位选
// 2.段选控制
for(digit = 0; digit < 10; digit++) // 轮流显示0到9
{
display_digit(digit); // 显示当前数字
delay(500); // 适当延时,以便观察每个数字
}
}
}
# 5.6位数码管依次显示数字0-5【动态显示】
## 5.1效果图

## 5.2代码
```c
#include <reg52.h> // 头文件 ```c
#define uchar unsigned char
#define uint unsigned int
// 定义锁存器控制引脚
sbit dula = P3^4; // 段选锁存器U2
sbit wela = P1^6; // 位选锁存器U3
// 数码管的段码表(定义0-9的段码)
uchar code TableDula[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 数码管显示位码,对应第1到第6个数码管(需要将2进制转换成16进制)
uchar code TableWela[] = {
// 补充代码
0xfe,// 1111 1110 -> 第1位(P0.0 置低,其它为高)=> 选中第1位数码管
0xfd,// 1111 1101 -> 第2位(P0.1 置低)=> 选中第2位数码管
0xfb,// 1111 1011 -> 第3位(P0.2 置低)=> 选中第3位数码管
0xf7,// 1111 0111 -> 第4位(P0.3 置低)=> 选中第4位数码管
0xef,// 1110 1111 -> 第5位(P0.4 置低)=> 选中第5位数码管
0xdf// 1101 1111 -> 第6位(P0.5 置低)=> 选中第6位数码管
};
// 延时函数
void delay(uchar x)
{
uchar j;
while(x--)
{
for(j=0;j<125;j++);
}
}
// 主函数
void main() {
uchar i;
while(1) {
for(i = 0; i < 6; i++) {
P0 = 0x00; // 清空之前的输出
dula = 0;
wela = 0;
P0 = TableWela[i]; // 先送位码,依次选中1-6位数码管
wela = 1; // 锁存位码
wela = 0;
P0 = TableDula[i]; // 再送段码,第1个数码管显示0,第2个数码管显示1...
dula = 1; // 锁存段码
dula = 0;
delay(2); // 保持一段时间
}
}
}
复制代码
# 6. 如何使数码管依次显示1-6
## 6.1效果图

## 6.2代码
```c
#include <reg52.h> // 头文件 ```c
#define uchar unsigned char
#define uint unsigned int
// 定义锁存器控制引脚
sbit dula = P3^4; // 段选锁存器U2
sbit wela = P1^6; // 位选锁存器U3
// 数码管的段码表(定义0-9的段码)
uchar code TableDula[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 数码管显示位码,对应第1到第6个数码管(需要将2进制转换成16进制)
uchar code TableWela[] = {
// 补充代码
0xfe,// 1111 1110 -> 第1位(P0.0 置低,其它为高)=> 选中第1位数码管
0xfd,// 1111 1101 -> 第2位(P0.1 置低)=> 选中第2位数码管
0xfb,// 1111 1011 -> 第3位(P0.2 置低)=> 选中第3位数码管
0xf7,// 1111 0111 -> 第4位(P0.3 置低)=> 选中第4位数码管
0xef,// 1110 1111 -> 第5位(P0.4 置低)=> 选中第5位数码管
0xdf// 1101 1111 -> 第6位(P0.5 置低)=> 选中第6位数码管
};
// 延时函数
void delay(uchar x)
{
uchar j;
while(x--)
{
for(j=0;j<125;j++);
}
}
// 主函数
void main() {
uchar i;
while(1) {
for(i = 0; i < 6; i++) {
P0 = 0x00; // 清空之前的输出
dula = 0;
wela = 0;
P0 = TableWela[i]; // 先送位码,依次选中1-6位数码管
wela = 1; // 锁存位码
wela = 0;
P0 = TableDula[i+1]; // 再送段码,第1个数码管显示0,第2个数码管显示1...
dula = 1; // 锁存段码
dula = 0;
delay(2); // 保持一段时间
}
}
}
7.数位管闪烁显示
7.1效果图
7.2代码
c
复制代码
#include <reg52.h> // 头文件 ```c
#define uchar unsigned char
#define uint unsigned int
// 定义锁存器控制引脚
sbit dula = P3^4; // 段选锁存器U2
sbit wela = P1^6; // 位选锁存器U3
// 数码管的段码表(定义0-9的段码)
uchar code TableDula[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 数码管显示位码,对应第1到第6个数码管(需要将2进制转换成16进制)
uchar code TableWela[] = {
// 补充代码
0xfe,// 1111 1110 -> 第1位(P0.0 置低,其它为高)=> 选中第1位数码管
0xfd,// 1111 1101 -> 第2位(P0.1 置低)=> 选中第2位数码管
0xfb,// 1111 1011 -> 第3位(P0.2 置低)=> 选中第3位数码管
0xf7,// 1111 0111 -> 第4位(P0.3 置低)=> 选中第4位数码管
0xef,// 1110 1111 -> 第5位(P0.4 置低)=> 选中第5位数码管
0xdf// 1101 1111 -> 第6位(P0.5 置低)=> 选中第6位数码管
};
// 延时函数
void delay(uchar x)
{
uchar j;
while(x--)
{
for(j=0;j<125;j++);
}
}
void all_off(void)
{
P0 = 0x00;
dula = 1; dula = 0;
P0 = 0x00;
wela = 1; wela = 0;
}
// 主函数
void main() {
uchar i;
while(1) {
for(i = 0; i < 6; i++) {
P0 = 0x00; // 清空之前的输出
P0 = TableWela[i]; // 先送位码,依次选中1-6位数码管
wela = 1; // 锁存位码
wela = 0;
delay(500);
P0 = TableDula[i+1]; // 再送段码,第1个数码管显示0,第2个数码管显示1...
dula = 1; // 锁存段码
dula = 0;
delay(100)
// 保持一段时间
}
}
}
8. 6位数码管依次显示数字11.12.13【动态显示】
8.1 效果图
8.2 代码
c
复制代码
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula = P3^4; // 段选锁存器
sbit wela = P1^6; // 位选锁存器
// 数码管的段码表(0~9)
uchar code TableDula[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
// 数码管段码表(0~9,带小数点)
uchar code TableDulaPoint[] = {
0xBF, // 0. => 10111111
// 补充代码
0x86,// 1. => 10000110
0xDB,// 2. => 1101 1011
0xCF,// 3. => 11001111
0xE6,// 4. => 11100110
0xED,// 5. => 11101101
0xFD,// 6. => 11111101
0x87,// 7. => 10000111
0xFF,// 8. => 11111111
0xEF// 9. => 11101111
};
// 数码管显示位码,对应第1到第6个数码管
uchar code TableWela[] = {
0xfe, // 1111 1110 -> 第1位(P0.0 置低,其它为高)=> 选中第1位数码管
0xfd, // 1111 1101 -> 第2位(P0.1 置低)=> 选中第2位数码管
0xfb, // 1111 1011 -> 第3位(P0.2 置低)=> 选中第3位数码管
0xf7, // 1111 0111 -> 第4位(P0.3 置低)=> 选中第4位数码管
0xef, // 1110 1111 -> 第5位(P0.4 置低)=> 选中第5位数码管
0xdf // 1101 1111 -> 第6位(P0.5 置低)=> 选中第6位数码管
};
// 延时函数
void delay(uchar x)
{
uchar j;
while(x--)
{
for(j = 0; j < 125; j++);
}
}
void main() {
uchar i;
// 显示数据:对应的数字内容
uchar displayData[6] = {1, 3, 1, 4, 1, 5};
// 小数点标志位:1表示该位需要小数点
uchar pointFlag[6] = {0, 1, 0, 1, 0, 0}; // 第2位和第4位显示带小数点
while(1) {
for(i = 0; i < 6; i++) {
P0 = 0x00; // 清除显示
dula = 0;
wela = 0;
// 位选
P0 = TableWela[i];
wela = 1;
wela = 0;
// 段码:判断是否需要小数点
if(pointFlag[i] == 1)
{
P0 = TableDulaPoint[displayData[i]];
}
else
{
P0 = TableDula[displayData[i]];
}
dula = 1;
dula = 0;
delay(2); // 稍作延时
}
}
}