超炫酷SSD1315驱动OLED屏,大神

原标题:新买了一片SSD驱动的OLED屏幕,ML51单片机点亮起来

原创作者:gaoyang

本文来自21ic论坛:第一届万元红包——蓝V达人原创奖励活动,如果您也有兴趣参与征文,欢迎进入论坛参与活动~

双十一,看淘宝一直给我发优惠券,就买了一片OLED,0.96寸的,最后花费了4.54元。

驱动芯片是SSD

第一,驱动不一样,老款是SSD,新款的是SSD,新款没有并口功能,但是模块是IIC,不影响,程序一样,电路一样。

第二,新款玻璃比老款的小了一圈,没用的玻璃边减去了,省点OLED玻璃,因为玻璃都是日本进口,玻璃省了,价格要便宜一点。

第三,引脚顺序不一样,老款依次是VCC、GND、SCL、SDA,新款则是GND、VCC、SCL、SDA。

所以我为了图便宜,买了新款的。只有4个管脚。

第一步,点亮屏幕:

得到一块新的屏幕,最重要的就是看能否点亮,点亮了才能使用做各种显示应用。而这个店家没有提供驱动代码,懒得自己写啊,这种通用的肯定有,I2C很容易GPIO模拟,然后搜其他店家,有不少提供驱动代码的,下载了移植到我的ML51开发板上试试。

考虑到是I2C接口,如果用GPIO模拟,需要先设置为开漏模式,然后找到初始化代码,增加配置开漏模式的四行代码。

//对选用的管脚设置为开漏模式MFP_P20_GPIO;MFP_P21_GPIO;P20_OPENDRAIN_MODE;P21_OPENDRAIN_MODE;

这里也可以看出我用的是P20与P21.然后修改头文件中的管脚定义

sbitOLED_SCL=P2^0;//SCLsbitOLED_SDA=P2^1;//SDAsbitOLED_RES=P2^2;//RES

因为使用I2C,按照手册说明可以忽略RES。但是为了少修改一点内容,就先这么随意指定个管脚,不链接就是了。通过取模软件,可以取出你想要的汉字,放入如下数组。

unsignedcharcodeHzk[][32]={{0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0xFC,0x40,0x40,0x40,0x40,0x60,0xE0,0x00,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x7F,0x02,0x02,0x02,0x02,0x02,0x07,0x00,0x00},/*中,0*/{0x00,0x00,0xF8,0x08,0x08,0x28,0x28,0x28,0xE8,0x28,0x28,0x38,0x28,0xF8,0x08,0x00,0x00,0x00,0x7F,0x20,0x20,0x29,0x29,0x29,0x2F,0x29,0x2F,0x2D,0x28,0x7F,0x00,0x00},/*国,1*/{0x00,0x00,0x00,0xF0,0x20,0x20,0x20,0xFC,0x20,0x20,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x05,0x05,0x05,0x7F,0x45,0x45,0x45,0x4F,0x40,0x60,0x78,0x60},/*电,2*/{0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xD0,0x30,0x30,0x10,0x08,0x80,0x80,0x00,0x00,0x01,0x01,0x01,0x01,0x21,0x21,0x41,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00},/*子,3*/{0x00,0x00,0xF8,0x10,0x50,0x90,0x90,0x70,0x70,0x90,0xD0,0x70,0x30,0xF8,0x00,0x00,0x00,0x00,0x7F,0x00,0x08,0x06,0x01,0x1E,0x08,0x06,0x03,0x4E,0x40,0x7F,0x00,0x00},/*网,4*/};

主程序代码如下所示

接下来连接OLED的I2C接口与开发板,并使用开发板供电。

烧录后,效果如下图所示。然后就可以利用这个框架只需要修改简单的几个地方,就能实现OLED点亮了,可以用于其他的各种项目了。

后面我再试试改成用硬件I2C收发器控制。

以上完成第一步点亮屏幕。

第二步,应用到自己的项目中

如果需要显示温湿度的话,就可以利用这些函数组合出你要显示的内容,例如显示“温度:36.5℃”

则需要先生成所需的汉字与符号字模

然后合理的利OLED厂家提供的库函数组合。

最后显示的效果如下图所示,如果将温度的数字通过读取传感器继续更新,就可以看到实时的温度了。

在使用中遇到了一个问题,我在main.c和oled.h都引用了头文件#includeML51.h

导致编译后报错重复定义。然后我删除了main.c中的,重新设置了引用头文件路径,完美解决。

另外如果你修改了目录,或者重建了目录结构,需要在这里也修改一下,不然工程无法找到对应的exe

..\Library\Startup\exe\hex2bin.exe.\output\

L.hex

运行该命令可以生成所需的hex文件。

第三步,添加其他的外设驱动,实现显示检测数据显示功能

这里我使用的是ADC检测温度,然后通过该屏幕显示。

已经添加了NTC传感器。效果非常好

还有就是使用的GPIO,一定要初始化为GPIO模式的开漏模式,不然无法驱动屏幕。

另外对于字符是使用的8*16的字模,所以每行可以显示16个字符,共计可以显示4行。

这样既可以驱动屏幕,又可以通过ADC读取分压,换算成温度,显示到屏幕的预定位置了。

注意事项:需要注意的是,如果多文件使用到同一个头文件,应避免重复引用,以免报错重定向,而将其中放到一处引用即可。通过该实例,大家可以学习到驱动程序的移植方法,同时也可以让大家注意到,可移植能力的重要性,以避免面对不同MCu时候重复工作,本项目中使用到的厂家的驱动程序,即充分考虑了可移植性,只需要做最简单的底层映射即可正常使用。




转载请注明:http://www.diqiucz.com/dwgl/11162.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了