在下面的代码中 ptiveValue = value 和 d1 = value 所以 d2 总是 0 然后在你的循环中你有 for (i=0; i<= 3||res[i]!='\0'; i++) 这应该是for (i=0; i<= 3&&res[i]!='\0'; i++) 所以它总是打印出缓冲区中剩下的内容而不是你想要的
错误代码:
if (cntd <= 4)
{
d2 = (unsigned int) abs((ptiveValue - d1) * 10000); // get 4 digits of real part
itoa1(d2, res, &cntreal);
for (i=0; i<= 3||res[i]!='\0'; i++)
{
wr_lcd_dr(res[i]);
}
}
固定代码
if (cntd <= 4)
{
// get 4 digits of real part
d2 = (unsigned int) ((ptiveValue - (unsigned int)(d1)) * 10000);
itoa1(d2, res, &cntreal);
for (i=0; (i<= 3) && (res[i]!='\0'); i++)
{
wr_lcd_dr(res[i]);
}
}
您还覆盖了缓冲区并可能产生奇怪的行为。
unsigned short Adcinb[32];
for (i = 0; i <= 63; i++)
Adcinb[i] = 3180;
应该
unsigned short Adcinb[32];
for (i = 0; i < 32; i++)
Adcinb[i] = 3180;