//目的是读取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确定都没有问题,
有谁遇到过这样的问题?
|