基于STC12C5A60S2系列1T 8051单片机的IIC通信的0.96寸4针OLED12864显示大小写英文的应用
- 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显示大小写英文的功能
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)