oid DisplayNumber(uchar X, uchar Y, unsigned long number,uchar lenth) { uchar array[11]; uchar i; array[lenth] = 0; for (i = lenth; i>0; i--) { array[i-1] = number % 10 + '0'; number /= 10; } for (i = lenth - 1 ; i > 0; i--) { if(array[i] == '0') { array[i] = ' '; } else { break; } } LCD_displaychar(X,Y,array); } DisplayNumber(1 ,1, 0,7); 为啥显示不出七个0而是显示1个0
时间: 2024-04-14 10:25:43 浏览: 19
根据你提供的代码,`DisplayNumber` 函数用于在指定的位置显示一个数字。函数首先将数字转换为字符串,并将字符串存储在 `array` 数组中。然后,函数会检查数组中的数字是否为零,并将其替换为空格字符。最后,函数调用 `LCD_displaychar` 函数来在 LCD 上显示字符数组。
根据你的代码,调用 `DisplayNumber(1, 1, 0, 7)` 来显示七个零。然而,问题出在你在 `DisplayNumber` 函数中的循环条件中。在第一个循环中,当 `i = lenth` 时,你将 `array[lenth]` 设置为 0。然而,由于数组索引是从 0 开始的,所以 `array[lenth]` 实际上是数组的第 `lenth+1` 个元素。这将导致在循环后面的代码中访问到 `array[lenth]` 时出现问题。为了解决这个问题,你可以将 `array` 数组的大小更改为 `lenth+1`。
另外,在第二个循环中,你将循环条件设置为 `i > 0`,这会导致最后一个元素无法被检测到并替换为空格字符。你可以将循环条件更改为 `i >= 0` 以包含最后一个元素。
以下是修正后的代码示例:
```c
void DisplayNumber(uchar X, uchar Y, unsigned long number, uchar length)
{
uchar array[length + 1];
uchar i;
array[length] = 0;
for (i = length; i > 0; i--)
{
array[i - 1] = number % 10 + '0';
number /= 10;
}
for (i = length; i >= 0; i--)
{
if (array[i] == '0')
{
array[i] = ' ';
}
else
{
break;
}
}
LCD_displaychar(X, Y, array);
}
DisplayNumber(1, 1, 0, 7);
```
通过以上修正,现在 `DisplayNumber(1, 1, 0, 7)` 将会正确地显示七个零。
希望这能帮助到你。如果你还有其他问题,请随时提问。