標(biāo)題:
一個單片機(jī)顯示字符串的問題 讀取MCU的ID 并顯示在LCD上
[打印本頁]
作者:
名字不是重點
時間:
2022-3-31 02:12
標(biāo)題:
一個單片機(jī)顯示字符串的問題 讀取MCU的ID 并顯示在LCD上
//目的是讀取MCU的ID,并顯示在LCD上;
//這是原始代碼,直接調(diào)用就會出錯,此代碼是廠家提供的demo
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode) //
{
while(*p!='\0')
{
LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
x+=sizey/2;
p++;
}
}
//這是我后來改的,加了長度控制參數(shù)
void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 fc,u16 bc,u8 sizey,u8 mode,u8 len)
{
u8 i;
for(i=0;i<len;i++)
{
LCD_ShowChar(x,y,*p,fc,bc,sizey,mode);
x+=sizey/2;
p++;
}
}
原始代碼顯示正常,但在main.C文件的開頭,定義了一個字符串,比如:
u8 mcu_ID[7];
u8 mcu_id_asc[14];
之后,顯示就會出現(xiàn)亂碼。
調(diào)用原始代碼:
read_mcu_id(); //此函數(shù)中,已將7字節(jié)的ID換算成14個ASCII碼了。
LCD_ShowString(0,120,"MCU ID is:",RED,WHITE,24,0);
LCD_ShowString(0,144,mcu_id_asc,BLUE,WHITE,24,0);//mcu_id_asc是ID轉(zhuǎn)換后ASC字符串?dāng)?shù)組,共計14字節(jié)
結(jié)果是ID號后邊出現(xiàn)無意義的亂碼
而新代碼的調(diào)用:
read_mcu_id();
LCD_ShowString(0,120,"MCU ID is:",RED,WHITE,24,0,10);//加入了長度控制
LCD_ShowString(0,144,mcu_id_asc,BLUE,WHITE,24,0,14);
則顯示正常!
用的MCU是STC15F2K60s2,顯示屏用的是S7789的TFTLCD,因為沒有仿真器,只能一次又一次的下載測試,折騰許久,最終定位到問題出現(xiàn)在C文件的開頭定義了數(shù)組以及LCD_ShowString這個函數(shù)。。讀ID以及轉(zhuǎn)換到ASCII確定都沒有問題,
有誰遇到過這樣的問題?
作者:
lkc8210
時間:
2022-3-31 09:45
因為mcu_id_asc[14]是字符陣列而不是字符串
字符陣列和字符串的分別就是字符串在定義的時候會在最后自動加上'/0'
對應(yīng)了原代碼的while(*p!='\0')
當(dāng)你用原代碼來顯示mcu_id_asc時
原代碼檢測不到'\0',就一直p++
結(jié)果就把其他地址的數(shù)值也打印出來
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1