[方案相关] 【玄宇芯】+基于HC32L110开发板的OLED屏显示

[复制链接]
1331|3
 楼主| jinglixixi 发表于 2020-10-23 10:07 | 显示全部楼层 |阅读模式
有了前面程序下载和点亮LED灯的基础,我们就可以利用I/O口来尝试驱动OLED屏了,这里选的是I2C接口的OLED屏,只需占用2I/O口,故十分节省资源,对于像HC32L110这样原本就引脚不多的芯片更是如此。
那么选哪个引脚来连接OLED屏呢?
这里选取的是P35P36,其中P35--- CLKP36--- DIN
配置这2个引脚为输出功能的函数为:
  1. void App_OledInit(void)
  2. {
  3. Gpio_InitIOExt(3, 5, GpioDirOut, TRUE, FALSE, TRUE, FALSE);
  4. Gpio_InitIOExt(3, 6, GpioDirOut, TRUE, FALSE, TRUE, FALSE);
  5. }

是这2个引脚输出高低电平的语句为:
#define OLED_SCLK_Set()   Gpio_SetIO(3, 5, TRUE)
#define OLED_SCLK_Clr()   Gpio_SetIO(3, 5, FALSE)

#define OLED_SDIN_Set()   Gpio_SetIO(3, 6, TRUE)
#define OLED_SDIN_Clr()   Gpio_SetIO(3, 6, FALSE)
该显示屏的初始化函数为:
  1. void OLED_Init(void)
  2. {      
  3. OLED_SCLK_Set();
  4. OLED_SDIN_Set();
  5. delay1ms(800);
  6. OLED_WR_Byte(0xAE,OLED_CMD);//--display off
  7. OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
  8. OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
  9. OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
  10. OLED_WR_Byte(0x81,OLED_CMD); // contract control
  11. OLED_WR_Byte(0xFF,OLED_CMD);//--128  
  12. OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
  13. OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
  14. OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
  15. OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty
  16. OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
  17. OLED_WR_Byte(0x00,OLED_CMD);//
  18. OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
  19. OLED_WR_Byte(0xf0,OLED_CMD);//
  20. OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
  21. OLED_WR_Byte(0x22,OLED_CMD);//
  22. OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
  23. OLED_WR_Byte(0x02,OLED_CMD);//
  24. OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
  25. OLED_WR_Byte(0x49,OLED_CMD);//
  26. OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
  27. OLED_WR_Byte(0x14,OLED_CMD);//
  28. OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
  29. OLED_Clear();
  30. }

实现图1和图2显示效果的主程序为:
  1. int32_t main(void)
  2. {
  3. delay1ms(100);
  4. OLED_Init();
  5. OLED_Clear();
  6. OLED_ShowString(0,0,"HC32L110 TEST",16);
  7. OLED_ShowString(0,2,"OLED DISPLAY",16);
  8. delay1ms(2000);
  9. OLED_Clear();         
  10. OLED_ShowCHinese(0, 0, 3);
  11. OLED_ShowCHinese(16, 0, 4);
  12. OLED_ShowCHinese(32, 0, 5);
  13. OLED_ShowCHinese(48, 0, 6);
  14. OLED_ShowCHinese(64, 0, 7);
  15. OLED_ShowCHinese(0, 2, 8);
  16. OLED_ShowCHinese(16, 2, 9);
  17. OLED_ShowCHinese(32, 2, 10);
  18. OLED_ShowCHinese(48, 2, 11);
  19. OLED_ShowCHinese(64, 2, 12);
  20. while (1);         
  21. }

1.jpg
1 显示字符串

2.jpg
2 显示汉字

55听安 发表于 2023-6-12 14:29 | 显示全部楼层
你好,想问下一下关于oled使用i2c驱动的问题可以吗
LLGTR 发表于 2023-6-12 16:13 | 显示全部楼层
玄宇芯是开发板的名字吗?
 楼主| jinglixixi 发表于 2023-6-13 07:54 | 显示全部楼层
LLGTR 发表于 2023-6-12 16:13
玄宇芯是开发板的名字吗?

应该是开发者为自己产品起的名称,它自己制作了多款开发板。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部