没写完呢。现在只是printf(0,0,0,"汉字ABC字母好使");这样的好使
char a = 'a';
然后如果printf(0,0,0,"A is %c", a);在LCD上显示这中的话,就找不到a这个参数。
我怀疑也是指针的问题,但是我想不出来哪的问题了!!
请大虾们帮我看看~
void printf(U8 addx, U8 addy, U8 mode, const rom char * format, ...)
{
char cTemp;
U8 posX = addx;
U8 posY = addy;
va_list ap;
va_start(ap, mode);
for(cTemp = *format; cTemp; cTemp = *++format)
{
if(cTemp == '%')//特殊格式符
{
cTemp = *++format;
switch(cTemp)
{
case 'd'://10进制有符号整数
break;
case 'u'://10进制无符号整数
break;
case 'x'://16进制无符号整数
case 'X':
showNum(posX, posY, mode, '0');
updatePos(&posX, &posY, 1);
showNum(posX, posY, mode, 'x');
updatePos(&posX, &posY, 1);
break;
case 'f'://浮点数
case 'F':
break;
case 'c'://单个字符,指字母和数字,标点
{
char temp = va_arg(ap, char);//这个地方找不到下一个参数,跟踪仿真的时候temp都等于0x00
showNum(posX, posY, mode, temp);
updatePos(&posX, &posY, 1);
}
break;
case 's'://字符串,半角
break;
case 'S'://宽字符,全角,指汉字
break;
}
}
else if(cTemp == '/')//打印特殊符号
{
}
else//不是格式符
{
cTemp = *++format;
if(cTemp > 0x80)//说明是个汉字
{
U16 hz1 = 0;
U16 hz2 = 0;
format--;
hz1 = cTemp & 0xff;//必须这么写,否则计算错误
hz2 = *format & 0xff;
hz1 = (hz1 << 8);
hz1 = hz1 & 0xff00 | hz2;
showChnn(posX, posY, mode, hz1);
format++;
updatePos(&posX, &posY, 2);//因为是汉字所以占用两个8位
}
else//说明是个字母或者符号
{
cTemp = *--format;
showNum(posX, posY, mode, cTemp);
updatePos(&posX, &posY, 1);//字母或者符号占用1位
}
}
}
va_end(ap);
//返回长度
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
先用sprintf把要输出的内容格式化成字符串,而后根据具体设备输出字符即可,非常方便,代码的移植也很方便。
你试试?
一周热门 更多>