1162|3

1510

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【HC32F4A0开发板测评】+OLED屏显示驱动 [复制链接]

 
本帖最后由 jinglixixi 于 2023-2-21 09:50 编辑

前面解决了GPIO口的使用问题,就为GPIO驱动OLED屏打开了道路,只需控制高低电平的输出及时序的安排即可。

输出高低电平的语句定义如下:

#define SCL_high   GPIO_SetPins(GPIO_PORT_E,GPIO_PIN_04);

#define SCL_low    GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_04);

#define SDA_high   GPIO_SetPins(GPIO_PORT_E, GPIO_PIN_05);

#define SDA_low    GPIO_ResetPins(GPIO_PORT_E, GPIO_PIN_05);

 

对所用引脚的配置函数为:

static void OLED_APP(void)
{
    stc_gpio_init_t stcGpioInit;
    (void)GPIO_StructInit(&stcGpioInit);
    stcGpioInit.u16PinState = PIN_STAT_RST;
    stcGpioInit.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_04, &stcGpioInit);
    (void)GPIO_Init(GPIO_PORT_E, GPIO_PIN_05, &stcGpioInit);
}

 

实现字节数据发送的函数为:

void Write_IIC_Byte(unsigned char IIC_Byte)
{
    unsigned char i;
    unsigned char m,da;
    da=IIC_Byte;
    SCL_low;
    for(i=0;i<8;i++)
    {
        m=da;
        m=m&0x80;
        if(m==0x80)
        {
            SDA_high;
        }
        else  SDA_low;
        da=da<<1;
		Delay_us(100);
        SCL_high;
	    Delay_us(100);
        SCL_low;
		Delay_us(100);
     }
}

 

在不明确驱动效果的情况下,可使用清屏函数加以探测,其函数内容如下:

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(0x00,OLED_DATA);
    }
}

 

当然,在探测时需将OLED_WR_Byte(0x00,OLED_DATA)改为OLED_WR_Byte(0xf0,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);
      }
}

 

添加的汉字显示函数为:

void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no)
{
    uint8_t t,adder=0;
    OLED_Set_Pos(x,y);
    for(t=0;t<16;t++)
    {
         OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
         adder+=1;
    }
    OLED_Set_Pos(x,y+1);
    for(t=0;t<16;t++)
    {
         OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
         adder+=1;
    }
}

 

在下面主程序的控制下,即可达到下图的显示效果。

主程序内容:

int32_t main(void)
{
        LL_PERIPH_WE(LL_PERIPH_GPIO);
        OLED_APP();
        LL_PERIPH_WP(LL_PERIPH_GPIO);
	    OLED_Init();
        OLED_Clear();
		OLED_ShowString(20,0,"HC32F4A0SITB",16);
		OLED_ShowCHinese(20,2,3);
		OLED_ShowCHinese(36,2,4);
		OLED_ShowCHinese(52,2,5);
		OLED_ShowString(20,4,"jinglixixi",16);
		while(1);
}

 

 显示效果图

 

有了OLED屏的显示功能。后面就不用再完全依赖串口这个调试工具啦!

最新回复

软件IIC确实只需要能控制GPIO就够了。   详情 回复 发表于 2023-2-21 14:27
点赞 关注(1)
 
 

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 
感师老师分享这么好的经验,继续开spi屏!

点评

尽快完成!  详情 回复 发表于 2023-2-21 09:28
 
 
 

回复

1510

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
lugl4313820 发表于 2023-2-21 08:14 感师老师分享这么好的经验,继续开spi屏!

尽快完成!

 
 
 

回复

7159

帖子

2

TA的资源

版主

4
 

软件IIC确实只需要能控制GPIO就够了。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表