完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、前言
作为嵌入式软件开发,可能经常会使用单片机连接驱动显示屏,实现人机交互的功能,通常可选择的有 OLED 和 LCD 等,其中相关驱动代码例程网上更是数不胜数。 本文介绍的是 OLED, 常见代表有 0.96 寸的OLED,网上也有很多相关的驱动代码,但是大部分代码都是能用即可,不是特别关注驱动代码的整体架构,以下是个人整理的 OLED 驱动代码,支持配置 SPI 和 IIC 两种接口方式(目前只是测试了 SPI,IIC 有待验证)。 2、介绍 基于 stm32 的 0.96寸 OLED 驱动架构模块代码,代码主要特点是:
源文件部分代码如下: /** 字体大小配置表 */ static LCD_FontCfgType sg_tFontCfgTable[FONT_MAX_NUM] = { {12, 12, ASCII_6X12_DATA, FONT_12X12_IDX, FONT_12X12_DATA}, {16, 16, ASCII_8X16_DATA, FONT_16X16_IDX, FONT_16X16_DATA}, {24, 24, ASCII_12X24_DATA, FONT_24X24_IDX, FONT_24X24_DATA}, {32, 32, ASCII_16X32_DATA, FONT_32X32_IDX, FONT_32X32_DATA}, }; 头文件部分代码如下: /* OLED 初始化函数 ****************************************************************************************************/ extern void OLED_Init(void); /* OLED 控制函数 ******************************************************************************************************/ extern void OLED_DisplayOn(void); extern void OLED_DisplayOff(void); /* 画点/读点函数 ******************************************************************************************************/ extern void OLED_DrawPoint(oledsize_t x, oledsize_t y, eOledcolor color); extern void OLED_DrawRoughPoint(oledsize_t x, oledsize_t y, eOledcolor color, uint8_t size); extern eOledcolor OLED_ReadPoint(oledsize_t x, oledsize_t y); /* OLED 清屏函数 ******************************************************************************************************/ extern void OLED_Clear(uint8_t color); extern void OLED_SetFill(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high, eOledcolor color); /* 画面操作函数 *******************************************************************************************************/ extern void OLED_SyncScreen(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high); extern void OLED_ShowTask(void); extern void OLED_SetScreenOffset(oledsize_t x, oledsize_t y, oledsize_t width, oledsize_t high, uint8_t dir, uint8_t pixels); /* 画图形函数 *********************************************************************************************************/ extern void OLED_DrawLine(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high, uint8_t size); extern void OLED_DrawRectangle(oledsize_t sx, oledsize_t sy, oledsize_t width, oledsize_t high, uint8_t size); extern void OLED_DrawCircle(oledsize_t x, oledsize_t y, oledsize_t radius, uint8_t size); /* 设置文本/数字函数 **************************************************************************************************/ extern void OLED_SetColor(eOledcolor backColor, eOledcolor pointColor); extern void OLED_SetText(oledsize_t x, oledsize_t y, const char *pszStr, uint8_t isMultiLine, efontSize size); extern void OLED_SetIntegerNum(oledsize_t x, oledsize_t y, int32_t num, uint8_t len, uint8_t zero, efontSize size); extern void OLED_SetFloatNum(oledsize_t x, oledsize_t y, float num, uint8_t intLen, uint8_t decLen, uint8_t zero, efontSize size); /* 格式化输出函数 *****************************************************************************************************/ extern void OLED_XYPrintf(oledsize_t x, oledsize_t y, uint8_t isMultiLine, efontSize size, const char *format, ...); extern void OLED_Printf(const char *format, ...); 4、示例代码显示效果 其中 printf 输出采用了右侧半个屏幕进行刷新,滚动式打印内容。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:59 , Processed in 1.078779 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号