obsidian-notes/信号源/0.91_ OLED显示.md
CSSC-WORK\murmur 3e6078442b init version
2024-04-15 11:19:57 +08:00

3.8 KiB
Raw Permalink Blame History

title updated created tags
0.91' OLED显示 2022-05-12 02:09:19Z 2022-01-08 13:18:08Z
mcu
oled
u8g2
代码块

显示规划

0.91的OLED大小刚好合适分辨率128*32也可以显示足够多的消息量。

mini定位低端功能简单小巧便携使用方便。

可设置选项有频率和功率,输出使能,其它功能需通过控制接口通过上位机实现。 2021.04.13取消上位机控制功能暂定使用CDC串口

显示界面第一行左侧显示功率分辨率1dB2021.04.13或可0.5dB;右侧显示输出使能状态

第二行显示频率分辨率1kHz

2021.04.16

0.91的ips屏效果可能更好价格差不多

可考虑加电池满载续航目标30分钟约需200mAH

程序设计

2021.05.06

0.91屏分辨率为128*32

为方便程序设计,显示用数字部分尽量采用等宽字体,但等宽字体标点符号也是等宽,浪费空间频率对应数字添加分隔符, .等提升辨识度 频率对应显示位数总数约为18即110-9 11位等宽对应99.999999999GHz+31/2变宽分隔符+11/2变宽+4变宽大写字母LMH+1变宽小写字母z 故字体宽度最大为7若为8则MHz无法显示完整可只显示M

数字字体中基本自带等宽除了数字1

数字字体u8g2_font_bauhaus2015_tn

单位字体u8g2_font_beanstalk_mel_tr

状态字体u8g2_font_tenfatguys_tr

字高==11==

u8g2_SetFont(&u8g2,u8g2_font_bauhaus2015_tn);//?*11
u8g2_DrawStr(&u8g2,10-2,15-1,"-60.5");
u8g2_DrawStr(&u8g2,10-2,30,"0,023.456,789");//cnt =18, max W of font is 7
u8g2_SetFont(&u8g2,u8g2_font_tenfatguys_tr);//15*14
u8g2_DrawStr(&u8g2,90+5+10+1,15-1,"ON");
u8g2_SetFont(&u8g2,u8g2_font_beanstalk_mel_tr);//?*10
u8g2_DrawStr(&u8g2,10+40-4+4,15-1,"dBm");
u8g2_DrawStr(&u8g2,112+1,30,"MHz");
u8g2_DrawStr(&u8g2,0,30,">");
u8g2_SendBuffer(&u8g2);

字高==12==

u8g2_SetFont(&u8g2,u8g2_font_cupcakemetoyourleader_tn);//?*12
u8g2_DrawStr(&u8g2,10-5,15-1,"-60.5");
u8g2_DrawStr(&u8g2,10-5,30,"0,023.456,78");//cnt =18, max W of font is 7
u8g2_SetFont(&u8g2,u8g2_font_tenfatguys_tr);//15*14
u8g2_DrawStr(&u8g2,90+5,15-1,"OFF");
//u8g2_DrawStr(&u8g2,90+5+10+1,15-1,"ON");
u8g2_SetFont(&u8g2,u8g2_font_beanstalk_mel_tr);//?*10
u8g2_DrawStr(&u8g2,10+40-4+4,15-1,"dBm");
u8g2_DrawStr(&u8g2,112+1,30,"MHz");
u8g2_DrawStr(&u8g2,0,15-2,">");
u8g2_DrawStr(&u8g2,0,30-2,">");

刷新问题

由其它数字刷新为1时背景无法清除的解决办法

理论上发送空格“ ”可清除背景,实测不行

改为利用u8g2_SetDrawColor(&u8g2, 2)的参数2XOR模式将上一内容再次发送一次即可清空背景清空后参数恢复为1。

从主界面切换到其它界面时L/F参数不会变化故切换回主界面时直接恢复最高效为此需在切换前缓存界面方法如下

void getbuffer(void)
{
uint8_t *ptr= u8g2_GetBufferPtr(&u8g2);
uint16_t size = u8g2_GetBufferTileHeight(&u8g2) * u8g2_GetBufferTileWidth(&u8g2) * 8;
lastbuffer = (uint8_t *)malloc(size);
for (uint16_t var = 0; var < size; ++var) {
*(lastbuffer+var) = *(ptr+var);
}
}

切换回主界面后可释放缓存

内存

使用malloc比直接分配固定大小数组节省0.5K内存因为malloc在编译时不分配使用时才“动态分配”

数字反显

当前数字反显

正常模式下填充背景 切换模式 写入数字 换回正常模式

8g2_DrawBox(&u8g2, numLoc[i], F_OFFSET_Y-FONTH-1, FONTALLW, FONTH+2);
u8g2_SetDrawColor(&u8g2, 0);//clear pixel mode
u8g2_DrawStr(&u8g2, numLoc[i], 30, 0);
u8g2_SetDrawColor(&u8g2, 1);//back to default color(set pixel)

源码

2010.06 demo版程序 oled12832.zip

#u8g2 #oled #mcu #代码块