自己写printf函数,遇到问题。请大家帮忙瞧瞧~

2020-02-09 09:16发布

没写完呢。现在只是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);
        //返回长度
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
backup
2020-02-09 20:05
sprintf函数很好用。
先用sprintf把要输出的内容格式化成字符串,而后根据具体设备输出字符即可,非常方便,代码的移植也很方便。
你试试?

一周热门 更多>