`
由于极海MINI开发板的外设资源极为简单,这就为功能拓展提供极大的空间。在功能扩展中,第一要务就是为它搭建一个人机交互的桥梁,否则单凭一两个LED来传达的信息实在太有限了。
本次的任务就是为开发板配置一个I2C接口的双色OLED屏,它较常规的数码管能显示更多的信息,且占用的系统引脚资源十分的少,几近是LED的等级。
这里OLED屏与MCU的连接关系为:
SCL---PB0
SDA---PB1
为便于OLED屏的功能移植,对相关引脚输出高低电平输出的引脚定义为:
#define OLED_SCLK_Clr() GPIO_ClearBit(GPIOB,GPIO_PIN_0)
#define OLED_SCLK_Set() GPIO_SetBit(GPIOB,GPIO_PIN_0)
#define OLED_SDIN_Clr() GPIO_ClearBit(GPIOB,GPIO_PIN_1)
#define OLED_SDIN_Set() GPIO_SetBit(GPIOB,GPIO_PIN_1)
故OLED屏驱动的辅助函数为:
- void IIC_Start()
- {
- OLED_SCLK_Set();
- OLED_SDIN_Set();
- OLED_SDIN_Clr();
- OLED_SCLK_Clr();
- }
- void IIC_Stop()
- {
- OLED_SCLK_Set();
- OLED_SDIN_Clr();
- OLED_SDIN_Set();
- }
- void IIC_Wait_Ack()
- {
- OLED_SCLK_Set();
- OLED_SCLK_Clr();
- }
复制代码
相应的OLED屏的引脚输出功能配置函数为:
- void APP_OLED_Init(void)
- {
- GPIO_Config_T gpioConfig;
- RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_GPIOB);
- gpioConfig.pin = GPIO_PIN_0;
- gpioConfig.mode = GPIO_MODE_OUT;
- gpioConfig.outtype = GPIO_OUT_TYPE_PP;
- gpioConfig.speed = GPIO_SPEED_50MHz;
- gpioConfig.pupd = GPIO_PUPD_NO;
- GPIO_Config(GPIOB, &gpioConfig);
- gpioConfig.pin = GPIO_PIN_1;
- GPIO_Config(GPIOB, &gpioConfig);
- }
复制代码
实现OLED屏清屏的函数为:
- void OLED_Clear(void)
- {
- uint8_t i,n;
- for(i=0;i<8;i++)
- {
- OLED_WR_Byte (0xb0+i,OLED_CMD);
- OLED_WR_Byte (0x00,OLED_CMD);
- OLED_WR_Byte (0x10,OLED_CMD);
- for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
- }
- }
复制代码
实现OLED屏字符显示的函数为:
- void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)
- {
- unsigned char c=0,i=0;
- c=chr-' ';
- if(x>Max_Column-1) {x=0;y=y+2;}
- if(Char_Size ==16)
- {
- OLED_Set_Pos(x,y);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
- OLED_Set_Pos(x,y+1);
- for(i=0;i<8;i++)
- OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
- }
- else
复制代码
显示图示效果的主程序为:
- int main(void)
- {
- APP_OLED_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(0,0,"APM32F030 TEST",16);
- OLED_ShowString(0,2,"OLED Display",16);
- OLED_ShowString(0,4,"jinglixixi",16);
- OLED_ShowString(0,6,"2020.12.6",16);
- while(1);
- }
复制代码
OLED屏显示效果
有了OLED屏的显示功能,后面我们就利用APM32F030R8自身所配置的RTC来现实一个RTC电子时钟。`
|