打印
[活动专区]

【AT-START-F407测评】+ OLED屏的显示驱动

[复制链接]
865|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2021-1-25 21:25 编辑

板载的外设资源稍显单薄,为此首要的任务是为它建立一个人机交互的窗口,这里是使用Arduino接口来接入一个I2C接口的单色OLED 屏。由于显示屏的引脚与Arduino接口存在差异,故将OLED屏的方向做了180度的旋转,以免连线的麻烦,OLED 屏的显示效果如下图所示。
                              
显示效果图
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
设置相关引脚为输出功能的配置函数为:
void AT32_OLED_Init(void)
{
GPIO_InitType GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOB, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = GPIO_Pins_8|GPIO_Pins_9;  
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_10MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}

由于输出速度比较快,因此相关的辅助函数需添加一点的延时,否则将影响显示,以函数IIC_Start()为例,其修改后的内容为“”
void IIC_Start()
{
OLED_SCLK_Set();
Delay_us(1);
OLED_SDIN_Set();
Delay_us(1);
OLED_SDIN_Clr();
Delay_us(1);
OLED_SCLK_Clr();
Delay_us(1);
}

实现字符串显示的函数为:
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
unsigned char j=0;
while (chr[j]!='\0')
{
OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
形成显示效果的主程序为:
int main(void)
{
AT32_Board_Init();
AT32_OLED_Init();
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"AT-START-F407",16);
OLED_ShowString(0,2,"OLED DISPLAY",16);   
Delay_ms(1000u);
while(1);
}
有了OLED屏的显示功能,后边的数值显示任务就全交给它了!


使用特权

评论回复
沙发
GlenX| | 2022-12-15 14:38 | 只看该作者
这是仿真的I2C

使用特权

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

本版积分规则

455

主题

2756

帖子

38

粉丝