基于STC12C5A60S2系列1T 8051单片机的IIC通信的0.96寸4针OLED12864显示大小写英文的应用

基于STM32驱动OLED12864单色屏幕的详细教程(含原理解析) OLED12864是指显示分辨率为128列x64行的OLED显示屏,常见为0.96英寸或1.3英寸单色屏幕,通常使用SSD1306控制芯片。I2C(两线:SCL/SDA)SPI(四线或三线:SCLK/MOSI/CS/DC/RST)通过本文的讲解,我们从OLED12864的硬件原理、通信协议、驱动逻辑到实际STM32代码实现,全方位解析了OLED驱动过程。OLED的驱动虽不复杂,但需要理解其缓存映射机制和通信方式。建议读者在掌握基础后,尝试加入自己的图形或图标显示,实现更酷的UI效果。 阅读详情

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

液晶显示器OLED12864简单介绍

一、OLED12864点阵型液晶显示器介绍

在这里插入图片描述

二、OLED12864点阵型液晶显示器IIC协议介绍

在这里插入图片描述在这里插入图片描述

三、OLED12864点阵型液晶字节排列方式介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、OLED12864点阵型液晶图像显示位置寻址寄存器介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

五、OLED12864点阵型液晶硬件配置寄存器介绍

在这里插入图片描述

五、OLED12864点阵型液晶显示方式介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

六、OLED12864点阵型液晶滚屏命令介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

七、OLED12864点阵型液晶字模提取介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述

基于STC12C5A60S2系列1T 8051单片机的IIC通信的0.96寸4针OLED12864显示大小写英文的功能

在这里插入图片描述
main.c

#include "STC12C5A60S2.h"  
#include "OLED12864.h"
#include "OLED12864OfI2C.h"
//#include "ChineseCharacterLibrary.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
 void main()//主函数
{
   
   
  OLED12864Init();//OLED12864初始化函数
  while(1)//主循环
 {
   
   
   OLED12864DisplayEnglish(0,0,0);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第0大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第0个大写字母"A"
   OLED12864DisplayEnglish(1,0,2);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第1大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第1个小写字母"a"
//   OLED12864DisplayEnglish(2,0,4);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第2大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第2个大写字母"B"
//   OLED12864DisplayEnglish(3,0,6);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第3大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第3个小写字母"b"
//   OLED12864DisplayEnglish(4,0,8);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第4大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第4个大写字母"C"
//   OLED12864DisplayEnglish(5,0,10);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第5大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第5个小写字母"c"
//   OLED12864DisplayEnglish(6,0,12);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第6大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第6个大写字母"D"
//   OLED12864DisplayEnglish(7,0,14);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第7大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第7个小写字母"d"
//   OLED12864DisplayEnglish(8,0,16);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第8大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第8个大写字母"E"
//   OLED12864DisplayEnglish(9,0,18);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第9大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第9个小写字母"e"
//   OLED12864DisplayEnglish(10,0,20);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第10大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第10个大写字母"F"
//   OLED12864DisplayEnglish(11,0,22);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第11大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第11个小写字母"f"
//   OLED12864DisplayEnglish(12,0,24);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第12大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第12个大写字母"G"
//   OLED12864DisplayEnglish(13,0,26);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第13大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第13个小写字母"g"
//   OLED12864DisplayEnglish(14,0,28);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第14大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第14个大写字母"H"
//   OLED12864DisplayEnglish(15,0,30);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第15大列(即8小列为一大列)显示EnglishCharacterArrayOf16Row8Column[][8]变量中的第15个小写字母"h"
  
  }
 }

OLED12864.c

#include "OLED12864.h" 
#include "OLED12864OfI2C.h" 
//#include "ChineseCharacterLibrary.h"
#include "CapitalLowerCaseLetter.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint

 void WriteCommandToOLED12864(uchar Command)//写命令给OLED12864函数
{
   
   
  I2CStar();//I2C启动函数
  I2CWriteByte(0x78);//I2C写字节函数 写OLED12864硬件地址	
  WaitAck();//等待应答
  I2CWriteByte(0x00);//I2C写字节函数 启动写命令控制
  WaitAck();//等待应答
  I2CWriteByte(Command);//I2C写字节函数 写命令给OLED12864
  WaitAck();//等待应答
  I2CStop();//I2C停止函数
 }

 void WriteDataToOLED12864(uchar Data)//写数据给OLED12864函数 
{
   
   
  I2CStar();//I2C启动函数
  I2CWriteByte(0x78);//I2C写字节函数 写OLED12864硬件地址
  WaitAck();//等待应答	
  I2CWriteByte(0x40);//I2C写字节函数 启动写数据控制
  WaitAck();//等待应答
  I2CWriteByte(Data);//I2C写字节函数 写数据给OLED12864
  WaitAck();//等待应答
  I2CStop();//I2C停止函数
 }

 void SetOLED12864DisplayPostion(uchar Column,uchar Page)//设置OLED12864显示位置函数 Column为OLED12864大列(即8小列为一大列)地址 取值为0到15 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7
{
   
   
  WriteCommandToOLED12864(0xb0 + Page);//OLED12864的8小行或小页(即8小行为一小页)地址选择 0xb0为OLED12864第0小页(即8小行为一小页)地址 也是OLED12864的小页开始地址 取值为0到7
  WriteCommandToOLED12864(((Column & 0xf0) >> 4) | 0x10);//0001 A7A6A5A4 OLED12864列地址的高4位
  WriteCommandToOLED12864(Column & 0x0f);//0000 A3A2A1A0 OLED12864列地址的低4位
 }
 
 void OLED12864ClearScreen()//OLED12864清屏显示函数
{
   
   
  uchar Column,Page;//声明Column为OLED12864小列地址 取值为0到127 Page为OLED12864的8小行或小页(即8小行为一小页)地址
  for(Page = 0;Page < 8;Page++)//循环OLED12864的8小页(即8小行为一小页)地址 共64小行	
 {
   
   
   WriteCommandToOLED12864(0xb0 + Page);//OLED12864的8小行或小页(即8小行为一小页)地址选择 0xb0为OLED12864第0小页(即8小行为一小页)地址 也是OLED12864的小页开始地址
   WriteCommandToOLED12864(0x00);//0000 A3A2A1A0 OLED12864列地址的低4位
   WriteCommandToOLED12864(0x10);//0001 A7A6A5A4 OLED12864列地址的高4位
   for(Column = 0;Column < 128;Column++)//循环OLED12864的128小列地址
  {
   
   
	WriteDataToOLED12864(0x00);//关OLED12864显示
   }
  }
 }	
 
 void OLED12864DisplayEnglish(uchar Column,uchar Page,uchar EnglishCharacterSerialNumber)//OLED12864显示英文函数 Column为OLED12864大列(即8小列为一大列)地址 取值为0到15 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7 EnglishCharacterSerialNumber为显示EnglishCharacterArrayOf16Row8Column[][8]变量中哪个字母的16个字节所在序号变量
{
   
   	 
  uint i;//声明循环变量
	//字母上半部分显示	
  SetOLED12864DisplayPostion(Column * 8,Page);//Column为OLED12864大列(即8小列为一大列)地址 取值为0到15 x * 8表示这个大列有8小列 y为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7
  for(i = 0;i < 8;i++)//循环EnglishCharacterArrayOf16Row8Column[][8]变量中某个数据上半部分8个数据
 {
   
   
   WriteDataToOLED12864(EnglishCharacterArrayOf16Row8Column[EnglishCharacterSerialNumber][i]);//字母上半部分显示
  }	
  //字母下半部分显示	
  SetOLED12864DisplayPostion(Column * 8,Page + 1);//Column为OLED12864大列(即8小列为一大列)地址 取值为0到15 x * 8表示这个大列有8小列 y为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7
  for(i = 0;i < 8;i++)//循环EnglishCharacterArrayOf16Row8Column[][8]变量中某个数据上半部分8个数据
 {
   
   
   WriteDataToOLED12864(EnglishCharacterArrayOf16Row8Column[EnglishCharacterSerialNumber + 1][i]);//字母上半部分显示
  }
 }
 
 void OLED12864Init()//OLED12864初始化函数第一个8是8小页(即8小行为一小页) 第二个8是8大列(即16小列为一大列)16是16小列
{
   
   
  WriteCommandToOLED12864(0xAE);//关OLED12864显示
  WriteCommandToOLED12864(0x00);//设置OLED12864列地址的低4位 对应OLED12864第0大列(即16小列为一大列)中的第0小列地址	
  WriteCommandToOLED12864(0x10);//设置OLED12864列地址的高4位 对应OLED12864第0大列(即16小列为一大列)地址
  WriteCommandToOLED12864(0x40);//设置OLED12864第0小行开始显示
  WriteCommandToOLED12864(0x81);//设置OLED12864对比度
  WriteCommandToOLED12864(0xCF);//设置OLED12864亮度为207级 总亮度为255级
  WriteCommandToOLED12864(0xA1);//设置OLED12864的第127小列映射到OLED12864显示屏第0小列 0xA0左右镜面反置 0xA1正常
  WriteCommandToOLED12864(0xC8);//设置OLED12864从第63小行扫描到第0小行 0xC0上下镜面反置 0xC8正常
  WriteCommandToOLED12864(0xA6);//设置OLED12864不反白显示	反白为0xA7
  WriteCommandToOLED12864(0xA8);//设置OLED12864显示总行数
  WriteCommandToOLED12864(0x3f);//设置OLED12864占空比为1/64
  WriteCommandToOLED12864(0xD3)
STM32江科大的oled驱动代码添加显示浮点数 最近想要用oled显示屏显示一些数据,其中有浮点数据要显示,用的是0.96OLED iic接口的四针。其中驱动代码是江科大(B站做STM32教学的)的,个人认为比较美观和实用,但是没有float类型的显示,虽然也可以放大成整数显示,但还是不够美观,所以自己写了一个函数。这个是函数,只要添加在OLED.c中然后在OLED.h中包含这个头文件就可以使用,具体原理是将浮点数转成整数,然后根据要显示的小数位数显示小数点。* @param Length 要显示数字的长度,范围:1~10。当然显示负数也是可以的。 阅读详情

相关推荐

STC12C5A60S2头文件详解:从零开始驱动1602与12864液晶实战

在单片机嵌入式开发中,头文件是连接芯片寄存器与C语言代码的桥梁,而STC12C5A60S2作为增强型8051内核单片机,其特殊功能寄存器远超传统REG52.H的覆盖范围。理解头文件搜索路径、SFR定义方法以及编译报错处理,是顺利进行外设驱动开发的基础。液晶显示模块如LCD1602字符屏与LCD12864图形屏,是单片机应用中常见的输出设备,其驱动核心在于正确的寄存器配置、时序控制和延时函数设计。由于STC12系列采用单时钟周期架构,传统51的延时函数直接迁移往往导致显示异常,需重新校准。掌握这些底层原理后,

weixin_42629671的博客 268

51单片机停车位管理系统设计与实现:从硬件到代码全解析

嵌入式系统开发中,单片机以其低成本、高可靠性和实时响应优势,成为智能控制领域的基础技术。传感器检测与定时器中断是构建交互系统的关键,状态机设计则有效解决复杂逻辑下的状态冲突。在智慧停车场景中,单片机负责车位检测、余位显示与计费控制,实现资源受限条件下的功能闭环。本文以STC89C52为核心,围绕红外传感器、LCD1602显示、DS1302计时及舵机模拟道闸,完整剖析停车位管理系统的硬件选型、引脚分配、定时器初值计算、中断服务与状态机实现,并给出Proteus仿真与实物调试的避坑指南。适用于毕业设计或课程设计

weixin_27014595的博客 331

全面OLED12864显示屏开发指南

有机发光二极管(OLED)技术以其高对比度、低功耗和快速响应时间等优势,在显示技术领域备受青睐。OLED12864是一种常见的图形点阵显示模块,广泛应用于嵌入式系统和智能仪表等领域。数据手册还详细描述了OLED12864的每一个引脚功能。一个典型的OLED12864屏可能具有如下的接口:VCC:供电正极,连接5V或3.3V电压。GND:供电地线。SDA:数据线,用于I2C通信。SCL:时钟线,用于I2C通信。D0-D7:数据线,用于SPI通信。

weixin_42234168的博客 2313

STC12C5A60S2单片机0.96OLED显示屏_SPI_带字库KEIL软件工程源码+OLED屏规格书

STC12C5A60S2单片机0.96OLED显示屏_SPI_带字库KEIL软件工程源码+OLED屏规格书及控制器件DATASHEET

VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU

显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享

weixin_32308101的博客 1004

CentOS 7 常用命令大全

CentOS中Linux命令

m0_63075763的博客 2018

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 519

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

当今,塔防游戏已经成为游戏市场上备受欢迎的一类游戏类型。《保卫萝卜》作为其中的经典之作,深受玩家喜爱。本项目旨在基于《保卫萝卜》的玩法和特点,开发一个Unity2D塔防游戏,让玩家可以在游戏中体验到精彩的策略对抗与刺激的关卡挑战。本项目将通过Unity引擎进行开发,利用2D游戏开发相关技术,包括但不限于精灵动画、碰撞检测、UI界面设计等。我们将实现萝卜作为关键角色的防守任务,并设计各种怪物和防御塔,使得游戏具有多样的战术策略和游戏乐趣。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4924

【Java核心高阶进阶】44-Java8核心新特性

模块十:Java新特性演进 · 第 1 篇Java 8 是 Java 语言历史上最重要的一次发布,它引入的函数式编程范式从根本上改变了 Java 的编码方式。即便到了 JDK 21 的今天,Lambda、Stream、Optional 仍是日常开发的高频工具。本篇将深入这些特性的语法、原理与底层机制,帮助你不仅会用,更知其所以然。

gaochufukanyongren的博客 24

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-知识图谱制作、使用、dify集成

本文探讨了在构建本地RAG(Retrieval-Augmented Generation)系统时,如何通过引入知识图谱来增强系统的知识理解能力。传统的向量数据库和嵌入模型虽然能处理语义匹配,但无法有效捕捉知识间的关联性。知识图谱通过“实体-关系-属性”的结构化表示,能够更好地支持推理、推荐和多跳问答等高级功能。文章详细介绍了知识图谱的基本概念、制作思路,以及如何使用Neo4j图数据库进行知识图谱的构建和查询。通过实例展示了从PDF文件解析到知识图谱入库的全过程,强调了知识图谱在提升RAG系统性能中的重要作用

少说,多做 563

【传感器模块项目实战】机器人/无人驾驶常用传感器模型、选型与安装

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!无人车&无人机导航合集本文先对机器人/无人驾驶常用传感器模型、选型与安装做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容分为位置式绝对型编码器增量式编码器打比赛的时候用过欧姆龙的增量式编码器,也用过待编码器的步进电机。【防盗标记–盒子君hzj】增量式编码器正交编码输出信号,用于识别正转和反转,通过微控制器(单片机)的片内外设硬件/软件解码(1)惯性器件-机械陀螺。

qq_35635374的博客 446

微信小程序数据采集实战:抓包+接口分析+动态数据全流程

微信小程序爬虫虽然比普通网页爬虫复杂,但只要掌握了正确的方法,其实并没有想象中那么难。核心思路就是:先绕过证书校验抓包,然后反编译小程序找到加密逻辑,最后用Python模拟相同的加密和解密过程。需要特别提醒的是,本文仅供技术研究使用。请遵守《网络安全法》和相关法律法规,不要爬取他人的敏感数据,不要将爬虫技术用于非法用途。尊重他人的知识产权和数据安全,才能让技术发挥真正的价值。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1092

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: 基于STC12C5A60S2系列1T 8051单片机的IIC通信的0.96寸4针OLED12864显示中文的功能
下一篇: 基于STC12C5A60S2系列1T 8051单片机的IIC通信的0.96寸4针OLED12864显示16行点x8列点的应用
CWQLTYH
博客等级 码龄10年 1432粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值