首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

stm32F4系列OLED驱动代码(4针脚I2C)

硬件开发 4.53KB 36 需要积分: 1
立即下载

资源介绍:

由江科大f103的oled驱动代码修改而来,通过添加延时使软件模拟的I2C速率匹配OLEDI2C通信速率 直接将oled代码添加到工程文件即可,代码中的延时函数没有的话需要自己添加,压缩包内只有oled,oledfont文件
#include "stm32f4xx.h" // Device header #include "delay.h" #include "OLED_Font.h" /*引脚配置*/ #define OLED_W_SCL(x) GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(x)) #define OLED_W_SDA(x) GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(x)) /*引脚初始化*/ void OLED_I2C_Init(void) { // GPIO_InitTypeDef GPIO_InitStructure; // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); // // // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // GPIO_Init(GPIOB, &GPIO_InitStructure); // // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; // GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; // GPIO_Init(GPIOE, &GPIO_InitStructure); GPIO_InitTypeDef GPIO_InitStruct; //¶¨Òå³õʼ»¯GPIOÐÅÏ¢½á¹¹Ìå±äÁ¿ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //ʹÄÜGPIOF×éʱÖÓ GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9 ; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //Êä³öģʽ GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //Êä³öÍÆÍì GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //Êä³öËÙÂÊ50MHz GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; ; //´øÉÏÀ­Êä³ö GPIO_Init(GPIOB,&GPIO_InitStruct); OLED_W_SCL(1); OLED_W_SDA(1); } /** * @brief I2C开始 * @param 无 * @retval 无 */ void OLED_I2C_Start(void) { OLED_W_SDA(1); delay_us(1); OLED_W_SCL(1); delay_us(1); OLED_W_SDA(0); delay_us(1); OLED_W_SCL(0); delay_us(1); } /** * @brief I2C停止 * @param 无 * @retval 无 */ void OLED_I2C_Stop(void) { OLED_W_SDA(0); delay_us(1); OLED_W_SCL(1); delay_us(1); OLED_W_SDA(1); delay_us(1); } /** * @brief I2C发送一个字节 * @param Byte 要发送的一个字节 * @retval 无 */ void OLED_I2C_SendByte(uint8_t Byte) { uint8_t i; for (i = 0; i < 8; i++) { OLED_W_SDA(Byte & (0x80 >> i)); delay_us(1); OLED_W_SCL(1); delay_us(1); OLED_W_SCL(0); delay_us(1); } OLED_W_SCL(1); delay_us(1);//额外的一个时钟,不处理应答信号 OLED_W_SCL(0); delay_us(1); } /** * @brief OLED写命令 * @param Command 要写入的命令 * @retval 无 */ void OLED_WriteCommand(uint8_t Command) { OLED_I2C_Start(); OLED_I2C_SendByte(0x78); //从机地址 OLED_I2C_SendByte(0x00); //写命令 OLED_I2C_SendByte(Command); OLED_I2C_Stop(); } /** * @brief OLED写数据 * @param Data 要写入的数据 * @retval 无 */ void OLED_WriteData(uint8_t Data) { OLED_I2C_Start(); OLED_I2C_SendByte(0x78); //从机地址 OLED_I2C_SendByte(0x40); //写数据 OLED_I2C_SendByte(Data); OLED_I2C_Stop(); } /** * @brief OLED设置光标位置 * @param Y 以左上角为原点,向下方向的坐标,范围:0~7 * @param X 以左上角为原点,向右方向的坐标,范围:0~127 * @retval 无 */ void OLED_SetCursor(uint8_t Y, uint8_t X) { OLED_WriteCommand(0xB0 | Y); //设置Y位置 OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位 OLED_WriteCommand(0x00 | (X & 0x0F)); //设置X位置低4位 } /** * @brief OLED清屏 * @param 无 * @retval 无 */ void OLED_Clear(void) { uint8_t i, j; for (j = 0; j < 8; j++) { OLED_SetCursor(j, 0); for(i = 0; i < 128; i++) { OLED_WriteData(0x00); } } } /** * @brief OLED显示一个字符 * @param Line 行位置,范围:1~4 * @param Column 列位置,范围:1~16 * @param Char 要显示的一个字符,范围:ASCII可见字符 * @retval 无 */ void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) { uint8_t i; OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分 for (i = 0; i < 8; i++) { OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容 } OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分 for (i = 0; i < 8; i++) { OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容 } } /** * @brief OLED显示字符串 * @param Line 起始行位置,范围:1~4 * @param Column 起始列位置,范围:1~16 * @param String 要显示的字符串,范围:ASCII可见字符 * @retval 无 */ void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) { uint8_t i; for (i = 0; String[i] != '\0'; i++) { OLED_ShowChar(Line, Column + i, String[i]); } } /** * @brief OLED次方函数 * @retval 返回值等于X的Y次方 */ uint32_t OLED_Pow(uint32_t X, uint32_t Y) { uint32_t Result = 1; while (Y--) { Result *= X; } return Result; } /** * @brief OLED显示数字(十进制,正数) * @param Line 起始行位置,范围:1~4 * @param Column 起始列位置,范围:1~16 * @param Number 要显示的数字,范围:0~4294967295 * @param Length 要显示数字的长度,范围:1~10 * @retval 无 */ void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) { uint8_t i; for (i = 0; i < Length; i++) { OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0'); } } /** * @brief OLED显示数字(十进制,带符号数) * @param Line 起始行位置,范围:1~4 * @param Column 起始列位置,范围:1~16 * @param Number 要显示的数字,范围:-2147483648~2147483647 * @param Length 要显示数字的长度,范围:1~10 * @retval 无 */ void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) { uint8_t i; uint32_t Number1; if (Number >= 0) { OLED_ShowChar(Line, Column, '+'); Number1 = Number; } else { OLED_ShowChar(Line, Column, '-'); Number1 = -Number; } for (i = 0; i < Length; i++) { OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0'); } } /** * @brief OLED显示数字(十六进制,正数) * @param Line 起始行位置,范围:1~4 * @param Column 起始列位置,范围:1~16 * @param Number 要显示的数字,范围:0~0xFFFFFFFF * @param Length 要显示数字的长度,范围:1~8 * @retval 无 */ void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) { uint8_t i, SingleNumber; for (i = 0; i < Length; i++) { SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16; if (SingleNumber < 10) { OLED_ShowChar(Line, Column + i, SingleNumber + '0'); } else { OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A'); } } } /** * @brief OLED显示数字(二进制,正数) * @param Line 起始行位置,范围:1~4 * @param Column 起始列位置,范围:1~16 * @param Number 要显示的数字,范围:0~1111 1111 1111 1111 * @param Length 要显示数字的长度,范围:1~16 * @retval 无 */ void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) { uint8_t i; for (i = 0; i < Length; i++) { OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0'); } } /** * @brief OLED初始化 * @param 无 * @retval 无 */ void OLED_Init(void) { delay_ms (20); uint32_t i, j; for (i = 0; i < 1000; i++) //上电延时 { for (j = 0; j < 1000; j++); } OLED_I2C_Init(); //端口初始化 OLED_WriteCommand(0xAE); //关闭显示 OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 OLED_WriteCommand(0x80); OLED_WriteCommand(0xA8); //设置多路复用率

资源文件列表:

OLED.zip 大约有3个文件
  1. OLED.c 8.73KB
  2. OLED.h 567B
  3. OLED_Font.h 8.94KB
0评论
提交 加载更多评论
其他资源 C++ 鼠标轨迹算法API和Demo
参考博客文章:https://blog.csdn.net/ZhaDeNianQu/article/details/140584869 AI大模型通过学习大量的人类鼠标操作数据,能够识别和模拟出自然且具有个体差异的鼠标轨迹。以下是实现这一技术的关键步骤: 数据收集:收集不同玩家在各种游戏环境中的鼠标操作数据,包括移动速度、停顿、加速度等。 模型训练:利用深度学习算法,训练AI模型识别鼠标操作中的模式和规律。 轨迹生成:在给定起点和终点的情况下,AI模型能够生成符合人类操作习惯的鼠标轨迹。 鼠标轨迹api底层实现采用C/C++语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼容性。 通过DLL封装,开发者可以在C++、Python、易语言、按键精灵等多种编程语言中使用鼠标轨迹模拟技术。这种封装方式提供了一种简便的接口,使得不同背景的开发者都能够轻松集成和使用这一技术。
Godot小游戏(1.0)
Godot小游戏(1.0)
JDK-API 中文版文档
JDK_API 中文版文档
C语言+数据结构学期课程设计《员工管理系统》
关于一个员工管理系统的开发,详细描述了如何构建一个具备基本功能的员工信息管理软件。系统的核心目标是有效地组织和维护员工的个人及工作相关数据,确保数据的准确性和易于访问性。 系统的主要特点包括: 员工信息管理:每个员工的记录包含编号、姓名、性别、出生日期、学历、职务、电话号码和住址。 数据持久化:系统能够将员工数据保存到文件中,以便在程序关闭后数据不会丢失,并且在下次启动时能从文件中恢复这些数据。 数据检索:支持按ID或姓名查找员工的具体信息。 数据更新:允许管理员根据员工的编号修改其个人信息。 数据录入:具备添加新员工信息的功能。 数据移除:可以按员工编号删除不再在职的员工记录。 数据排序:能够按照员工的ID、姓名或出生日期对所有员工信息进行排序。 数据展示:可以列出所有员工的信息,或者展示排序后的员工列表。 在技术实现上,文档采用了C语言编程,并利用了动态顺序表作为存储结构,这使得数据的增删改查更加高效。此外,还设计了一系列函数来实现上述各项功能
瑞昱RTL8152B量产软件.zip
包含MAC地址烧录软件,网络诊断工具,网卡驱动
24年最新UI云开发壁纸小程序源码支持用户投稿
激励广告替换: 全局搜索adunit-8b7aecba30b3f324替换成你的 bannner广告替换 全局搜索adunit-8e509190606cd228替换成你的 插屏广告替换 全局搜索adunit-4e164272962ed757替换成你的 视频广告替换 全局搜索adunit-8f852f6b8fb762d7替换成你的 原生模板广告替换 全局搜索adunit-794e1cbc5d71040f替换成你的 ###################################################################### 附带文本教学及视频教程安装方法以linux为例: 1、建议在服务器上面安装宝塔面板,以便操作,高逼格技术员可以忽略这步操作。 2、把安装包文件解压到根目录,同时建立数据库,把数据文件导入数据库 3、修改核心文件config/inc_config.php把数据库信息替换成你的 4、解析域名并且设置域名指向 5、修改伪静态规则(参考安装包内的文件) 6、效验域名能否正常打开,至此安装完毕注* PHP版本请设置5.3~5.5 7、其它版本未测试
24年最新UI云开发壁纸小程序源码支持用户投稿 24年最新UI云开发壁纸小程序源码支持用户投稿 24年最新UI云开发壁纸小程序源码支持用户投稿
2024最新PHP在线云加密平台源码
首先上传本程序到你的空间上面,配置数据库信息,修改根目录下lib文件夹下的config.php文件,然后就不需要配置什么信息了。 接下来就是导入数据库,导入完成之后,网站即可访问,后台路径/admin 默认登录名:admin 密码:admin 如果想要修改密码,请使用: 你自己的密码+dfghjklg 然后md5加密,例如我想要登录密码为123456 就把123456dfghjklg进行md5加密,就得到这样一串秘钥:1860afdf5e997838ef3ce89bc8409542 接下来直接复制他,直接 替换掉 附带文本教学及视频教程安装方法以linux为例: 1、建议在服务器上面安装宝塔面板,以便操作,高逼格技术员可以忽略这步操作。 2、把安装包文件解压到根目录,同时建立数据库,把数据文件导入数据库 3、修改核心文件config/inc_config.php把数据库信息替换成你的 4、解析域名并且设置域名指向 5、修改伪静态规则(参考安装包内的文件) 6、效验域名能否正常打开,至此安装完毕注* PHP版本请设置5.3~5.5 7、其它版本未测试、数据文件导入注意编码UTF-8
2024年最新易校网校园综合跑腿小程序源码修复运营版
2024年最新易校网校园综合跑腿小程序源码修复运营版 校园网跑腿小程序源码需要准备 1.小程序 2.服务器(推荐配置2h4g3m) 3.域名(需要备案) 搭建教程: 使用服务器搭建宝塔 安装pm2管理器 新建项目上传服务器接口 修改/pub/config/config.js 数据库信息 小程序appID 正常启动后设置映射 随便解析一个域名 域名需要开通ssl 若出现extends layout block content h1= title p Welcome to #(title)即代表服务端部署成功。 打开服务器后台修改src/assets/js/yzy.js 里面的网址改成你的然后打包 上传服务器后台到/public目录下 网址上传完成后打开小程序开发者工具 找到util.js里面的网站改成你的网站打包上传即可. ###################################################################### 亲测有效。文件包含(服务端,客户端,前端)