|
//目的是讀取MCU的ID,并顯示在LCD上;
//這是原始代碼,直接調(diào)用就會(huì)出錯(cuò),此代碼是廠家提供的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文件的開頭,定義了一個(gè)字符串,比如:
u8 mcu_ID[7];
u8 mcu_id_asc[14];
之后,顯示就會(huì)出現(xiàn)亂碼。
調(diào)用原始代碼:
read_mcu_id(); //此函數(shù)中,已將7字節(jié)的ID換算成14個(gè)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ù)組,共計(jì)14字節(jié)
結(jié)果是ID號(hào)后邊出現(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,因?yàn)闆]有仿真器,只能一次又一次的下載測試,折騰許久,最終定位到問題出現(xiàn)在C文件的開頭定義了數(shù)組以及LCD_ShowString這個(gè)函數(shù)。。讀ID以及轉(zhuǎn)換到ASCII確定都沒有問題,
有誰遇到過這樣的問題?
|
|