IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 2021-09-05 -> 正文阅读

[嵌入式]2021-09-05

OLED 0.96+STM32+51+万年历

一、效果演示

最近刚好接触到OLED0.96,感觉还是挺有意思的,空闲时间就玩了玩,话不多说,先上视频

基于51单片机万年历时钟


目前做了两版本,一个是基于STC89C52RC单片机,另一个是基于STM32F103C8T6,接线请看代码引脚定义。

二、驱动IC和模组

OLED 0.96是比较常用的显示屏,主要优点就是小巧,全方位可视(自发光),可自定义图文,价格低灯优点。目前常用驱动IC是SSD1306,不过没单独见过这种IC,一般都是以模组形似出现,类似于这种
在这里插入图片描述
模组是有SPI和IIC通信的接口,不过设计底板时候只能选一种设计,如果要自己设计外围电路,参考手册就好。

三、模块基本参数

这里以IIC通信模块为例
在这里插入图片描述
模块兼容5V和3.3V,接线切记不可把电源线接反,接反了大概率会烧掉。接线注意线不要太长,否则可能通信异常。

四、IIC通信简介

常见通信协议有4针IIC,7针SPI通信,这里只讲下IIC通信,一般也不用自己去写,IIC通信代码需要移植的话理解下代码就好,最多改下延时。以下是模块IIC协议时序和时间要求:
起始和停止时序
在这里插入图片描述
发送一个字节后有个等待应答信号。
在这里插入图片描述
SCL先上升沿采样,下降沿SDA电平可改变,下降沿不采样,给SDA时间去改变电平
在这里插入图片描述
这个是每种时序状态下需要保持的时间,不同工作频率单片机移植要注意下这个时间是否在范围内。
在这里插入图片描述
IIC通信学习可以找个标准IIC程序,对着时序图去学习会更容易理解,主要理解为主,后期写代码大多时候都直接移植,大多时候也只是改下延时。

五、常用寄存器及简介

WriteCmd(0xAE); //关闭显示
	WriteCmd(0x20);	//Set Memory Addressing Mode  //设置内存水平寻址方式	
	WriteCmd(0x10);	//00,水平的寻址模式;01,垂直的寻址模式;10,页寻址 (RESET);11,无效的
	
	WriteCmd(0xB0);	//Set Page Start Address for Page Addressing Mode,0-7  //“页面寻址方式”选择“页面起始地址”
	
	WriteCmd(0xC8);	//Set COM Output Scan Direction C0 //正常模式(RESET)扫描从COM0到COM[N -1] C8 正常模式(RESET)扫描从COM[N -1]到COM0
	
	WriteCmd(0x00); //---set low column address//设置页面寻址模式的下列起始低位地址
	WriteCmd(0x10); //---set high column address//设置页面寻址模式的下列起始高位位地址
	
	WriteCmd(0x40); //--set start line address //设置显示RAM显示起始行寄存器
	
	WriteCmd(0x81); //--set contrast control register//设置对比度,也就是亮度
	WriteCmd(0xFF); //亮度调节 0x00~0xff
	
	WriteCmd(0xA1); //--set segment re-map 0 to 127 //A0 列地址0映射到SEG0 A1列地址127映射为SEG0
	
	WriteCmd(0xA6); //--set normal display  A6 0灭1亮 A7 1灭0亮
	
	WriteCmd(0xA8); //--set multiplex ratio(1 to 64)  MUX配比设置为N+1 MUX
	WriteCmd(0x3F); //1/64duty  设置要刷的COM数
	
	WriteCmd(0xA4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM content //A4 输出RAM内容 A5 忽略RAM内容
	
	WriteCmd(0xD3); //-set display offset //设置垂直移动由COM从0d~63dreset后该值被重置为00h
	WriteCmd(0x00); //-not offset
	
	WriteCmd(0xD5); //--set display clock divide ratio/oscillator frequency//设置显示时钟分频/振荡器频率
	WriteCmd(0xF0); //--set divide ratio
	
	WriteCmd(0xD9); //--set pre-charge period//设置pre-charge周期
	WriteCmd(0x22); //  设置周期
	
	WriteCmd(0xDA); //--set com pins hardware configuration  设置COM引脚硬件配置 
	WriteCmd(0x12);  //备用COM引脚配置 禁用COM左/右重映射
	
	WriteCmd(0xDB); //--set vcomh //设置VCOMH取消勾选“级别”
	WriteCmd(0x20); //0x20,0.77xVcc
	
	WriteCmd(0x8D); //--set DC-DC enable//设置直流电源
	WriteCmd(0x14); //
	
	WriteCmd(0xAF); //--turn on oled panel  //打开屏幕显示

配置前先关闭屏幕显示再配置,一般没有特殊用途不需要改这些寄存器,常用的可能是亮度配置寄存器,调整下亮度,其他的需要调整直接参考下文档调整就好,反正只要电源不反接,指令随便试。

	WriteCmd(0x81); //--set contrast control register//设置对比度,也就是亮度
	WriteCmd(0xFF); //亮度调节 0x00~0xff

亮度调节上一条是命令,紧跟的就是亮度值了,00-FF,根据需要调整就好。

六、字库,图形提取

字模提取

软件免安装,直接打开即可。选择字符模式
先点字模选项,上面OLED初始化决定这些怎怎么选择,一般默认这样配置,配置好后在标号9处输入字符便会出现字符在点阵区,再点生成字模即可得到字模数据

图片提取

选择图形模式

打开图片文件,图片要求BMP格式,且尽量调整大小在128X64像素点范围内
这个是从提取软件里找的一张BMP图片,显示别的图片也可以自己提取下

七、常用函数说明与使用

代码在例程里,为了方便存放资源和共享就放群里了,需要加群获取,这里只大概介绍下。//资源获取与交流 群号:982260346
设置起始点坐标。

//资源获取与交流 群号:982260346
void OLED_SetPos(unsigned char x, unsigned char y) //设置起始点坐标(x:0~127, y:0~7)

全屏填充,写入0x00全灭,写入0XFF全量

void OLED_Fill(unsigned char fill_Data)//全屏填充

这个是填充函数打包,内容填0x00,一般切换画面前要调用一次

void OLED_CLS(void)//清屏

一般低功耗项目采用,不过单纯玩可以忽视这两条,有兴趣可以调用玩玩。

void OLED_ON(void)//将OLED从休眠中唤醒
void OLED_OFF(void)//让OLED休眠 -- 休眠模式下,OLED功耗不到10uA

显示字符串函数,知道参数直接用就好

//--------------------------------------------------------------
// Prototype      : void OLED_ShowChar(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
// Calls          : 
// Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
// Description    : 显示codetab.h中的ASCII字符,有6*8和8*16可选择
//--------------------------------------------------------------
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)

显示中文函数,这个中文字库需要自己提取,这里索引是直接填中文在数组的第几个中文范围0-x(X是中文个数-1)

//--------------------------------------------------------------
// Prototype      : void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
// Calls          : 
// Parameters     : x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在codetab.h中的索引
// Description    : 显示codetab.h中的汉字,16*16点阵
//--------------------------------------------------------------
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)

图片显示函数,前面四个参数是两个坐标点X,Y轴位置,最后一个是图片数组,用两个坐标点主要方便当图片小于128X64的时候也可以正常显示,只要输入图片像素点实际大小即可。

//--------------------------------------------------------------
// Prototype      : void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);
// Calls          : 
// Parameters     : x0,y0 -- 起始点坐标(x0:0~127, y0:0~7); x1,y1 -- 起点对角线(结束点)的坐标(x1:1~128,y1:1~8)
// Description    : 显示BMP位图
//--------------------------------------------------------------
void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[])
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:19:00  更:2021-09-06 11:20:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:03:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码