[活动专区] 【AT-START-F407测评】+ OLED屏的显示驱动

[复制链接]
1172|1
 楼主| jinglixixi 发表于 2021-1-25 21:19 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2021-1-25 21:25 编辑

板载的外设资源稍显单薄,为此首要的任务是为它建立一个人机交互的窗口,这里是使用Arduino接口来接入一个I2C接口的单色OLED 屏。由于显示屏的引脚与Arduino接口存在差异,故将OLED屏的方向做了180度的旋转,以免连线的麻烦,OLED 屏的显示效果如下图所示。
1.jpg                               
显示效果图
OLED 屏与MCU的连接关系为:
SCL---PB9
SDA---PB8
使相关引脚输出高低电平的语句定义如下:
#define OLED_SCLK_Set()  GPIOB->BSRE = GPIO_Pins_9
#define OLED_SCLK_Clr()  GPIOB->BRE = GPIO_Pins_9
#define OLED_SDIN_Set()  GPIOB->BSRE = GPIO_Pins_8
#define OLED_SDIN_Clr()  GPIOB->BRE = GPIO_Pins_8
设置相关引脚为输出功能的配置函数为:
  1. void AT32_OLED_Init(void)
  2. {
  3. GPIO_InitType GPIO_InitStructure;
  4. RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
  5. GPIO_StructInit(&GPIO_InitStructure);
  6. GPIO_InitStructure.GPIO_Pins = GPIO_Pins_8|GPIO_Pins_9;  
  7. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
  8. GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
  9. GPIO_Init(GPIOB, &GPIO_InitStructure);
  10. }

由于输出速度比较快,因此相关的辅助函数需添加一点的延时,否则将影响显示,以函数IIC_Start()为例,其修改后的内容为“”
  1. void IIC_Start()
  2. {
  3. OLED_SCLK_Set();
  4. Delay_us(1);
  5. OLED_SDIN_Set();
  6. Delay_us(1);
  7. OLED_SDIN_Clr();
  8. Delay_us(1);
  9. OLED_SCLK_Clr();
  10. Delay_us(1);
  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. {
  6. OLED_ShowChar(x,y,chr[j],Char_Size);
  7. x+=8;
  8. if(x>120){x=0;y+=2;}
  9. j++;
  10. }
  11. }
形成显示效果的主程序为:
  1. int main(void)
  2. {
  3. AT32_Board_Init();
  4. AT32_OLED_Init();
  5. OLED_Init();
  6. OLED_Clear();
  7. OLED_ShowString(0,0,"AT-START-F407",16);
  8. OLED_ShowString(0,2,"OLED DISPLAY",16);   
  9. Delay_ms(1000u);
  10. while(1);
  11. }
有了OLED屏的显示功能,后边的数值显示任务就全交给它了!


GlenX 发表于 2022-12-15 14:38 | 显示全部楼层
这是仿真的I2C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

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