• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

OLED标准ASCII字符串显示函数重定义的问题

SingleYork 2016-12-13 浏览量:2490

如下图所示,是一组显示6*8一组标准ASCII字符串 显示的坐标(x,y),y为页范围0~7的代码

void OLED_P6x8Str(unsigned char x, y,unsigned char ch[])
{
unsigned char c=0,i=0,j=0;
while (ch[j]!='\0')
{
c =ch[j]-32;
if(x>126){x=0;y++;}
OLED_Set_Pos(x,y);
for(i=0;i<6;i++)
OLED_WrDat(F6x8[c][i]);
x+=6;
j++;
}

}

我现在要显示一个四位数,比如1234,我现在能想到的方法是一位一位显示,比如在(24,0)显示千位“1”,在(30,0)显示百位“2”,(36,0)显示十位“3”(42,0)显示个位“4”;

具体代码实现如下:

sswitch(InputVoltage/1000) //千位
{
case 0: OLED_P6x8Str(24+x,0+y,"0");break;
case 1: OLED_P6x8Str(24+x,0+y,"1");break;
case 2: OLED_P6x8Str(24+x,0+y,"2");break;
case 3: OLED_P6x8Str(24+x,0+y,"3");break;
case 4: OLED_P6x8Str(24+x,0+y,"4");break;
case 5: OLED_P6x8Str(24+x,0+y,"5");break;
case 6: OLED_P6x8Str(24+x,0+y,"6");break;
case 7: OLED_P6x8Str(24+x,0+y,"7");break;
case 8: OLED_P6x8Str(24+x,0+y,"8");break;
case 9: OLED_P6x8Str(24+x,0+y,"9");break;
default:break;
}
switch((InputVoltage%1000)/100) //百位
{
case 0: OLED_P6x8Str(30+x,0+y,"0");break;
case 1: OLED_P6x8Str(30+x,0+y,"1");break;
case 2: OLED_P6x8Str(30+x,0+y,"2");break;
case 3: OLED_P6x8Str(30+x,0+y,"3");break;
case 4: OLED_P6x8Str(30+x,0+y,"4");break;
case 5: OLED_P6x8Str(30+x,0+y,"5");break;
case 6: OLED_P6x8Str(30+x,0+y,"6");break;
case 7: OLED_P6x8Str(30+x,0+y,"7");break;
case 8: OLED_P6x8Str(30+x,0+y,"8");break;
case 9: OLED_P6x8Str(30+x,0+y,"9");break;
default:break;
}
switch((InputVoltage%100)/10) //十位
{
case 0: OLED_P6x8Str(36+x,0+y,"0");break;
case 1: OLED_P6x8Str(36+x,0+y,"1");break;
case 2: OLED_P6x8Str(36+x,0+y,"2");break;
case 3: OLED_P6x8Str(36+x,0+y,"3");break;
case 4: OLED_P6x8Str(36+x,0+y,"4");break;
case 5: OLED_P6x8Str(36+x,0+y,"5");break;
case 6: OLED_P6x8Str(36+x,0+y,"6");break;
case 7: OLED_P6x8Str(36+x,0+y,"7");break;
case 8: OLED_P6x8Str(36+x,0+y,"8");break;
case 9: OLED_P6x8Str(36+x,0+y,"9");break;
default:break;
}
switch(InputVoltage%10) //个位
{
case 0: OLED_P6x8Str(42+x,0+y,"0");break;
case 1: OLED_P6x8Str(42+x,0+y,"1");break;
case 2: OLED_P6x8Str(42+x,0+y,"2");break;
case 3: OLED_P6x8Str(42+x,0+y,"3");break;
case 4: OLED_P6x8Str(42+x,0+y,"4");break;
case 5: OLED_P6x8Str(42+x,0+y,"5");break;
case 6: OLED_P6x8Str(42+x,0+y,"6");break;
case 7: OLED_P6x8Str(42+x,0+y,"7");break;
case 8: OLED_P6x8Str(42+x,0+y,"8");break;
case 9: OLED_P6x8Str(42+x,0+y,"9");break;
default:break;
}

感觉这样写的话,一两个参数还好,如果参数多了,就有点费代码了,那么问题来了:


能不能将void OLED_P6x8Str(unsigned char x, y,unsigned char ch[])重定义,让我能直接OLED_P6x8Str(24+x,0+y,InputVoltage)​这样写就能在(24,0)开始到(41,0)的位置直接显示“1234”呢,这个函数要怎么改?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 先将电压用sprintf函数转换为str,在调用OLED_P6x8Str
    • 发布于 2016-12-13
    • 举报
    • 评论 1
    • 1
    • 0
SingleYork 回复了 shaoziyang:大神,能不能示范一下呢…… 回复

其他答案 数量:3
  • char ch[] = "1234";
    char x = 0;
    char y = 0;
    OLED_P6x8Str(x, y,ch[])​;
    可以这样写吧。





    • 发布于2016-12-13
    • 举报
    • 评论 1
    • 1
    • 0
SingleYork 回复了 630183258 :这样的话应该是可以的,但是现在问题是怎么把InputVoltage的值1234转换成字符串“1234”,主要就是这个问题,呵呵,因为InputVoltage的值是会变的 回复

  • OLED_P6x8Str_My(unsigned char x, y,unsigned char ch[])
    {
      unsigned char c[1];
      unsigned char i;
      int m=1000;
      for(i=0;i<4;i++)
      {
        *c=(char)(input/m)+48;
        OLED_P6x8Str(24+6*i+x,0+y,c);
        input%=m;
        m/=10;
      }
    }

    包裝一下就可囉

    OLED_P6x8Str_My(24+x,0+y,InputVoltage)​;
    
    
    收工

    • 发布于2016-12-13
    • 举报
    • 评论 0
    • 1
    • 0

  • shaoziyang所说,调用sprintf,直接将数值转换成了字符串,可以成功了,感谢大家的回答,具体实现如下:

    首先定义了一个数组,长度就是字符串的长度:

    u8 StringV01[4];​


    sprintf(StringV01, "%d", InputVoltage);
    OLED_P6x8Str(24+x,0+y,StringV01);


    然后就愉快的显示出来了!


    非常感谢!

    • 发布于2016-12-13
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

OLED标准ASCII字符串显示函数重定义的问题