打印
[活动专区]

【AutoChips 7801x MCU评测报告】+ I2C OLED屏显示

[复制链接]
1363|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在掌握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的功能定义函数为:
void LCD_GPIO_Cogfig(void)
{
         GPIO_SetFunc(GPIOC, GPIO_PIN4, GPIO_FUN0);
         GPIO_SetFunc(GPIOB, GPIO_PIN13, GPIO_FUN0);
        
         GPIO_SetDir(GPIOC, GPIO_PIN4, GPIO_OUT);
         GPIO_SetDir(GPIOB, GPIO_PIN13, GPIO_OUT);
}

OLED屏的初始化函数为:
void OLED_Init(void)
{      
         LCD_GPIO_Cogfig();         
         OLED_SCLK_Set();
         OLED_SDIN_Set();
         mdelay(800);//delay_ms(800);
         OLED_WR_Byte(0xAE,OLED_CMD);//--display off
         OLED_WR_Byte(0x00,OLED_CMD);//---setlow column address
         OLED_WR_Byte(0x10,OLED_CMD);//---sethigh column address
         OLED_WR_Byte(0x40,OLED_CMD);//--setstart line address  
         OLED_WR_Byte(0xB0,OLED_CMD);//--setpage address
         OLED_WR_Byte(0x81,OLED_CMD);// contract control
         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
         OLED_WR_Byte(0xA1,OLED_CMD);//setsegment remap
         OLED_WR_Byte(0xA6,OLED_CMD);//--normal/ reverse
         OLED_WR_Byte(0xA8,OLED_CMD);//--setmultiplex ratio(1 to 64)
         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32duty
         OLED_WR_Byte(0xC8,OLED_CMD);//Comscan direction
         OLED_WR_Byte(0xD3,OLED_CMD);//-setdisplay offset
         OLED_WR_Byte(0x00,OLED_CMD);//

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

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

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

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

         OLED_WR_Byte(0xDB,OLED_CMD);//setVcomh
         OLED_WR_Byte(0x30,OLED_CMD);//

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

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

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



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屏插入即可。


使用特权

评论回复
5
jinglixixi|  楼主 | 2020-6-7 18:42 | 只看该作者

感谢支持!!!

使用特权

评论回复
6
Cjy_JDxy| | 2020-6-7 19:30 | 只看该作者
jinglixixi 发表于 2020-6-7 18:41
板上有一个I2C_1 的焊盘接口,需要自己焊一个4脚的插排,然后将OLED屏插入即可。

嗯嗯。不知道杰发为什么把焊盘堵死,这样焊起来不方便

使用特权

评论回复
7
jinglixixi|  楼主 | 2020-6-7 20:03 | 只看该作者
本帖最后由 jinglixixi 于 2020-6-7 20:05 编辑
Cjy_JDxy 发表于 2020-6-7 19:30
嗯嗯。不知道杰发为什么把焊盘堵死,这样焊起来不方便

是呀,我是找了一根针来辅助烙铁加热才通开的。此外,提供的插座间距也较小不便与常规的器件插接。

使用特权

评论回复
8
paotangsan| | 2020-7-7 14:08 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
renzheshengui| | 2020-7-7 14:13 | 只看该作者
这是生焊上去的啊!

使用特权

评论回复
10
wakayi| | 2020-7-7 14:13 | 只看该作者
楼主好厉害

使用特权

评论回复
11
wowu| | 2020-7-7 14:13 | 只看该作者
让我好羡慕啊

使用特权

评论回复
12
xiaoqizi| | 2020-7-7 14:14 | 只看该作者
正好代码用一用 谢谢楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2783

帖子

38

粉丝