[活动专区] 【AutoChips 7801x MCU评测报告】+ I2C OLED屏显示

[复制链接]
2025|11
 楼主| jinglixixi 发表于 2020-6-7 08:48 | 显示全部楼层 |阅读模式
在掌握GPIO口的使用方法后,我们可以快速地完成GPIO口的输入/输出设置、高低电平的输出等。在此基础上,我们可以通过GPIO口来模拟I2C接口以驱动相应的OLED显示屏工作。
I2C_OLED屏是一种借由I2C接口工作的器件,共有4个引脚,故占用GPIO口资源极少。
为便于连接,这里选用的是板上的I2C 1接口,并使用插排来连接。
OLED屏与MCU的连接关系为:
OLED_SCLK——PB13
OLED_SDIN——PC4
其余的两个引脚则接3.3V工作电源
定义GPIO口输出高低电平的语句为:
#defineOLED_SCLK_Set()  GPIO_SetPinLevel(GPIOB,GPIO_PIN13, GPIO_LEVEL_HIGH); // PB13
#defineOLED_SCLK_Clr()  GPIO_SetPinLevel(GPIOB,GPIO_PIN13, GPIO_LEVEL_LOW);  
#defineOLED_SDIN_Set()  GPIO_SetPinLevel(GPIOC,GPIO_PIN4, GPIO_LEVEL_HIGH);  // PC4
#defineOLED_SDIN_Clr()  GPIO_SetPinLevel(GPIOC,GPIO_PIN4, GPIO_LEVEL_LOW);  
GPIO的功能定义函数为:
  1. void LCD_GPIO_Cogfig(void)
  2. {
  3.          GPIO_SetFunc(GPIOC, GPIO_PIN4, GPIO_FUN0);
  4.          GPIO_SetFunc(GPIOB, GPIO_PIN13, GPIO_FUN0);
  5.         
  6.          GPIO_SetDir(GPIOC, GPIO_PIN4, GPIO_OUT);
  7.          GPIO_SetDir(GPIOB, GPIO_PIN13, GPIO_OUT);
  8. }

OLED屏的初始化函数为:
  1. void OLED_Init(void)
  2. {      
  3.          LCD_GPIO_Cogfig();         
  4.          OLED_SCLK_Set();
  5.          OLED_SDIN_Set();
  6.          mdelay(800);//delay_ms(800);
  7.          OLED_WR_Byte(0xAE,OLED_CMD);//--display off
  8.          OLED_WR_Byte(0x00,OLED_CMD);//---setlow column address
  9.          OLED_WR_Byte(0x10,OLED_CMD);//---sethigh column address
  10.          OLED_WR_Byte(0x40,OLED_CMD);//--setstart line address  
  11.          OLED_WR_Byte(0xB0,OLED_CMD);//--setpage address
  12.          OLED_WR_Byte(0x81,OLED_CMD);// contract control
  13.          OLED_WR_Byte(0xFF,OLED_CMD);//--128   
  14.          OLED_WR_Byte(0xA1,OLED_CMD);//setsegment remap
  15.          OLED_WR_Byte(0xA6,OLED_CMD);//--normal/ reverse
  16.          OLED_WR_Byte(0xA8,OLED_CMD);//--setmultiplex ratio(1 to 64)
  17.          OLED_WR_Byte(0x3F,OLED_CMD);//--1/32duty
  18.          OLED_WR_Byte(0xC8,OLED_CMD);//Comscan direction
  19.          OLED_WR_Byte(0xD3,OLED_CMD);//-setdisplay offset
  20.          OLED_WR_Byte(0x00,OLED_CMD);//

  21.          OLED_WR_Byte(0xD5,OLED_CMD);//setosc division
  22.          OLED_WR_Byte(0x80,OLED_CMD);//

  23.          OLED_WR_Byte(0xD8,OLED_CMD);//setarea color mode off
  24.          OLED_WR_Byte(0x05,OLED_CMD);//

  25.          OLED_WR_Byte(0xD9,OLED_CMD);//SetPre-Charge Period
  26.          OLED_WR_Byte(0xF1,OLED_CMD);//

  27.          OLED_WR_Byte(0xDA,OLED_CMD);//setcom pin configuartion
  28.          OLED_WR_Byte(0x12,OLED_CMD);//

  29.          OLED_WR_Byte(0xDB,OLED_CMD);//setVcomh
  30.          OLED_WR_Byte(0x30,OLED_CMD);//

  31.          OLED_WR_Byte(0x8D,OLED_CMD);//setcharge pump enable
  32.          OLED_WR_Byte(0x14,OLED_CMD);//

  33.          OLED_WR_Byte(0xAF,OLED_CMD);//--turnon oled panel
  34. }

实现图示效果的主程序为:
  1. int main(void)
  2. {
  3.            OLED_Init();
  4.            OLED_Clear();
  5.            OLED_ShowString(0,0,"AC8710 TEST",16);
  6.            OLED_ShowString(0,2,"OLED Display",16);
  7.            OLED_ShowString(0,4,"jinglixixi",16);
  8.            OLED_ShowString(0,6,"2020.6.6",16);
  9.            while (1);
  10. }


a.png
OLED屏显示效果







Cjy_JDxy 发表于 2020-6-7 14:31 | 显示全部楼层
厉害!没看明白,你的OLED屏怎么接上去的?
yljon 发表于 2020-6-7 15:09 | 显示全部楼层
楼主厉害
 楼主| jinglixixi 发表于 2020-6-7 18:41 | 显示全部楼层
本帖最后由 jinglixixi 于 2020-6-7 18:53 编辑
Cjy_JDxy 发表于 2020-6-7 14:31
厉害!没看明白,你的OLED屏怎么接上去的?

板上有一个I2C_1 的焊盘接口,需要自己焊一个4脚的插排,然后将OLED屏插入即可。
a.png

 楼主| jinglixixi 发表于 2020-6-7 18:42 | 显示全部楼层

感谢支持!!!
Cjy_JDxy 发表于 2020-6-7 19:30 | 显示全部楼层
jinglixixi 发表于 2020-6-7 18:41
板上有一个I2C_1 的焊盘接口,需要自己焊一个4脚的插排,然后将OLED屏插入即可。

嗯嗯。不知道杰发为什么把焊盘堵死,这样焊起来不方便
 楼主| jinglixixi 发表于 2020-6-7 20:03 | 显示全部楼层
本帖最后由 jinglixixi 于 2020-6-7 20:05 编辑
Cjy_JDxy 发表于 2020-6-7 19:30
嗯嗯。不知道杰发为什么把焊盘堵死,这样焊起来不方便

是呀,我是找了一根针来辅助烙铁加热才通开的。此外,提供的插座间距也较小不便与常规的器件插接。
paotangsan 发表于 2020-7-7 14:08 | 显示全部楼层
非常感谢楼主分享
renzheshengui 发表于 2020-7-7 14:13 | 显示全部楼层
这是生焊上去的啊!
wakayi 发表于 2020-7-7 14:13 | 显示全部楼层
楼主好厉害
wowu 发表于 2020-7-7 14:13 | 显示全部楼层
让我好羡慕啊
xiaoqizi 发表于 2020-7-7 14:14 | 显示全部楼层
正好代码用一用 谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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