数码管为动态数码管,将上面代码进行修改
时间: 2024-02-05 11:14:08 浏览: 77
数码管动态
好的,下面是修改后的代码:
```arduino
int num[10][7] = { // 数字0~9的数码管编码
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} // 9
};
int digitPins[4] = {2, 3, 4, 5}; // 数码管位选引脚
int segmentPins[7] = {6, 7, 8, 9, 10, 11, 12}; // 数码管段选引脚
void setup() {
// 初始化引脚
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH); // 高电平表示不选中该位
}
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW); // 低电平表示不亮该段
}
}
void loop() {
int number = 1234; // 要显示的数字
for (int i = 0; i < 4; i++) {
digitalWrite(digitPins[i], LOW); // 低电平表示选中该位
for (int j = 0; j < 7; j++) {
digitalWrite(segmentPins[j], num[number % 10][j]); // 根据数码管编码控制段选引脚输出
}
delay(5); // 稍微延时一下,使数字更加稳定
digitalWrite(digitPins[i], HIGH); // 高电平表示不选中该位
number /= 10; // 取下一位数字
}
}
```
修改的主要内容是将静态数码管改为动态数码管。动态数码管的原理是在很短的时间内依次点亮每一位数码管,使得人眼无法感知到闪烁,从而显示多位数字。在代码中,我们使用一个循环依次点亮每一位数码管,然后再根据要显示的数字控制每一位数码管的段选引脚输出。这里我们采用了一个简单的取模运算和除法运算来得到每一位数字。同时,我们在每一位数字显示完毕后稍微延时一下,使数字更加稳定。
阅读全文