怎样才能使OLED显示变量?
OLED_showString(10,2,"V=3.5m/s",16); //显示字符串问题:oled驱动程序显示字符串显示的是常亮或者固定的字符串,
我想要显示的数值是一个变量 编写一个数值转字符串函数,以你的原函数为例
float Speed_now = 3.5;
uint8_t String_buff;
OLED_showString(10, 2, Float2String(String_buff, Speed_now, 1), 16); 这里给出一个我写的Float2String函数原型及其实现
/**
* @brief单精度浮点数转字符串
* @paramnum:待转换的单精度浮点数
accuracy:转换精度
@ARG 精度值取大于7时无效
* @retval 转换完成的字符串首地址
@arg result[]
*/
uint8_t* Float2String(uint8_t* s_buff, float num, uint8_t accuracy) //ps:C标准输入输出库内有sprintf(...)浮点ect.数转字符串函数
{
uint32_t integer = 0; //整数
uint32_t decimal = 0; //小数
uint8_t num_temp = 0; //按位转换的结果缓冲
uint32_t multi_dec = 1; //小数倍乘
uint8_t point = 0; //转换结果下标
uint8_t trans_len = 0; //按位转换的结果长度
uint8_t trans_temp; //按位转换的结果数组缓冲
uint8_t accuracy_temp = accuracy; //转换精度备份
if (num < 0)
{
/* 若num小于零,前填零 */
num = -num;
s_buff = '-';
point++;
}
integer = (uint16_t) num; //取整数部分
while (accuracy--)
{
multi_dec *= 10; //取小数精度倍乘
}
decimal = (uint16_t)(multi_dec * (num - integer + 0.000001f)); //取小数部分
if (integer)
{
while (integer)
{
/* 将整数部分转换为倒位数组 */
num_temp = integer % 10;
trans_temp = num_temp + 48;
integer = (integer - num_temp) / 10;
trans_len++;
}
point += trans_len;
}
else
{
s_buff = '0';
point++;
}
for (; trans_len > 0; trans_len--)
{
/* 将倒位数组内容存放到转换结果 */
s_buff = trans_temp;
}
if (decimal)
{
s_buff = '.'; //补小数点
trans_len = 0;
while (decimal)
{
/* 将小数部分转换为倒位数组 */
num_temp = decimal % 10;
trans_temp = num_temp + 48;
decimal = (decimal - num_temp) / 10;
trans_len++;
}
while (trans_len < accuracy_temp)
{
/* 补零 */
trans_temp = '0';
trans_len++;
}
point += (trans_len + 1);
}
else
{
s_buff = 0;
return s_buff;
}
for (; trans_len > 0; trans_len--)
{
/* 将倒位数组内容存放到转换结果 */
s_buff = trans_temp;
}
s_buff = 0;
return s_buff;
} 要想显示如你要的"V=3.5m/s",一是可以用字符串连接的方式,将数值转换的字符串拼接起来;二是可以事先计算好字符串出现在屏幕上的位置,依次放置
什么意思?不是很明白你说的什么,能再解释一下这个现象吗
例如先显示"V= m/s",再更改横坐标位置,用数值转换后的字符串替换空格
感谢!!
uint8_t trans_temp; //按位转换的结果数组缓冲
这行代码编译不通过 BUFFLEN 没有定义; 传指针就行了,别把问题复杂化
先格式化,再显示
sprintf(acBuf, "%2d. %04dPPM 当前",
pHole->ucTotal+1,
uiCur);
LCD_StrEx((192-18*8)/2, 2, acBuf);
好像都是使用的sprintf函数
主要是初始化吧,后面显示就是调用函数而已。
是 iic 的OLED 屏幕 还是SPI的呢
这两种驱动都可以写在同一个C文件中。
一般是采用条件编译的方式。
先显示 字符然后显示汉子最后就是图片了。
把显示字符汉子图片的函数 封装好后就是在主函数中调用了,没什么难度,
sprintf
8080并口
事先计算好字符串出现在屏幕上的位置,依次放置。实现了变量显示。谢谢
OLED_showString(20,2,"V=",16);
OLED_showString(80,2, "m/s",16);
OLED_showNum(40,2,t,2,16); 直接调用sprintf?没用sprintf写过,sprintf原函数在哪里下载?