[方案相关]

【HC32L196PCTA测评】+OLED屏显示篇

[复制链接]
1086|11
手机看帖
扫描二维码
随时随地手机跟帖
jinglixixi|  楼主 | 2023-8-7 10:20 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-8-7 10:22 编辑

HC32L196开发板上配有一个笔段式的液晶屏,但它的信息表现力还是较为有限,且占用引脚资源较多。为此,可以I2C接口的OLED屏来承担显示任务,其与开发板的连接关系为:
PA11SCL
PA12SDA
使这2个引脚输出高低电平的语句定义为:
#define OLED_SCLK_Set()   Gpio_SetIO(GpioPortA, GpioPin11)
#define OLED_SCLK_Clr()   Gpio_ClrIO(GpioPortA, GpioPin11)
#define OLED_SDIN_Set()   Gpio_SetIO(GpioPortA, GpioPin12)
#define OLED_SDIN_Clr()   Gpio_ClrIO(GpioPortA, GpioPin12)

1.jpg
1  使用接口


配置这2个引脚为输出功能的函数为:
void App_OledInit(void)
{
    stc_gpio_cfg_t stcGpioCfg;
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
    stcGpioCfg.enDir = GpioDirOut;
    ///< 端口上下拉配置->下拉
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdEnable;
    ///< GPIO IO OLED端口初始化
    Gpio_Init(GpioPortA, GpioPin11, &stcGpioCfg);
    Gpio_Init(GpioPortA, GpioPin12, &stcGpioCfg);
}

该显示屏的初始化函数为:
void OLED_Init(void)
{
    Write_IIC_Command(0xAE);
    Write_IIC_Command(0x20);
    Write_IIC_Command(0x10);
    Write_IIC_Command(0xb0);
    Write_IIC_Command(0xc8);
    Write_IIC_Command(0x00);
    Write_IIC_Command(0x10);
    Write_IIC_Command(0x40);
    Write_IIC_Command(0x81);
    Write_IIC_Command(0xdf);
    Write_IIC_Command(0xa1);
    Write_IIC_Command(0xa6);
    Write_IIC_Command(0xa8);
    Write_IIC_Command(0x3F);
    Write_IIC_Command(0xa4);
    Write_IIC_Command(0xd3);
    Write_IIC_Command(0x00);
    Write_IIC_Command(0xd5);
    Write_IIC_Command(0xf0);
    Write_IIC_Command(0xd9);
    Write_IIC_Command(0x22);
    Write_IIC_Command(0xda);
    Write_IIC_Command(0x12);
    Write_IIC_Command(0xdb);
    Write_IIC_Command(0x20);
    Write_IIC_Command(0x8d);
    Write_IIC_Command(0x14);
    Write_IIC_Command(0xaf);
}

实现清屏处理的函数为:‘
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);
        }
}

实现字符显示功能的函数为:
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 {
                         OLED_Set_Pos(x,y);
                         for(i=0;i<6;i++)
                             OLED_WR_Byte(F6x8[c][i],OLED_DATA);
               }
}

实现字符串显示功能的函数为:
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
{
        unsigned char j=0;
        while (chr[j]!='\0')
        {               

显示显示功能测试的主程序为:
int32_t main(void)
{
    ///< LED端口初始化
    App_LedInit();
    App_OledInit();
    OLED_Init();
    OLED_Clear();
    OLED_ShowString(0,0,"HC32L196 TEST",16);
    OLED_ShowString(0,2,"OLED DISPLAY",16);        
    while(1)
    {
        ///< LED点亮
        Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
        delay1ms(1000);
        ///< LED关闭
        Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);
        delay1ms(1000);
    }
}

经程序的编译与下载,其显示效果如图2所示。
2.jpg
2  显示效果

使用特权

评论回复
guijial511| | 2023-8-7 16:10 | 显示全部楼层
楼主的OLED屏出镜率很高啊

使用特权

评论回复
jinglixixi|  楼主 | 2023-8-8 08:43 | 显示全部楼层
guijial511 发表于 2023-8-7 16:10
楼主的OLED屏出镜率很高啊

哈哈,OLED屏好使,是测试GPIO的最直接方式。

使用特权

评论回复
gaoyang9992006| | 2023-8-31 09:06 | 显示全部楼层
搞来搞去都是IO模拟,换成I2C+DMA啊,高效高速。

使用特权

评论回复
zhanglli| | 2023-8-31 21:19 | 显示全部楼层
是测试GPIO的最直接方式。

使用特权

评论回复
baiyunping333| | 2024-1-9 11:20 | 显示全部楼层
能漏个完整工程吗

使用特权

评论回复
lingyishanmen| | 2024-3-5 23:56 | 显示全部楼层

同求

使用特权

评论回复
lingyishanmen| | 2024-3-6 00:08 | 显示全部楼层
楼主能分享一下完整的工程吗,调了几天都没调出来...

使用特权

评论回复
yangxiaor520| | 2024-3-6 21:23 | 显示全部楼层
楼主的OLED贡献度很高啊

使用特权

评论回复
jinglixixi|  楼主 | 2024-3-7 09:21 | 显示全部楼层
哈哈

使用特权

评论回复
mdj-fish| | 2024-3-7 09:42 | 显示全部楼层
楼主能分享一下完整的工程吗,

使用特权

评论回复
楼主的屏幕控制方案很详细,学习一下

使用特权

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

本版积分规则

446

主题

2678

帖子

37

粉丝