[N32G45x] 【N32G457 】OLED屏显示驱动

[复制链接]
1434|5
 楼主| jinglixixi 发表于 2022-1-7 11:58 | 显示全部楼层 |阅读模式
#申请原创#
OLED屏有多种类型,按接口方式可分I2C接口和SPI接口方式,按色彩可分为单色、双色及彩色方式。此外,按几何尺寸分又有0.91寸、0.96寸等规格。
从价格和占用引脚资源看,使用0.91寸I2C接口的单色屏是比较经济的。
为此,可以硬件和软件2种方式来实现OLED屏的显示驱动。
从使用灵活性的角度,这里采用软件的方式来实现,并按如下关系来连接:
CLK---PE2
DIN ---PE4
1.jpg
图1 器件连接
故进行如下的定义:
#defineCLK_PIN    1
#defineDIN_PIN    3
#defineOLED_SCLK_Clr()  rt_pin_write(CLK_PIN,PIN_LOW);
#defineOLED_SCLK_Set()  rt_pin_write(CLK_PIN,PIN_HIGH);
#defineOLED_SDIN_Clr()  rt_pin_write(DIN_PIN,PIN_LOW);
#defineOLED_SDIN_Set()  rt_pin_write(DIN_PIN,PIN_HIGH);
为实现I2C方式发送数据,相应的函数为:
  1. void Write_IIC_Byte(unsigned char IIC_Byte)
  2. {
  3. unsigned char i;
  4. unsigned char m,da;
  5. da=IIC_Byte;
  6. OLED_SCLK_Clr();
  7. for(i=0;i<8;i++)
  8. {
  9. m=da;
  10. m=m&0x80;
  11. if(m==0x80)
  12. {
  13. OLED_SDIN_Set();
  14. }
  15. else
  16. OLED_SDIN_Clr();
  17. rt_hw_us_delay(2);
  18. da=da<<1;
  19. OLED_SCLK_Set();
  20. rt_hw_us_delay(2);
  21. OLED_SCLK_Clr();
  22. rt_hw_us_delay(2);
  23. }
  24. }

该OLED屏的初始化函数为:
  1. void OLED_Init(void)
  2. {
  3. Write_IIC_Command(0xAE);
  4. Write_IIC_Command(0x40);
  5. Write_IIC_Command(0xb0);
  6. Write_IIC_Command(0xc8);
  7. Write_IIC_Command(0x81);
  8. Write_IIC_Command(0xff);
  9. Write_IIC_Command(0xa1);
  10. Write_IIC_Command(0xa6);
  11. Write_IIC_Command(0xa8);
  12. Write_IIC_Command(0x1F);
  13. Write_IIC_Command(0xd3);
  14. Write_IIC_Command(0x00);
  15. Write_IIC_Command(0xd5);
  16. Write_IIC_Command(0xf0);
  17. Write_IIC_Command(0xd9);
  18. Write_IIC_Command(0x22);
  19. Write_IIC_Command(0xda);
  20. Write_IIC_Command(0x02);
  21. Write_IIC_Command(0x8d);
  22. Write_IIC_Command(0x14);
  23. Write_IIC_Command(0xdb);
  24. Write_IIC_Command(0x49);
  25. Write_IIC_Command(0xaf);
  26. }

进行OLED屏的清屏函数为:
  1. void OLED_Clear(void)
  2. {
  3. uint8_t i,n;
  4. for(i=0;i<8;i++)
  5. {
  6. OLED_WR_Byte(0xb0+i,OLED_CMD);
  7. OLED_WR_Byte(0x00,OLED_CMD);
  8. OLED_WR_Byte(0x10,OLED_CMD);
  9. for(n=0;n<128;n++) OLED_WR_Byte(0,OLED_DATA);
  10. }
  11. }

实现字符串显示的函数为:
  1. void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
  2. {
  3. unsigned char j=0;
  4. while (chr[j]!='\0')
  5. {

使用以上函数,实现图2所示效果的程序代码为:
   rt_pin_mode(DIN_PIN, PIN_MODE_OUTPUT);
   OLED_Clear();
   OLED_ShowString(20,0,"N32G457TEST",16);
   OLED_ShowString(20,2,"OLEDDISPLAY",16);
2.jpg
图2 显示效果


daichaodai 发表于 2022-1-11 20:59 来自手机 | 显示全部楼层
显示为什么这么暗呢?
 楼主| jinglixixi 发表于 2022-1-12 09:25 | 显示全部楼层
daichaodai 发表于 2022-1-11 20:59
显示为什么这么暗呢?

使用时不小心,电源接反过一次,前半部分烧毁了,只能凑乎用了!
alexzhou88 发表于 2022-1-14 09:42 | 显示全部楼层
淘宝一块开发板,玩一玩!!!
huquanz711 发表于 2022-1-15 18:43 来自手机 | 显示全部楼层
这OLED被楼主玩坏了
kyzhd 发表于 2022-1-21 14:17 来自手机 | 显示全部楼层
应该是角度的问题,看上去像烧屏了呢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

525

主题

2963

帖子

39

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