本帖最后由 jinglixixi 于 2020-9-13 23:57 编辑
好的开发板还需有一个好的显示,因为HC32L072属于节能型芯片,故为其配备了一个OLED屏来显示。 该OLED屏采用I2C接口,因此也十分节省I/O资源。 OLED屏与MCU的连接关系为: SCLK---PB8 SDIN ---PB9
使相应引脚输出高低的语句为: #define OLED_SCLK_Set() Gpio_SetIO(GpioPortB, GpioPin8); #define OLED_SCLK_Clr() Gpio_ClrIO(GpioPortB, GpioPin8);
#define OLED_SDIN_Set() Gpio_SetIO(GpioPortB, GpioPin9); #define OLED_SDIN_Clr() Gpio_ClrIO(GpioPortB, GpioPin9);
配置引脚为输出功能的函数为: static void App_OLEDInit(void)
{
stc_gpio_cfg_t stcGpioCfg;
///< 打开GPIO外设时钟门控
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
stcGpioCfg.enDir = GpioDirOut;
///< 端口上下拉配置->下拉
stcGpioCfg.enPu = GpioPuDisable;
stcGpioCfg.enPd = GpioPdEnable;
Gpio_ClrIO(GpioPortB, GpioPin8);
Gpio_ClrIO(GpioPortB, GpioPin9);
Gpio_Init(GpioPortB, GpioPin8, &stcGpioCfg);
Gpio_Init(GpioPortB, GpioPin9, &stcGpioCfg);
}
OLED屏的初始化函数为: void OLED_Init(void)
{
OLED_SCLK_Set();
OLED_SDIN_Set();
delay1ms(800);
OLED_WR_Byte(0xAE,OLED_CMD);//--display off
OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
OLED_WR_Byte(0x81,OLED_CMD); // contract control
OLED_WR_Byte(0xFF,OLED_CMD);//--128
OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
OLED_WR_Byte(0x1F,OLED_CMD);//--1/32 duty
OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
OLED_WR_Byte(0x00,OLED_CMD);//
OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
OLED_WR_Byte(0xf0,OLED_CMD);//
OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
OLED_WR_Byte(0x22,OLED_CMD);//
OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
OLED_WR_Byte(0x02,OLED_CMD);//
OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
OLED_WR_Byte(0x49,OLED_CMD);//
OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
OLED_WR_Byte(0x14,OLED_CMD);//
OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
OLED_Clear();
}
实现显示效果的主程序如下: int32_t main(void)
{
App_OLEDInit();
OLED_Init();
OLED_ShowString(0,0,"HC32L072 TEST",16);
OLED_ShowString(0,2,"OLED Display",16);
while(1);
}
经程序的编译和下载,其运行的效果如图所示。 显示效果图
演示代码文件:
|