【CH32V】CH32V307驱动4P_OLED

news2024/10/7 14:28:21

前言

  手上正好有 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/1NPBAkmuw3IrYTwbsLPGyBw 提取码:uzlg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【22】SCI易中期刊推荐——计算机 | 人工智能(中科院4区)

🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀 ✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨ 📚📚>>>人工智能 | 计算机视觉 | 深度学习Tricks | 第一时间送达<<<📚📚 🚀🚀🚀…

【java 基础二 】- 面向对象、类、接口等

一、定义 Java面向对象编程(OOP)是一种编程范式&#xff0c;其旨在通过将程序逻辑封装在对象中来使代码更易于理解和维护。Java是一种面向对象的编程语言&#xff0c;它支持封装、继承和多态等概念。以下是Java面向对象编程的核心概念&#xff1a; 对象(Object)&#xff1a;对…

BM7 算法

描述 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a; n≤10000n≤10000&#xff0c;1<结点值<100001<结点值<10000 要求&#xff1a;空间复杂度 O(1)O(1)&#x…

Linux进程间通信——管道,共享内存,消息队列,信号量

进程间通信 文章目录 进程间通信进程间通信的方式进程间通信的概念如何实现进程间通信管道什么是管道 进程间怎么通信 匿名管道pipe函数创建管道通信读写特征写慢读快写快读慢写端关闭&#xff0c;读端读完读端关闭&#xff0c;写端&#xff1f; 管道特征 命名管道命名管道特性…

近期学习论文总结 2

公众号&#xff1a;EDPJ 目录 0. 摘要 1. Artificial Fingerprinting for Generative Models: Rooting Deepfake Attribution in Training Data 1.1 核心思想 1.2 步骤 2. HyperDomainNet: Universal Domain Adaptation for Generative Adversarial Networks 2.1 核心思想…

使用Chat gpt提高Android开发效率

简介 在过去几周里&#xff0c;我进行了一项令人大开眼界的实验&#xff0c;将 Chat-GPT&#xff08;我使用的是 Bing Chat&#xff0c;它在后台使用了 GPT-4&#xff0c;并且可以免费使用&#xff09;融入到我的日常 Android 开发工作流程中&#xff0c;以探索它是否能够提高…

黑马Redis视频教程高级篇(安装OpenResty)

目录 一、安装 1.1、安装开发库 1.2、安装OpenResty仓库 1.3、安装OpenResty 1.4、安装opm工具 1.5、目录结构 1.6、配置nginx的环境变量 二、启动和运行 三、备注 一、安装 首先你的Linux虚拟机必须联网。 1.1、安装开发库 首先要安装OpenResty的依赖开发库&#…

Spring Bean生命周期之三级缓存循环依赖

文章目录 1 三级缓存1.1 引言1.2 三级缓存各个存放对象1.3 解决循环依赖条件1.3.1 解决循环依赖条件1.3.2 Sprin中Bean的顺序1.3.3 更改加载顺序1.3.3.1 构造方法依赖 (推荐)1.3.3.2 参数注入1.3.3.3 DependsOn(“xxx”)1.3.3.4 BeanDefinitionRegistryPostProcessor接口 1.3.4…

Pandas从入门到精通

一、什么是Pandas Pandas是基于NumPy的一种工具&#xff0c;该工具是为解决数据分析任务而创建的&#xff0c;Pandas提供了大量能使我们快速便捷的处理数据的功能 Pandas与出色的Jupyter 工具包和其他库相结合&#xff0c;Python中用于进行数据分析的环境在性能、生产率和协作…

javascript基础二十四:JavaScript中本地存储的方式有哪些?区别及应用场景?

一、方式 javaScript本地缓存的方法我们主要讲述以下四种&#xff1a; cookiesessionStoragelocalStorageindexedDB cookie Cookie&#xff0c;类型为「小型文本文件」&#xff0c;指某些网站为了辨别用户身份而储存在用户本地终端上的数据。是为了解决 HTTP无状态导致的问题…

IDEA插件Free Mybatis Tool

之前经常的操作是在 Mapper 接口中将接口名称复制一下&#xff0c;然后去查找对应的 XML 文件&#xff0c;打开后 CRTLF 查找对应的 xml 实现&#xff0c;整个过程效率很低下。搜了搜果然有前辈已经出了一款 IDEA 的插件解决了这个问题&#xff0c;把这个好用的跳转插件推荐给大…

leetcode 55.跳跃游戏

题目描述跳转至leetcode 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://lee…

软件测试-黑盒测试方法

这里写自定义目录标题 测试用例的定义和特征设计测试用例的基本准则黑盒测试用例设计的几种方法&#xff08;一&#xff09;等价类划分法等价类的类型 如何划分等价类等价类划分步骤等价类的划分原则等价类划分法设计测试用例的步骤 &#xff08;二&#xff09;边界值分析法边界…

oVirt 4.4.10三节点超融合集群安装配置及集群扩容(一)

环境 oVrit版本: 4.4.10 oVirt image: https://mirrors.aliyun.com/ovirt/ovirt-4.4/iso/ovirt-node-ng-installer/4.4.10-2022030308/el8/ovirt-node-ng-installer-4.4.10-2022030308.el8.iso?spma2c6h.25603864.0.0.46c8a3e6ELIYzK oVirt engine appliance: https://mirror…

osgViewer中的ScreenCaptureHandler、LODScaleHandler、HelpHandler事件处理器用法

目录 1. 前言 2. osgViewer::ScreenCaptureHandler 3. osgViewer::LODScaleHandler 4. osgViewer::HelpHandler 5. osgViewer::ThreadingHandler 1. 前言 osg为视景器的使用和调试提供了丰富的辅助组件&#xff0c;它们主要是以osg::ViewerBase的成员变量或交互事件处理器…

风险SQL 规范及案例

一、 原则 1、程序处理优先:数据库最容易也通常是一个系统的瓶颈,因此不要给数据库加压力,能够程序处理就程序处理。 2、简单操作数据库:一个系统越简单越稳定越不容易出问题, 因此要尽量简单使用数据库, 如SQL简单,事务小 3、数据存储评估:数据库资源宝贵,是很难水平…

饮用水污染预警系统的设计与开发(前后端分离)

1.饮用水污染预警系统的介绍 随着工业化和城市化进程的加速&#xff0c;水污染问题越来越引起人们的关注。饮用水是人类赖以生存的重要资源之一&#xff0c;饮用水污染对人类健康和社会经济发展产生的影响愈加突出。近年来&#xff0c;我国政府高度重视饮用水污染治理工作&…

车牌识别系统Python,基于深度学习CNN卷积神经网络算法

一、介绍 车牌识别系统&#xff0c;基于Python实现&#xff0c;通过TensorFlow搭建CNN卷积神经网络模型&#xff0c;对车牌数据集图片进行训练最后得到模型&#xff0c;并基于Django框架搭建网页端平台&#xff0c;实现用户在网页端输入一张图片识别其结果&#xff0c;并基于P…

自学黑客!一般人我劝你还是算了吧!

笔者本人 17 年就读于一所普通的本科学校&#xff0c;20 年 6 月在三年经验的时候顺利通过校招实习面试进入大厂&#xff0c;现就职于某大厂安全联合实验室。 我为啥说自学黑客&#xff0c;一般人我还是劝你算了吧&#xff01;因为我就是那个不一般的人。 首先我谈下对黑客&am…

Andriod开发 Adapter ArrayAdapter

一、Adapter Adapter 是一个非常重要的组件&#xff0c;用于将数据与视图进行绑定。 一般的用法是一个View中要显示多个布局相同但数据不同的item&#xff08;例如论坛界面的多个帖子&#xff0c;购物车里的多个商品&#xff09;。 可以将item的布局和数据输入Adapter&#…