LEDs
终于可以坐在电脑前开始写订阅号~闲话少说,出发吧。
TALK IS CHEAP, SHOW ME THE CODE.
展示也是一种能力。单片机的展示方式多种多样, LED,蜂鸣器,LCD,OLED,串口。从今天开始,OLED将成为我们的主角,它为我们展示文字(英文,中文),显示温度(数字),呈现菜单。
目的地
我们旨在用20%的时间尝试把OLED用起来。具体来说,可以用OLED显示中英文,显示数字,显示菜单等内容。至于高级的显示,如动画,图片等,则不在我们的考虑范围。当然,至于OLED底层是如何工作的,我们也不关心,不在意。除非以后立志要从事嵌入式驱动工程师。
OLED类型:I2C OLED。SPI OLED不在考虑范围。
初识OLED
OLED屏应用广泛,常用于智能手表、手环的显示屏。特点是屏幕小,可以显示中英文、图片等。 下图是I2C OLED,规格是0.96寸,128*64。
引脚:
- VCC:供电输入,3.3~5V。以厂家资料为准。
- GND:地
- SCL:I2C 时钟输入,由单片机提供。
- SDA:I2C数据线,双向。
淘宝上有很多店铺有卖~价格一般在15元左右。商家提供例程和资料,我们也可以基于这些例程快速入门。下面是某商家提供的资料链接:
资料下载:https://pan.baidu.com/s/1usqnK1rJ3oS4gmUtwz1Oaw
提取码:3mfc
0.96寸资料下载 链接: https://pan.baidu.com/s/1b2Z3_rReJ3ioNQTKsHlj5A?pwd=bsss
提取码: bsss
第一个链接下来后解压:
资料丰富。 进入例程文件夹:
不错。找到一个C51例程:
使用KEIL 5 C51打开工程,成功编译。
手头没有I2C OLED模块怎么办? 买一块,别介。先试一试看Protues 8.6有没有OLED仿真元件吧。
运行Protues 8.6, 看到Start下面的Open Sample了吗?点它。
在Keywords下搜索ssd1306,选择第一个搜索结果,单击打开按钮。ssd1306是OLED的驱动芯片。注意,这里不要搜索OLED。
单击开始仿真,可以看到OLED显示的信息如下。由于这个sample是面向Arduino平台的。直接复制OLED相关的电路到51仿真电路就可以。懒一点就另存仿真电路到一个新文件,把左侧Arduino相关的电路都删除,在此基础上设计51仿真电路即可。我们选择懒的方法。
下图是删除了Arduino单片机,增加了AT89C51单片机。同时对OLED模块的引脚进行如下处理:
RES#引脚直接接VCC
D0的标号改为SCL,D1/D2的标号改为SDA。
装载编译好的商家例程OLED.hex,单击开始仿真~~~等待,等待,花儿都谢了,OLED怎么不显示内容。哪里不对劲吗?
是的。I2C通信中分主机(Master)和从机(Slave)。I2C总线上只能有一个主机,可以有多个从机。只有主机才能发起通信。主机通过叫号(号码就是从机地址,开始通信的第一个命令里必须包含)来选择要通信的从机。
OLED地址在驱动LQ12864.h的两个函数里使用到,如下图所示。
关于I2C OLED地址,以下两篇博文总结得很好,快去看看吧。
0.96寸OLED显示屏 IIC接口(SSD1306) - Gimiracle - 博客园 (cnblogs.com)
OLED显示屏I2C接口_哈士奇上蔚的博客-CSDN博客_oled i2c
由于仿真图里OLED的D/C#接高电平。所以I2C从机地址是0x7A,而不是驱动代码里的0x78。我们面临了两个选择:一是改电路,即把D/C#接地;二是修改代码,把0x78改为0x7A。改代码容易,哈哈。
#define SLAVE_ADDRESS 0x7A // 0x78
为什么定义宏??~可维护性。 假设OLED实物买回来,地址是0x78。我们改一个地方就可以。
在Keil5中重新编译程序,在Protues中重启仿真。不错不错,可以显示了。自己去研究例程的main函数代码吧。
结束语
今天内容主要是教初学者如何获取I2C OLED的例程,并在Proteus里搭建OLED仿真电路图,并成功把例程跑出来。对于51单片机,其实网上有很多很多的例程和学习资料,但是如何找到这些资料,从中抓取自己需要的内容,并应用于自己的项目,这是一个软实力。有时候,我们并不需要理解每一行代码的意义,我们只要理解各个文件/函数的作用,并正确调用,就可以实现我们的功能。
编辑:黄飞
全部0条评论
快来发表一下你的评论吧 !