51单片机将P2口连接8位一体共阴极数码管,段码接P2,位选接P1接位选。按照传统动态扫描方式实现数码管动态显示,先让其初始值显示为12345678,再进行加一操作C语言实现
时间: 2024-03-27 08:36:40 浏览: 53
好的,我理解了你的问题。以下是C语言代码实现:
```c
#include <reg51.h> // 51单片机头文件
// 数码管显示的字符数组,对应0~9的段码
unsigned char code LEDChar[] = {
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f // 9
};
// 位选的控制码,对应P1口的控制信号
unsigned char code LEDPos[] = {
0xfe, // 第1位
0xfd, // 第2位
0xfb, // 第3位
0xf7, // 第4位
0xef, // 第5位
0xdf, // 第6位
0xbf, // 第7位
0x7f // 第8位
};
void delay(unsigned int i) // 延时函数
{
while(i--);
}
void main()
{
unsigned char i, j, num[8] = {1, 2, 3, 4, 5, 6, 7, 8}; // num数组存储要显示的数字
while(1)
{
for(i=0; i<8; i++) // 依次显示每一位数码管
{
P1 = LEDPos[i]; // 控制P1口的信号,选择要显示的位
P2 = LEDChar[num[i]]; // 控制P2口的信号,选择要显示的数字
delay(500); // 延时一段时间,控制显示的速度
}
// 加一操作,每次将最后一位数字加一
j = 1;
while(num[8-j] == 9) // 如果最后一位数字是9,则进位
{
num[8-j] = 1;
j++;
}
num[8-j]++; // 最后一位数字加一
}
}
```
这段代码将P2口连接8位一体共阴极数码管,段码接P2,位选接P1。在主函数中,先将要显示的数字存储在num数组中,然后依次显示每一位数码管。每次循环结束后,将最后一位数字加一,实现加一操作。
阅读全文