有了前面控制LED灯的基础,就可以通过I/O口来模拟I2C通讯了,进而控制I2C接口的OLED屏来显示信息。老外的墨水屏咱没有,但我们可以为OKdo E1开发板配上一个双色OLED屏来媲美。 OLED屏与MCU的连接关系为: SCL---PIO0_7 SDA---PIO1_0 相关引脚输出高低电平的语句定义: #define OLED_SCLK_Clr() GPIO_PinWrite(GPIO, 0u, 7u, 0) #define OLED_SCLK_Set() GPIO_PinWrite(GPIO, 0u, 7u, 1)
#define OLED_SDIN_Clr() GPIO_PinWrite(GPIO, 1u, 0u, 0) #define OLED_SDIN_Set() GPIO_PinWrite(GPIO, 1u, 0u, 1)
OLED屏引脚配置函数: - void app_oled_init(void)
- {
- gpio_pin_config_t gpioPinConfig;
- gpioPinConfig.pinDirection = kGPIO_DigitalOutput;
- gpioPinConfig.outputLogic = 1u;
- GPIO_PinInit (GPIO, 0u, 7u, &gpioPinConfig);
- GPIO_PinInit (GPIO, 1u, 0u, &gpioPinConfig);
- }
复制代码
OLED屏初始化函数: - void OLED_Init(void)
- {
- Write_IIC_Command(0xAE); //display off
- Write_IIC_Command(0x20); //Set Memory Addressing Mode
- Write_IIC_Command(0x10);
- Write_IIC_Command(0xb0);//Set Page Start Address for Page Addressing Mode,0-7
- Write_IIC_Command(0xc8);//Set COM Output Scan Direction
- Write_IIC_Command(0x00);//---set low column address
- Write_IIC_Command(0x10);//---set high column address
- Write_IIC_Command(0x40);//--set start line address
- Write_IIC_Command(0x81);//--set contrast control register
- Write_IIC_Command(0xdf);
- Write_IIC_Command(0xa1);//--set segment re-map 0 to 127
- Write_IIC_Command(0xa6);//--set normal display
- Write_IIC_Command(0xa8);//--set multiplex ratio(1 to 64)
- Write_IIC_Command(0x3F);//
- Write_IIC_Command(0xa4);//0xa4,Output follows RAM content;0xa5,Output ignores RAM content
- Write_IIC_Command(0xd3);//-set display offset
- Write_IIC_Command(0x00);//-not offset
- Write_IIC_Command(0xd5);//--set display clock divide ratio/oscillator frequency
- Write_IIC_Command(0xf0);//--set divide ratio
- Write_IIC_Command(0xd9);//--set pre-charge period
- Write_IIC_Command(0x22); //
- Write_IIC_Command(0xda);//--set com pins hardware configuration
- Write_IIC_Command(0x12);
- Write_IIC_Command(0xdb);//--set vcomh
- Write_IIC_Command(0x20);//0x20,0.77xVcc
- Write_IIC_Command(0x8d);//--set DC-DC enable
- Write_IIC_Command(0x14);//
- Write_IIC_Command(0xaf);//--turn on oled panel
- }
复制代码
OLED屏显示主程序: - int main(void)
- {
- POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
- CLOCK_EnableClock(kCLOCK_Gpio0);
- CLOCK_EnableClock(kCLOCK_Gpio1);
- BOARD_BootClockFROHF96M();
- app_oled_init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"OKDOE1 TEST",16);
- OLED_ShowString(0,2,"OLED Display",16);
- OLED_ShowString(0,4,"jinglixixi",16);
- OLED_ShowString(0,6,"2020.11.2",16);
- while (1);
- }
复制代码
经程序的编译下载,其运行效果如图所示。 OLED屏显示效果
|