arduino控制数码管用到millis()函数数码管显示数值十位显示有误但十位的计算公式没有错误的原因
时间: 2024-04-21 08:25:24 浏览: 24
有可能是因为在使用 `millis()` 函数时没有正确处理时间计算。
首先,确保你的代码中 `millis()` 函数的调用频率不会导致数码管的显示出现问题。如果你调用 `millis()` 函数的频率很高,可能会导致计时器溢出,从而导致数码管显示的数值出现错误。
其次,检查你的计算公式是否正确。如果你的计算公式没有错误,那么可能是因为在计算的过程中发生了类型转换错误,导致结果出现了偏差。
最后,你可以检查你的代码中是否存在逻辑错误。例如,可能会出现十位计算时,代码中使用了错误的变量或者参数,导致了数码管显示出现了问题。
总之,要解决这个问题,你需要仔细检查你的代码,确保计算公式正确,`millis()` 函数的调用频率合适,以及代码逻辑没有错误。
相关问题
arduino控制数码管用到millis()函数数码管显示数值十位显示有误原因
可能是因为您的代码中没有正确处理十位数的显示。您可以尝试使用模数运算符(%)来获取十位数,并将其显示在数码管上。以下是示例代码:
```
// 定义数码管引脚
int digitPins[] = {2, 3, 4, 5};
int segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
// 定义计时器
unsigned long previousMillis = 0;
const long interval = 1000; // 1秒钟更新一次数码管显示
// 定义要显示的数字
int number = 123;
void setup() {
// 初始化数码管引脚
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], HIGH);
}
for (int i = 0; i < 8; i++) {
pinMode(segmentPins[i], OUTPUT);
digitalWrite(segmentPins[i], LOW);
}
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// 获取十位数
int tens = (number / 10) % 10;
// 在第二位数码管上显示十位数
digitalWrite(digitPins[1], LOW);
displayNumber(tens);
digitalWrite(digitPins[1], HIGH);
}
}
// 显示数字
void displayNumber(int num) {
// 数码管共阴极,需要将数字转换为共阳极的形式
byte digits[] = {
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B10111110, // 6
B11100000, // 7
B11111110, // 8
B11110110 // 9
};
for (int i = 0; i < 8; i++) {
digitalWrite(segmentPins[i], bitRead(digits[num], i));
}
}
```
请注意,在`loop()`函数中,我们使用`millis()`函数来定时更新数码管显示。在`displayNumber()`函数中,我们将数字转换为共阳极的形式,并将其显示在数码管上。通过使用模数运算符来获取十位数,我们可以保证正确地显示数字。
arduino控制数码管用到millis()函数数码管显示数值受初始值影响十位与初始值一致原因
在使用 millis() 函数来进行定时控制时,我们通常会记录一个初始时间值(比如 millis() 的返回值),然后通过计算当前时间与初始时间之间的时间差来确定是否需要执行某个操作。但是,如果我们在计算时间差时没有考虑到初始值对计算结果的影响,就可能会出现问题。
在你的情况下,可能是因为你在计算当前时间与初始时间之间的时间差时,没有考虑到十位数值与初始值一致的情况。比如,如果初始时间为 5000 毫秒,当前时间为 5010 毫秒,那么计算出来的时间差是 10 毫秒,而如果你的初始值为 5010,那么计算出来的时间差就是 0 毫秒,这就会导致你的数码管没有更新显示。
为了解决这个问题,你可以在计算时间差时,先将当前时间减去初始时间,然后再将得到的时间差除以你需要的时间间隔(比如每隔 1 秒更新一次数码管),这样就可以避免初始值对计算结果的影响了。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)