OLED的显示

一、I2C

I2C时序:时钟线SCL高电平下:SDA由高变低代表启动信号,开始发送数据;SCL高电平时,数据稳定,数据可以被读走,开始进行读操作,SCL低电平时,数据发生改变;每发送一个字节的数据都会产生应答信号;时钟线SCL低电平下:SDA由低变高代表传输数据结束
在这里插入图片描述
在这里插入图片描述
初始化: P6数据线(SDA) P7时钟线(SCL),选用P6和P7两根引脚,并给他们置为低电平
在这里插入图片描述
分别输出数据线和时钟线
在这里插入图片描述
在这里插入图片描述
开始信号:在空闲状态下先将时钟线置为低电平输出0,数据线置位高电平,再根据开始信号的触发条件:SCL高电平时,SDA由高变低,最后再拉低SCL(增加可靠性和准确行)

在这里插入图片描述
停止信号:SDA由低变高,原理同开始信号大差不差
在这里插入图片描述
ACK应答信号,假应答

发送一个字节

发送一个字节,时钟线拉低时,发送数据;拉高读取数据
void i2c_Send_Byte(char data)
{int i=0;for(i=7;i>=0;i--)//循环发送8位数据{i2c_SCL(0);//时钟线拉低i2c_SDA(data &(0x1<<i));//发送数据i2c_SCL(1);//时钟线拉高,让接受方接收数据i2c_SCL(0);//时钟线拉低}
}

发送多个字节

void i2c_Send_Bytes(int *p,int len)
{int i,j;for(j=0;j<len;j++){for(i=7;i>=0;i--){i2c_SCL(0);//时钟线拉低i2c_SDA(p[j] &(0x1<<i));i2c_SCL(1);//时钟线拉高,让接受方接收数据i2c_SCL(0);//时钟线拉低}i2c_Ack();//一个字节写完过后需要有应答信号}
}

二、oled

数据格式
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在执行到Control Byte,写命令或者写数据是根据D\C(为0时命令,1时数据),根据数据格式写
**加粗样式**
在这里插入图片描述

oled的初始化需要用到IIC(引脚的配置),随后先将oled关闭,最后再打开,中间根据数据手册而写

清空函数:防止有外部因素的影响

void Oled_clear(void)
{int page;//页int seg;//列for(page=0;page<8;page++)//按页遍历{for(seg=0;seg<128;seg++)//每一页的每一列{Oled_Write_cmd(0xB0+page);//页地址Oled_Write_cmd(0x00+(seg & 0xf));//设置seg列的低地址Oled_Write_cmd(0x10+((seg>>4)&0xf));//设置seg列的高地址Oled_Write_data(0x0);//清屏}}
}

每一页有8行
在这里插入图片描述
在这里插入图片描述

设置行
在这里插入图片描述
低位与高位
在这里插入图片描述
显示数据:32列需要使用4页,32-64防止数据的覆盖

unsigned char buff[8][32]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xE0,0x3C,0x18,0x08,0x00,0x00,0x00,0x00,0xFC,0xF8,0x08,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0x60,0x40,0x00,0x00,0x00,0x00},
{0x00,0x00,0x20,0x10,0x08,0x04,0x03,0xFF,0xFF,0x01,0x00,0x40,0x40,0x20,0x20,0x10,0xFF,0xFF,0x08,0x0C,0x06,0x02,0x03,0x01,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00},
{0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x4F,0x47,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0xFC,0x43,0x43,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x63,0x63,0x41,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x00,0x00,0x00,0x08,0x10,0x70,0xE0,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFC,0xFC,0x48,0x40,0x40,0x40,0x40,0x40,0x60,0x60,0x40,0x00,0x00,0x00},
{0x00,0x04,0x0C,0x18,0x78,0x30,0x00,0x80,0x78,0x24,0x20,0x20,0xA2,0x22,0x22,0x22,0x22,0x22,0x3F,0x3F,0x22,0x22,0x22,0x22,0x23,0xA3,0x22,0x30,0x30,0x20,0x00,0x00},
{0x00,0x40,0x40,0xC0,0xC0,0xE0,0x7C,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0x91,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x30,0x70,0x3F,0x1F,0x00,0x00,0x00,0x00,0x00}};void Oled_Display(void)
{int page;//页int seg;//列for(page=0;page<4;page++)//按页遍历{for(seg=0;seg<32;seg++)//每一页的每一列{Oled_Write_cmd(0xB0+page);//页地址Oled_Write_cmd(0x00+(seg & 0xf));//设置seg列的低地址Oled_Write_cmd(0x10+((seg>>4)&0xf));//设置seg列的高地址Oled_Write_data(buff[page][seg]);//显示数据}}for(page=0;page<4;page++)//按页遍历{for(seg=32;seg<64;seg++)//每一页的每一列{Oled_Write_cmd(0xB0+page);//页地址Oled_Write_cmd(0x00+(seg & 0xf));//设置seg列的低地址Oled_Write_cmd(0x10+((seg>>4)&0xf));//设置seg列的高地址Oled_Write_data(buff[page+4][seg-32]);//显示数据//当seg从 32 开始计数时,通过seg - 32可以将其转换为从 0 开始的索引,//这样就能正确地从buff数组中获取与当前 OLED 页面内列位置相对应的数据}}
}

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

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

相关文章

VMware运维效率提升50%,RVTools管理更简单

RVTools 是一款专为 VMware 虚拟化环境量身打造的高效管理工具&#xff0c;基于 .NET 4.7.2 框架开发&#xff0c;并与 VMware vSphere Management SDK 8.0 和 CIS REST API 深度集成&#xff0c;能够全面呈现虚拟化平台的各项关键数据。该工具不仅能够详细列出虚拟机、CPU、内…

JS 中 json数据 与 base64、ArrayBuffer之间转换

JS 中 json数据 与 base64、ArrayBuffer之间转换 json 字符串进行 base64 编码 function jsonToBase64(json) {return Buffer.from(json).toString(base64); }base64 字符串转为 json 字符串 function base64ToJson(base64) {try {const binaryString atob(base64);const js…

介绍 C++ 中的智能指针及其应用:以 PyTorch框架自动梯度AutogradMeta为例

介绍 C 中的智能指针及其应用&#xff1a;以 AutogradMeta 为例 在 C 中&#xff0c;智能指针&#xff08;Smart Pointer&#xff09;是用于管理动态分配内存的一种工具。它们不仅自动管理内存的生命周期&#xff0c;还能帮助避免内存泄漏和野指针等问题。在深度学习框架如 Py…

python +t kinter绘制彩虹和云朵

python t kinter绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

Zabbix5.0版本(监控Nginx+PHP服务状态信息)

目录 1.监控Nginx服务状态信息 &#xff08;1&#xff09;通过Nginx监控模块&#xff0c;监控Nginx的7种状态 &#xff08;2&#xff09;开启Nginx状态模块 &#xff08;3&#xff09;配置监控项 &#xff08;4&#xff09;创建模板 &#xff08;5&#xff09;用默认键值…

Python入门教程 —— 字符串

字符串介绍 字符串可以理解为一段普通的文本内容,在python里,使用引号来表示一个字符串,不同的引号表示的效果会有区别。 字符串表示方式 a = "Im Tom" # 一对双引号 b = Tom said:"I am Tom" # 一对单引号c = Tom said:"I\m Tom" # 转义…

AcWing练习题:差

读取四个整数 A,B,C,D&#xff0c;并计算 (AB−CD)的值。 输入格式 输入共四行&#xff0c;第一行包含整数 A&#xff0c;第二行包含整数 B&#xff0c;第三行包含整数 C&#xff0c;第四行包含整数 D。 输出格式 输出格式为 DIFERENCA X&#xff0c;其中 X 为 (AB−CD) 的…

小程序添加购物车业务逻辑

数据库设计 DTO设计 实现步骤 1 判断当前加入购物车中的的商品是否已经存在了 2 如果已经存在 只需要将数量加一 3 如果不存在 插入一条购物车数据 4 判断加到本次购物车的是菜品还是套餐 Impl代码实现 Service public class ShoppingCartServiceImpl implements Shoppin…

如何在谷歌浏览器中使用自定义搜索快捷方式

在数字时代&#xff0c;浏览器已经成为我们日常生活中不可或缺的一部分。作为最常用的浏览器之一&#xff0c;谷歌浏览器凭借其简洁的界面和强大的功能深受用户喜爱。本文将详细介绍如何自定义谷歌浏览器的快捷工具栏&#xff0c;帮助你更高效地使用这一工具。 一、如何找到谷歌…

Python 3 与 Python 2 的主要区别

文章目录 1. 语法与关键字print 函数整数除法 2. 字符串处理默认字符串类型字符串格式化 3. 输入函数4. 迭代器和生成器range 函数map, filter, zip 5. 标准库变化urllib 模块configparser 模块 6. 异常处理7. 移除的功能8. 其他重要改进数据库操作多线程与并发类型注解 9. 总结…

关于IDE的相关知识之二【插件推荐】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于ide插件推荐的相关内容&#xff01…

如何获取稳定高效的动态代理?

在数据采集的领域&#xff0c;动态代理IP是我们探索网络世界的小助手&#xff0c;它不仅帮助我们高效地收集信息&#xff0c;还能在保护数据安全方面发挥重要作用。但如何在众多选择中找到最适合的那个——即稳定且高效的动态代理也是一大难题。 明确你的需求 首先&#xff0…

基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

原生js封装ajax请求以及css实现提示效果和禁止点击效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0,user-scalableno"><title>本地模式网络切换</title>&l…

Pytorch的自动求导模块

文章目录 torch.autograd.backward()基本用法非标量张量的反向传播保留计算图指定输入张量高阶梯度计算 与 y.backward() 的区别torch.autograd.grad()基本用法非标量张量的梯度高阶梯度计算多输入、多输出的梯度计算未使用的输入张量保留计算图 与 backward() 的区别 torch.au…

Mac OS

本文来自智谱清言 ------ Mac OS&#xff08;现称为macOS&#xff09;是苹果公司开发和销售的操作系统&#xff0c;自1984年推出以来&#xff0c;它已经经历了多次重大的演变和发展。 起源&#xff1a;Mac OS 1.0的诞生 - 1984年&#xff0c;苹果发布了Macintosh计算机&#…

spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验

文章目录 一、JSR 303后台数据校验1.1 什么是 JSR303&#xff1f;1.2 为什么使用 JSR 303&#xff1f; 二、Spring Boot 中使用数据校验2.1 基本注解校验2.1.1 使用步骤2.1.2 举例Valid注解全局统一异常处理 2.2 分组校验2.2.1 使用步骤2.2.2 举例Validated注解Validated和Vali…

ubuntu常用快捷键和变量记录

alias b‘cd …/’ alias bb‘cd …/…/’ alias bbb‘cd …/…/…/’ alias bbbb‘cd …/…/…/…/’ alias bbbbb‘cd …/…/…/…/…/’ alias bbbbbb‘cd …/…/…/…/…/…/’ alias apkinfo‘aapt dump badging’ alias npp‘notepad-plus-plus’ export ANDROID_HOME/h…

AWS S3文件存储工具类

pom依赖 <!--aws-s3--> <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3</artifactId><version>1.12.95</version></dependency>S3Utils import cn.hutool.core.util.ZipUtil; import com.a…

【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】

文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1&#xff1a;检测单个信号的 Stuck-at Fault示例 2&#xff1a;针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…