OLED写入指令和数据

1.OLED写命令

        

写命令/数据的代码
 

/
*
1. start()
2. 写入 b0111 1000 0x78
3. ACK
4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
5. ACK
6. 写入指令/数据
7. ACK
8. STOP
*/
void Oled_Write_Cmd(char dataCmd)5.1.4 OLED的寻址模式
如何显示一个点?
有三种,分别位页地址模式,水平地址模式和垂直地址模式,可以通过一下表格进行配置
内存管理
{// 1. start()IIC_Start();//// 2. 写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);// 3. ACKIIC_ACK();// 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据IIC_Send_Byte(0x00);// 5. ACKIIC_ACK();//6. 写入指令/数据IIC_Send_Byte(dataCmd);//7. ACKIIC_ACK();//8. STOPIIC_Stop();
} void Oled_Write_Data(char dataData)
{// 1. start()IIC_Start();//// 2. 写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);// 3. ACKIIC_ACK();// 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据IIC_Send_Byte(0x00);// 5. ACKIIC_ACK();///6. 写入指令/数据IIC_Send_Byte(dataData);//7. ACKIIC_ACK();//8. STOPIIC_Stop();
}

2.OLED的寻址模式

        如何显示一个点?

有三种,分别位页地址模式,水平地址模式和垂直地址模式,可以通过一下表格进行配置内存管理

        页寻址模式

#include "reg52.h"
#include "intrins.h"sbit scl = P0^1;
sbit sda = P0^3;void IIC_Start()
{scl = 0; //防止雪花sda = 1;scl = 1;_nop_(); //耗时5个微妙sda = 0;_nop_();
}void IIC_Stop()
{scl = 0; //防止雪花sda = 0;scl = 1;_nop_(); //耗时5个微妙sda = 1;_nop_();
}char IIC_ACK()
{char flag;sda = 1;   //就在时钟脉冲9期间释放数据线_nop_();scl = 1;_nop_();flag = sda;_nop_();scl = 0;_nop_();return flag;}void IIC_Send_Byte(char dataSend) //发送一个字节
{int i;for(i = 0 ;i<8;i++){scl = 0;//scl 拉低,让sda做好数据准备sda = dataSend & 0x80;       // 1000 0000 获得datasend的最高位_nop_(); //发送数据建立的时间scl = 1;//scl拉高开始发送_nop_(); //数据发送时间scl = 0; // 发送完毕拉低_nop_();//dataSend = dataSend <<1;}
}void Oled_Write_Cmd(char dataCmd)
{//1.start()IIC_Start();//2.写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);//3.ACKIIC_ACK();//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据IIC_Send_Byte(0x00);//5.ACKIIC_ACK();//6.写入指令/数据IIC_Send_Byte(dataCmd);//7.ACKIIC_ACK();//8.STOPIIC_Stop();
}void Oled_Write_Data(char dataData)
{//1.start()IIC_Start();//2.写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);//3.ACKIIC_ACK();//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据IIC_Send_Byte(0x40);//5.ACKIIC_Stop();//6.写入指令/数据IIC_Send_Byte(dataData);//7.ACKIIC_ACK();//8.STOPIIC_Stop();
}//oled初始函数void Oled_Init(void){Oled_Write_Cmd(0xAE);//--display offOled_Write_Cmd(0x00);//---set low column addressOled_Write_Cmd(0x10);//---set high column addressOled_Write_Cmd(0x40);//--set start line addressOled_Write_Cmd(0xB0);//--set page addressOled_Write_Cmd(0x81); // contract controlOled_Write_Cmd(0xFF);//--128Oled_Write_Cmd(0xA1);//set segment remapOled_Write_Cmd(0xA6);//--normal / reverseOled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)Oled_Write_Cmd(0x3F);//--1/32 dutyOled_Write_Cmd(0xC8);//Com scan directionOled_Write_Cmd(0xD3);//-set display offsetOled_Write_Cmd(0x00);//Oled_Write_Cmd(0xD5);//set osc divisionOled_Write_Cmd(0x80);//Oled_Write_Cmd(0xD8);//set area color mode offOled_Write_Cmd(0x05);//Oled_Write_Cmd(0xD9);//Set Pre-Charge PeriodOled_Write_Cmd(0xF1);//Oled_Write_Cmd(0xDA);//set com pin configuartionOled_Write_Cmd(0x12);//Oled_Write_Cmd(0xDB);//set VcomhOled_Write_Cmd(0x30);//Oled_Write_Cmd(0x8D);//set charge pump enableOled_Write_Cmd(0x14);//Oled_Write_Cmd(0xAF);//--turn on oled panel
}//清屏函数
void Oled_Clear()
{unsigned char i,j;for(i = 0;i<8;i++){Oled_Write_Cmd(0xB0 + i);	//page0 -- page7//每个page从第0列开始Oled_Write_Cmd(0x00);Oled_Write_Cmd(0x10);//每个page从0列到127列,依次写入0,每写入数据,列地址自动偏移for(j = 0;j<128;j++){Oled_Write_Data(0);}}}void main()
{int a = 10;//1.Oled初始化Oled_Init();//2.选择一个位置//2.1选择页寻址模式Oled_Write_Cmd(0x20);Oled_Write_Cmd(0x02);Oled_Clear();//2.2选择PAGE0   1011 0000   0xB0Oled_Write_Cmd(0xB0);Oled_Write_Cmd(0x00);Oled_Write_Cmd(0x10);//3.显示一个点Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Cmd(0xB5);Oled_Write_Cmd(0x00);Oled_Write_Cmd(0x10);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Data(0x08);Oled_Write_Cmd(0xB0);Oled_Write_Cmd(0x0f);Oled_Write_Cmd(0x17);Oled_Write_Data(0x08);while(1); //程序不能退出
}

OLED显示一行字

        

思路:1.防止雪花bug

                2.    Oled_Write_Cmd(0xB0);  //page0开始
                       Oled_Write_Cmd(0x00);  //从第0列开始
                       Oled_Write_Cmd(0x10);

                        后面等同

#include "reg52.h"
#include "intrins.h"sbit scl = P0^1;
sbit sda = P0^3;void IIC_Start()
{scl = 0; //防止雪花sda = 1;scl = 1;_nop_(); //耗时5个微妙sda = 0;_nop_();
}void IIC_Stop()
{scl = 0; //防止雪花sda = 0;scl = 1;_nop_(); //耗时5个微妙sda = 1;_nop_();
}char IIC_ACK()
{char flag;sda = 1;   //就在时钟脉冲9期间释放数据线_nop_();scl = 1;_nop_();flag = sda;_nop_();scl = 0;_nop_();return flag;}void IIC_Send_Byte(char dataSend) //发送一个字节
{int i;for(i = 0 ;i<8;i++){scl = 0;//scl 拉低,让sda做好数据准备sda = dataSend & 0x80;       // 1000 0000 获得datasend的最高位_nop_(); //发送数据建立的时间scl = 1;//scl拉高开始发送_nop_(); //数据发送时间scl = 0; // 发送完毕拉低_nop_();//dataSend = dataSend <<1;}
}void Oled_Write_Cmd(char dataCmd)
{//1.start()IIC_Start();//2.写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);//3.ACKIIC_ACK();//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据IIC_Send_Byte(0x00);//5.ACKIIC_ACK();//6.写入指令/数据IIC_Send_Byte(dataCmd);//7.ACKIIC_ACK();//8.STOPIIC_Stop();
}void Oled_Write_Data(char dataData)
{//1.start()IIC_Start();//2.写入从机地址 b0111 1000 0x78IIC_Send_Byte(0x78);//3.ACKIIC_ACK();//4.cotrol byte : (0)(0) 000000 写入命令 (0)(1) 000000写入数据IIC_Send_Byte(0x40);//5.ACKIIC_Stop();//6.写入指令/数据IIC_Send_Byte(dataData);//7.ACKIIC_ACK();//8.STOPIIC_Stop();
}void Oled_Init(void){Oled_Write_Cmd(0xAE);//--display offOled_Write_Cmd(0x00);//---set low column addressOled_Write_Cmd(0x10);//---set high column addressOled_Write_Cmd(0x40);//--set start line addressOled_Write_Cmd(0xB0);//--set page addressOled_Write_Cmd(0x81); // contract controlOled_Write_Cmd(0xFF);//--128Oled_Write_Cmd(0xA1);//set segment remapOled_Write_Cmd(0xA6);//--normal / reverseOled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)Oled_Write_Cmd(0x3F);//--1/32 dutyOled_Write_Cmd(0xC8);//Com scan directionOled_Write_Cmd(0xD3);//-set display offsetOled_Write_Cmd(0x00);//Oled_Write_Cmd(0xD5);//set osc divisionOled_Write_Cmd(0x80);//Oled_Write_Cmd(0xD8);//set area color mode offOled_Write_Cmd(0x05);//Oled_Write_Cmd(0xD9);//Set Pre-Charge PeriodOled_Write_Cmd(0xF1);//Oled_Write_Cmd(0xDA);//set com pin configuartionOled_Write_Cmd(0x12);//Oled_Write_Cmd(0xDB);//set VcomhOled_Write_Cmd(0x30);//Oled_Write_Cmd(0x8D);//set charge pump enableOled_Write_Cmd(0x14);//Oled_Write_Cmd(0xAF);//--turn on oled panel
}void Oled_Clear()
{unsigned char i,j;for(i = 0;i<8;i++){Oled_Write_Cmd(0xB0 + i);	//page0 -- page7//每个page从第0列开始Oled_Write_Cmd(0x00);Oled_Write_Cmd(0x10);//每个page从0列到127列,依次写入0,每写入数据,列地址自动偏移for(j = 0;j<128;j++){Oled_Write_Data(0);}}}/*--  文字:  爱  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char a1[16] = {0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00};
code char a2[16] = {0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00};/*--  文字:  我  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char w1[16] = {0x20,0x24,0x24,0x24,0xFE,0x23,0x22,0x20,0x20,0xFF,0x20,0x22,0x2C,0xA0,0x20,0x00};
code char w2[16] = {0x00,0x08,0x48,0x84,0x7F,0x02,0x41,0x40,0x20,0x13,0x0C,0x14,0x22,0x41,0xF8,0x00};/*--  文字:  的  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char d1[16] = {0x00,0xF8,0x0C,0x0B,0x08,0x08,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0xF8,0x00,0x00};
code char d2[16] = {0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00,0x43,0x80,0x40,0x3F,0x00,0x00};/*--  文字:  宝  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char b1[16] = {0x10,0x4C,0x44,0x44,0x44,0x44,0x45,0xC6,0x44,0x44,0x44,0x44,0x44,0x54,0x0C,0x00};
code char b2[16] = {0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x54,0x64,0x44,0x40,0x40,0x00};/*--  文字:  贝  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char bb1[16] = {0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0xE2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00};
code char bb2[16] = {0x00,0x00,0x80,0x47,0x20,0x10,0x0C,0x03,0x08,0x10,0x20,0x47,0x80,0x00,0x00,0x00};/*--  文字:  猪  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
code char z1[16] = {0x22,0x14,0x08,0xF4,0x02,0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0x00};
code char z2[16] = {0x44,0x82,0x41,0x3F,0x00,0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00};void main()
{unsigned char i;//1.Oled初始化Oled_Init();//2.选择一个位置//2.1选择页寻址模式Oled_Write_Cmd(0x20);Oled_Write_Cmd(0x02);Oled_Clear();//2.2选择PAGE0   1011 0000   0xB0Oled_Write_Cmd(0xB0);  //page0Oled_Write_Cmd(0x00);  //从第0列开始Oled_Write_Cmd(0x10);for(i = 0; i<16;i++){Oled_Write_Data(a1[i]);}for(i = 0; i<16;i++){Oled_Write_Data(w1[i]);}for(i = 0; i<16;i++){Oled_Write_Data(d1[i]);}for(i = 0; i<16;i++){Oled_Write_Data(b1[i]);}for(i = 0; i<16;i++){Oled_Write_Data(bb1[i]);}for(i = 0; i<16;i++){Oled_Write_Data(z1[i]);}Oled_Write_Cmd(0xB1);  //page1Oled_Write_Cmd(0x00);  //从第0列开始Oled_Write_Cmd(0x10);for(i = 0; i<16;i++){Oled_Write_Data(a2[i]);}for(i = 0; i<16;i++){Oled_Write_Data(w2[i]);}for(i = 0; i<16;i++){Oled_Write_Data(d2[i]);}for(i = 0; i<16;i++){Oled_Write_Data(b2[i]);}for(i = 0; i<16;i++){Oled_Write_Data(bb2[i]);}for(i = 0; i<16;i++){Oled_Write_Data(z2[i]);}while(1); //程序不能退出
}

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

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

相关文章

YOLOv5改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码/涨点能手】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 在图像识别中&#xff0c;学习捕捉长距离关系是基础。现有的CNN模型通常通过增加深度来建立这种关系&#xff0c;但这种形式效率极低。因此&…

电脑msvcp140_atomic_wait.dll丢失的高效率解决方法,快速的一键修复

我们常常遇到各种不可预见的电脑故障问题&#xff0c;msvcp140_atomic_wait.dll丢失是一个常见的系统错误&#xff0c;它通常发生在Windows操作系统中&#xff0c;特别是当用户尝试运行依赖于Microsoft Visual C Redistributable的应用程序时。该问题可能导致程序崩溃或无法启动…

摸鱼大数据——Hive表操作——分桶表

1、介绍 分桶表特点: 会产生分桶文件。 效率上注意: 查询数据的时候如果使用了分桶字段那么会提升数据查询效率&#xff08;数据过滤where、join、分组、抽样查询&#xff09;&#xff1b;否则会进行全表扫描 分桶与分区的区别: 1- 分桶字段必须是原有的字段名称 2-…

Linux驱动开发笔记(二) 基于字符设备驱动的GPIO操作

文章目录 前言一、设备驱动的作用与本质1. 驱动的作用2. 有无操作系统的区别 二、内存管理单元MMU三、相关函数1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知识1. GPIO的寄存器进行读写操作流程2. 引脚复用2. 定义GPIO寄存器物理地址 五、…

应急通信保障之多链路聚合通信设备在应急救援实施中的解决方案

在当今信息化社会&#xff0c;应急通信保障已成为各类救援任务中不可或缺的一环。尤其在复杂多变的应急救援现场&#xff0c;如何确保通信畅通、信息传递及时&#xff0c;直接关系到救援行动的成败。近年来&#xff0c;多链路聚合通信设备以其独特的优势&#xff0c;逐渐在应急…

史上最全网络安全面试题+答案

1、什么是SQL注入攻击 前端代码未被解析被代入到数据库导致数据库报错 2、什么是XSS攻击 跨站脚本攻击 在网页中嵌入客户端恶意脚本&#xff0c;常用s语言&#xff0c;也会用其他脚本语言 属于客户端攻击&#xff0c;受害者是用户&#xff0c;网站管理员也属于用户&#xf…

金融反欺诈指南:车险欺诈为何如此猖獗?

目录 车险欺诈猖獗的原因 车险欺诈的识别难点 多重合作打击车险欺诈 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 青岛市人民检察院在其官方微信公众号上发布的梁某保险诈骗案显示&#xff0c;2020 年以来&#xff0c;某汽修厂负责人梁某、某汽车服务公司负责人孙某&…

地理信息系统(GIS)软件的最新进展

在数字化转型的浪潮中&#xff0c;地理信息系统&#xff08;GIS&#xff09;作为连接现实与数字世界的桥梁&#xff0c;其软件和技术的每一次迭代升级都在推动着空间信息处理和分析能力的飞跃。作为地理信息与遥感领域的探索者&#xff0c;本文将带您深入了解GIS软件的最新进展…

大数据报告有什么作用?查询方式一般有几种?

随着互联网金融的飞速发展&#xff0c;网络借贷已经成为了一种常见的融资方式。然而&#xff0c;如何在众多的平台中做出正确的选择&#xff0c;避免风险并实现最大利益&#xff0c;这就需要一份具有参考价值的大数据报告。本文将详细阐述大数据报告的作用及查询方式的几种方式…

FreeRTOS【9】计数信号量使用

1.开发背景 FreeRTOS 基于上一篇了解了二值信号量后&#xff0c;如果需要设计需要累计信号量的次数就不行了&#xff0c;所以有了计数信号量&#xff0c;可以设置计数的最大值。同样&#xff0c;可以理解二值信号量是计数信号量的一种特例&#xff0c;即二值信号量是计数信号量…

【NumPy】全面解析flatten函数:简化数组变平操作

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

企业为何广泛应用数据可视化?解析其背后原因

数据可视化为何能在企业当中广泛应用&#xff1f;这是一个值得探讨的话题。在当今信息爆炸的时代&#xff0c;企业每天都会产生和处理大量的数据&#xff0c;这些数据蕴含着丰富的信息和潜在的商业价值。然而&#xff0c;面对海量数据&#xff0c;如何高效地分析、理解和利用它…

IO系列(九) -什么是零拷贝

一、摘要 相信不少的网友&#xff0c;在很多的博客文章里面&#xff0c;已经见到过零拷贝这个词&#xff0c;会不禁的发出一些疑问&#xff0c;什么是零拷贝&#xff1f; 从字面上我们很容易理解出&#xff0c;零拷贝包含两个意思&#xff1a; 拷贝&#xff1a;就是指数据从…

视频汇聚EasyCVR视频监控平台GA/T 1400协议特点及应用领域解析

GA/T 1400协议&#xff0c;也被称为视图库标准&#xff0c;全称为《公安视频图像信息应用系统》。这一标准在公安系统中具有举足轻重的地位&#xff0c;它详细规定了公安视频图像信息应用系统的设计原则、系统结构、视频图像信息对象、统一标识编码、系统功能、系统性能、接口协…

探索RS与AES加密技术:从经典到现代

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、MD5加密技术&#xff1a;经典中的经典 二、非对称加密&#xff1a;RSA技术的魅力 RSA技…

小型水库水雨情和大坝安全监测解决方案

小型水库水雨情和大坝安全监测解决方案 小型水库作为重要的水资源管理和防洪调蓄设施&#xff0c;在保障农业灌溉、居民饮水及防洪安全方面发挥着不可或缺的作用。然而&#xff0c;由于其规模限制&#xff0c;小型水库往往在水雨情监测和大坝安全评估方面面临资源和技术的双重…

力扣爆刷第146天之贪心算法五连刷

力扣爆刷第146天之贪心算法五连刷 文章目录 力扣爆刷第146天之贪心算法五连刷总结一、455. 分发饼干二、376. 摆动序列三、53. 最大子数组和四、122. 买卖股票的最佳时机 II五、5. 跳跃游戏 总结 贪心算法的本质就是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 一…

关于网络的基础知识

大家好&#xff0c;在当今数字时代&#xff0c;网络已经成为我们生活中不可或缺的一部分&#xff0c;它连接着世界的每一个角落&#xff0c;让信息、资源和人们彼此之间无阻碍地交流和共享。然而&#xff0c;对于许多人来说&#xff0c;网络仍然是一个神秘而复杂的领域&#xf…

数据分析必备:一步步教你如何用Pandas做数据分析(11)

1、Pandas 自定义选项 Pandas 自定义选项操作实例 Pandas因为提供了API来自定义行为&#xff0c;所以被广泛使用。 自定义API中有五个相关功如下&#xff1a; get_option() set_option() reset_option() describe_option() option_context() 下面我们一起了解下这些方法。 1.…