[方案相关]【HC32L196PCTA测评】+OLED屏显示篇

在HC32L196开发板上配有一个笔段式的液晶屏,但它的信息表现力还是较为有限,且占用引脚资源较多。为此,可以I2C接口的OLED屏来承担显示任务,其与开发板的连接关系为:
PA11:SCL
PA12:SDA
使这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  使用接口

配置这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  显示效果)
---------------------
作者:jinglixixi
链接:https://bbs.21ic.com/icview-3319426-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值