我无法在LCD AVR中写入整数

时间:2013-04-17 17:02:53

标签: avr

我不能使用这些函数将整数写入LCD:它在屏幕上显示奇怪的东西 我刚刚添加了下面的功能!请检查一下 我添加了所需的一切

    my_delay(1000);
        LCDWriteStringXY(0,0,"Welcome..");
        my_delay(1000);
        LCDWriteStringXY(0,0,"Welcome...");
        my_delay(1000);
            LCDClear();
            LCDWriteStringXY(4,0,"Testing");
            LCDGotoXY(2,1);

            int m=952520;
            LCDWriteInt(m,6);//I can not write it!!!

void LCDWriteInt(int val,unsigned int field_length)
{


    char str[5]={0,0,0,0,0};
    int i=4,j=0;
    while(val)
    {
    str[i]=val%10;
    val=val/10;
    i--;
    }
    if(field_length==-1)
        while(str[j]==0) j++;
    else
        j=5-field_length;

    if(val<0) LCDData('-');
    for(i=j;i<5;i++)
    {
    LCDData(48+str[i]);
    }
}

2 个答案:

答案 0 :(得分:1)

我认为该函数是为16位整数编写的,其最大值为65535(5位 - 与str []的长度相同)。你给它6位数值,当它尝试写入str [5]时首先超出字符串,然后产生j = -1。

我的建议是使用较小的整数(仅限16位),或者编写另一个函数,就像你向我们展示的函数一样,为更大的值做同样的事情。

最后,我不知道if(val&lt; 0)LCDData(&#39; - &#39;)是否真的能够正常工作,因为你覆盖了&#39; val&#39;在第一个while循环中。

答案 1 :(得分:0)

使用itoa功能。这将帮助您将整数转换为字符串并在lcd上显示。祝你好运!