发 帖  
原厂入驻New
OLED标准ASCII字符串显示函数重定义
68 OLED
分享
如下图所示,是一组显示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]);
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
2020-5-22 05:55:25   评论 分享淘帖 邀请回答
3个回答
char ch[] = "1234";
char x = 0;
char y = 0;
OLED_P6x8Str(x, y,ch[])​;

可以这样写吧。







2020-5-22 09:01:13 评论

举报

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)​; 收工
2020-5-22 09:17:14 评论

举报

云汉达人

如shaoziyang所说,调用sprintf,直接将数值转换成了字符串,可以成功了,感谢大家的回答,具体实现如下:
首先定义了一个数组,长度就是字符串的长度:
u8 StringV01[4];​



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


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


非常感谢!
2020-5-22 09:36:45 评论

举报

只有小组成员才能发言,加入小组>>

267个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表