前言
上节讲解了IIC的协议,并用STM32实践了一下。今天趁热打铁,用NRF51822来进行驱动屏幕,程序昨天晚上加班搞完了。这一节主要讲解下0.96屏幕驱动原理和NRF51822的驱动程序、
屏幕简介
该屏幕支持多种驱动方式:3线或者4线SPI、8080、6800等等,我用的是IIC驱动的屏幕。不过原理明白了,什么驱动方式都无所谓了。
简介一定要突出一个“简”字、
连接方法
该屏幕已经设定为IIC模式了,因此不需要你自行修改电路,只需要看丝印把引脚一一对应连接到NRF51822上,我用的是P021和P022引脚,定义如下:
//-----------------OLED IIC端口定义----------------
#define OLED_SCLK_Clr() nrf_gpio_pin_clear(21)//SCL
#define OLED_SCLK_Set() nrf_gpio_pin_set(21)
#define OLED_SDIN_Clr() nrf_gpio_pin_clear(22)//SDA
#define OLED_SDIN_Set() nrf_gpio_pin_set(22)
对应开发板如下图:
驱动原理
IIC
关于IIC的理论部分请点击 这里.
SSD1306
关于这个芯片,其实也没啥好说的,主要内容还是IIC。以下几点手册中都有详细说明,这里提一下:
1.配置设备地址
通过将SA0(D/C#)脚上拉到高电平可以设置从机地址第七位为 1,将SA0(D/C#)脚下拉到低电平可以设置从机地址第七位为 0。通过SA0(D/C#)脚的上拉和下拉来设置从机地址,可以最多挂载2个屏幕。
2.寻址模式
寻址模式配置时需要注意,自己配置的寻址模式要和取模或者字库芯片的取模方式一致,不然显示会出问题、
3.指令
指令有点多,不过没必要记住,因为手册上会有初始化流程,跟着流程配置一遍就行了,下次在用的时候直接移植就可以了。
代码实现
OLED驱动代码是在上一个GPIO的版本上修改完后的。移植的STM32 单片机的0.96屏幕驱动文件
1.添加oled.c文件,改文件可以直接从平衡小车的代码中提取,连同文件夹一起复制到NRF51822的工程目录中,如下图:
2.代码中添加C文件,并且添加.h文件路径,如下图:
3.修改底层代码,配置SDA和SCL引脚:
//-----------------OLED IIC端口定义----------------
#define OLED_SCLK_Clr() nrf_gpio_pin_clear(21)//SCL
#define OLED_SCLK_Set() nrf_gpio_pin_set(21)
#define OLED_SDIN_Clr() nrf_gpio_pin_clear(22)//SDA
#define OLED_SDIN_Set() nrf_gpio_pin_set(22)
#define OLED_CMD 0 //写命令
#define OLED_DATA 1 //写数据
4.修改主函数配置,添加引脚初始化和屏幕初始化函数
int main(void)
{
nrf_gpio_cfg_output(21); //配置P021引脚为输出SCL
nrf_gpio_cfg_output(22); //配置P022引脚为输出
nrf_gpio_pin_set(21);
nrf_gpio_pin_set(22);
nrf_delay_ms(800);
OLED_Init();
nrf_delay_ms(200);
OLED_Clear();
while(1)
{
OLED_ShowString(0,0,"nrf51822",12);
OLED_ShowCHinese(0,2,7);
OLED_ShowCHinese(16,2,8);
OLED_ShowString(0,5,"D_SEngineer",12);
}
}
5.编译下载,实际效果如图所示:
总结
本小节再次总结了IIC,以及重新用NRF51822驱动了0.96寸屏幕,到现在是不是突然觉得写代码这么简单?理解了原理,修改下底层配置就能从STM32移植到NRF51822上、
代码领取方式,复制下面关键字到公众号回复 ,即可领取源码。
nrf51822外设--0.96寸屏