3.8 KiB
title | updated | created | tags | ||||
---|---|---|---|---|---|---|---|
0.91' OLED显示 | 2022-05-12 02:09:19Z | 2022-01-08 13:18:08Z |
|
显示规划
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,即11(0-9 11位等宽,对应99.999999999GHz)+3(1/2变宽,分隔符,,。)+1(1/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)
的参数2(XOR模式),将上一内容再次发送一次即可清空背景,清空后参数恢复为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 #代码块