【CH32V】CH32V307驱动4P_OLED

前言

  手上正好有 CH32V307 的板子就耍耍,网上4P的OLED例程也不少 4P OLED 屏驱动例程。在加上一些 STM32 标准库的知识,改改引脚定义,就可以将 OLED 屏连接到板子上进行显示了。当然,我也将会分享我整理好的库文件代码和完整的工程,以便那些需要的朋友们能够快速上手实现 OLED 屏的驱动和显示功能。希望这篇文章能对大家有所帮助。

环境

  • 软件:MounRiver Studio

  • OLED的电源连接就不说了

    SCL —> PB11 SDA —> PB10

流程

  • 文字流程

    1. 在主函数确保IIC所用到的双引脚完成初始化
    2. 在oled.h中修改IIC引脚的信息(格式如下)
      #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_11)//SCL
      #define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_11)
      #define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_10)//SDA
      #define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_10)
    3. 记得导入OLED.h库,和添加路径
      #include “oled.h”
    4. 记得初始化OLED
      OLED_Init();
      OLED_Clear();
  • 代码流程

    下面的基于我打包好的OLED屏库,文件的导入流程。

    • 在主函数确保IIC所用到的双引脚完成初始化。main.c

        void OLEDGPIO_Init()
        {
            GPIO_InitTypeDef  GPIO_InitStructure;
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        
            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
            GPIO_Init(GPIOB, &GPIO_InitStructure);
        }
      
    • 在oled.h中修改IIC引脚的信息(格式如下)。oled.h

      #define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_11)//SCL
      #define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_11)
      
      #define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_10)//SDA
      #define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_10)
      
    • 记得导入OLED.h库,复制到工程文件下和添加路径。

      #include "OLED.H"
      
      • 添加文件。

        在这里插入图片描述

      • 添加编译路径

        在左上方的工具栏中找到,文件 --> 属性,点击打开如下界面。点击文件系统后,在跳出的文件夹选择框中,添加包含的OLED库进来即可。

        在这里插入图片描述

    • 主程序中初始化OLED,多添加一条显示函数,来检验现象。

      OLED_Init();
      OLED_Clear();
      
      OLED_ShowString(0, 0, "HELLO WORLD!", 16);
      

      在这里插入图片描述

现象

上述代码烧录现象

在这里插入图片描述

工程

CH32V307VCT6_OLED_4P.zip 是完整的工程文件。OLED_4P.zip 是单独的OLED库。

链接:https://pan.baidu.com/s/1hvkX9I8dfp-AcSknL9_HQg 提取码:c6ro

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
以下是一个基于CH579M芯片和OLED屏幕的物联网应用程序,可以实时显示当前时间: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ch579.h> #include <ch579usb.h> #include <ch579i2c.h> #include <ch579uart.h> #include <ch579gpio.h> #include <ch579spi.h> #include <ch579adc.h> #include <ch579timer.h> #include <ch579iic.h> #include "oled.h" #define I2C_CLOCK_FREQ 400000 #define OLED_ADDR 0x78 /* OLED I2C接口初始化 */ void oled_i2c_init(void) { IICInit(I2C_CLOCK_FREQ); } /* OLED初始化 */ void oled_init(void) { oled_i2c_init(); OLED_Init(); } /* OLED屏幕显示时间 */ void oled_show_time(void) { /* 获取当前时间 */ RTC_TIME_Type rtcTime; RTC_GetTime(&rtcTime); /* 显示时间到OLED屏幕 */ OLED_ShowString(0, 0, "Time: ", 16); OLED_ShowNum(48, 0, rtcTime.hour, 2, 16); OLED_ShowChar(64, 0, ':', 16); OLED_ShowNum(80, 0, rtcTime.minute, 2, 16); OLED_ShowChar(96, 0, ':', 16); OLED_ShowNum(112, 0, rtcTime.second, 2, 16); OLED_Refresh_Gram(); } int main(void) { /* 初始化OLED屏幕 */ oled_init(); /* 初始化RTC时间 */ RTC_TIME_Type rtcTime; rtcTime.year = 2021; rtcTime.month = 9; rtcTime.day = 22; rtcTime.hour = 0; rtcTime.minute = 0; rtcTime.second = 0; RTC_SetTime(&rtcTime); /* 循环显示当前时间 */ while (1) { oled_show_time(); delay_ms(1000); } return 0; } ``` 上述代码中,我们使用了CH579M芯片的RTC模块来获取当前时间,并使用OLED屏幕显示当前时间。我们还需要引入一个OLED屏幕的库文件来实现OLED屏幕的初始化和显示功能,这里我们使用了一个名为"oled.h"的头文件,具体实现可以参考如下代码: ```c #ifndef __OLED_H__ #define __OLED_H__ #include <stdio.h> #include <string.h> #include <ch579i2c.h> void OLED_Init(void); void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size); void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size); void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size); void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t no); void OLED_DrawBMP(uint8_t x0, uint8_t y0,uint8_t x1, uint8_t y1,uint8_t BMP[]); void OLED_Set_Pos(unsigned char x, unsigned char y); void OLED_Fill(unsigned char fill_Data); void OLED_CLS(void); void OLED_ON(void); void OLED_OFF(void); void OLED_Refresh_Gram(void); #endif ``` 上述代码中,我们定义了一些函数来实现OLED屏幕的初始化、字符、字符串、数字、图像等显示功能,具体实现可以参考对应函数的定义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值