void DisplayNumber(uchar X, uchar Y, unsigned long number,uchar lenth) { unsigned char array[lenth+1]; unsigned char i; array[lenth] = 0; for (i = lenth; i>0; i--) { array[i-1] = number % 10 + '0'; number /= 10; } for (i = lenth ; i >= 0; i--) { if(array[i] == '0') { array[i] = ' '; } else { break; } } LCD_displaychar(X,Y,array); }u16 Check_Key() { u16 key_val; unsigned char row, col; unsigned int KEY_DOUT,tmp1, tmp2; unsigned int tmp; tmp1 = 0x0800; for(row=0; row<4; row++) //行扫描 { KEY_DOUT = 0X0f00; //输出全为1 KEY_DOUT-= tmp1; //依次输出一个为0 juzhen_gpiod =((juzhen_gpiod &0xf0ff)|KEY_DOUT); tmp1 >>=1; if((GPIO_ReadInputData(juzhen_duankou)&0xf000)<0xf000) //if((KEY_DIN & 0xF0) < 0xF0) //P2输入是否有一位为0 { tmp2 = 0x1000; //用于检测出哪一位为0 for(col=0; col<4; col++) //列扫描 { if(0x00 == (GPIO_ReadInputData(juzhen_duankou) & tmp2)) //找到等于0的列 { key_val = key_Map[row*4 + col];//获取键值 } tmp2 <<= 1; //右移1位 } } }显示任意数
时间: 2024-04-14 18:26:20 浏览: 175
要显示任意数字,你可以调用 `DisplayNumber` 函数,并传递所需的参数。例如,要显示数字 1234,你可以这样调用函数:
```c
DisplayNumber(1, 1, 1234, 4);
```
这将在 LCD 上的第一行第一列位置显示数字 1234。
请注意,`DisplayNumber` 函数假设你的 LCD 显示函数 `LCD_displaychar` 已经正确配置,并且可以显示适当的字符。
如果你在使用这个函数时遇到问题,或者有其他问题,请告诉我。我会尽力帮助你。
相关问题
void 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); }oid LCD_displaychar(unsigned int x,unsigned int y,unsigned char *dat)//X为行,Y为列 { unsigned int address; if(x==0) { x=0x80; }else if(x==1) { x=0x90; }else if(x==2) { x=0x88; }else if(x==3) { x=0x98; } address=x+y; write_cmd(address); while(*dat!='\0') { write_dat(*dat++); } }
在给定的代码中,`DisplayNumber`函数用于在LCD上显示一个数字。它接受参数X和Y表示数字显示的位置,number表示要显示的数字,lenth表示数字的位数。
函数首先创建一个名为`array`的字符数组,用于存储数字的每一位。然后,使用循环将每一位数字提取出来,并存储在`array`中。
接下来,函数从最高位开始检查`array`中的数字。如果某一位是0,则将其替换为空格字符。这是为了避免显示数字时出现前导零。
最后,函数调用`LCD_displaychar`函数来在LCD上显示`array`中的字符。
`LCD_displaychar`函数用于在指定位置(x, y)显示一个字符。它通过将行号x转换为相应的地址,并调用`write_cmd`函数将地址发送给LCD。然后,使用循环将字符数组`dat`中的字符一个一个地发送给LCD,直到遇到字符串结束符'\0'为止。
请注意,代码中存在一个错误:在第二个循环中,变量i应该递减(即i--),而不是递增(即i++)。修正这个错误后,代码应该能够正常工作。
如果你有进一步的问题,请随时提问。
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
根据你提供的代码,`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)` 将会正确地显示七个零。
希望这能帮助到你。如果你还有其他问题,请随时提问。
阅读全文