//目的是讀取MCU的ID,并顯示在LCD上;
//這是原始代碼,直接調用就會出錯,此代碼是廠家提供的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++;
}
}
//這是我后來改的,加了長度控制參數
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];
之后,顯示就會出現亂碼。
調用原始代碼:
read_mcu_id(); //此函數中,已將7字節的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轉換后ASC字符串數組,共計14字節
結果是ID號后邊出現無意義的亂碼
而新代碼的調用:
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,因為沒有仿真器,只能一次又一次的下載測試,折騰許久,最終定位到問題出現在C文件的開頭定義了數組以及LCD_ShowString這個函數。。讀ID以及轉換到ASCII確定都沒有問題,
有誰遇到過這樣的問題?
|