2013-04-17 38 views
0

寫整數使用這些功能,我無法整數寫入到LCD:S它顯示了一個很奇怪的屏幕 我剛纔添加下面的功能!請查一下 我說一切都需要我不能在LCD AVR

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

這裏沒有足夠的信息。你的'LCDWriteInt'函數是什麼樣的?你使用什麼液晶顯示器?它是否有數據表? 8位或32位?只是舉幾個例子。 – jerry

+0

void LCDWriteInt(int val,unsigned int field_length) \t char str [5] = {0,0,0,0,0}; \t int i = 4,j = 0; \t while(val) \t { \t str [i] = val%10; \t val = val/10; \t i--; \t} \t if(field_length == - 1) \t \t while(str [j] == 0)j ++; \t別的 \t \t J = 5- FIELD_LENGTH; \t if(val <0)LCDData(' - ');對於(i = j; i <5; i ++) \t \t { \t LCDData(48 + str [i]); \t} } – Nasr

+0

同樣,它是一個8位的部分或一個32位的部分?也就是說,sizeof(int)是什麼?無論哪種方式,您的價值太大,但解決方案取決於數據大小。你需要寫的最大數量有多大(絕對值)? – jerry

回答

1

我認爲功能是爲16位整數爲其最大值是65535寫入(5位 - 同str的長度[])。你給它的是6位數值,當它試圖寫入str [5]時,它首先溢出字符串,然後產生j = -1。

我的建議是要麼使用較小的整數(僅16位),或寫一樣,你給我們做同樣的事,值越大另一個功能。

最後,我不知道if(val < 0)LCDData(' - ')是否會在第一個while循環中覆蓋'val'後實際上正常工作。

+0

如果它是一個8位的AVR,那麼'int'實際上16位和問題(主之一,無論如何)是線'INT M = 952520;',雖然編譯器應該至少警告它。在這種情況下,如果數值實際上可以達到那麼高,那麼數據類型需要更改爲「long int」。 – jerry

0

使用itoa功能。這將幫助您將整數轉換爲字符串並在LCD上顯示。祝你好運!