基于STC12C5A60S2系列1T 8051单片机的IIC通信的0.96寸4针OLED12864显示16行点x16列点字模的功能
- 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显示16行点x16列点字模的功能
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显示16行点x16列点字模的功能
main.c
#include "STC12C5A60S2.h"
#include "OLED12864.h"
#include "OLED12864OfI2C.h"
//#include "ChineseCharacterLibrary.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uintvoid main()//主函数
{OLED12864Init();//OLED12864初始化函数
// OLED12864DisplayChinese(0,0,0);//在OLED12864第0小页(即8小行为一小页)到第1小页(即8小行为一小页)的第0大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第0个汉字 while(1)//主循环{OLED12864Display16Bitx16BitFontMolds(0,0,1);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第0大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第0个汉字"欢" OLED12864Display16Bitx16BitFontMolds(1,0,2);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第1大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第1个汉字"迎" OLED12864Display16Bitx16BitFontMolds(2,0,3);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第2大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第2个汉字"来" OLED12864Display16Bitx16BitFontMolds(3,0,4);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第3大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第3个汉字"到" OLED12864Display16Bitx16BitFontMolds(4,0,5);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第4大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第4个汉字"广" OLED12864Display16Bitx16BitFontMolds(5,0,6);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第5大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第5个汉字"东" OLED12864Display16Bitx16BitFontMolds(6,0,7);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第6大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第6个汉字"安" OLED12864Display16Bitx16BitFontMolds(7,0,8);//从第0小页(即8小行为一小页)开始到第1小页(即8小行为一小页)的第7大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第7个汉字"胜" OLED12864Display16Bitx16BitFontMolds(0,2,9);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第0大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第8个汉字"仪" OLED12864Display16Bitx16BitFontMolds(1,2,10);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第1大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第9个汉字"器" OLED12864Display16Bitx16BitFontMolds(2,2,11);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第2大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第10个汉字"有" OLED12864Display16Bitx16BitFontMolds(3,2,12);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第3大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第11个汉字"限" OLED12864Display16Bitx16BitFontMolds(4,2,13);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第4大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第12个汉字"公" OLED12864Display16Bitx16BitFontMolds(5,2,14);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第5大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第13个汉字"司" OLED12864Display16Bitx16BitFontMolds(6,2,15);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第6大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第14个汉字"做" OLED12864Display16Bitx16BitFontMolds(7,2,16);//从第2小页(即8小行为一小页)开始到第3小页(即8小行为一小页)的第7大列(即16小列为一大列)显示ChineseCharacterArray[]变量中的第15个汉字"客" }}
OLED12864.c
#include "OLED12864.h"
#include "OLED12864OfI2C.h"
#include "ChineseCharacterLibrary.h"
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uintvoid WriteCommandToOLED12864(uchar Command)//写命令给OLED12864函数
{I2CStar();//I2C启动函数I2CWriteByte(0x78);//I2C写字节函数 写OLED12864硬件地址 WaitAck();//等待应答I2CWriteByte(0x00);//I2C写字节函数 启动写命令控制WaitAck();//等待应答I2CWriteByte(Command);//I2C写字节函数 写命令给OLED12864WaitAck();//等待应答I2CStop();//I2C停止函数}void WriteDataToOLED12864(uchar Data)//写数据给OLED12864函数
{I2CStar();//I2C启动函数I2CWriteByte(0x78);//I2C写字节函数 写OLED12864硬件地址WaitAck();//等待应答 I2CWriteByte(0x40);//I2C写字节函数 启动写数据控制WaitAck();//等待应答I2CWriteByte(Data);//I2C写字节函数 写数据给OLED12864WaitAck();//等待应答I2CStop();//I2C停止函数}void SetOLED12864DisplayPostion(uchar Column,uchar Page)//设置OLED12864显示位置函数 Column为OLED12864大列(即16小列为一大列)地址 取值为0到7 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7
{WriteCommandToOLED12864(0xb0 + Page);//OLED12864的8小行或小页(即8小行为一小页)地址选择 0xb0为OLED12864第0小页(即8小行为一小页)地址 也是OLED12864的小页开始地址 取值为0到7WriteCommandToOLED12864(((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 OLED12864Display16Bitx16BitFontMolds(uchar Column,uchar Page,uchar z)//OLED12864显示16行点x16列点字模函数 Column为OLED12864大列(即16小列为一大列)地址 取值为0到7 取值为0到7 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7 z为显示ChineseCharacterArrayOf16Row16Column[]变量中哪个汉字的32个字节所在序号变量
{uint i,j;//声明循环变量j = 16;//定义ChineseCharacterArrayOf16Row16Column[]变量中某个数据的16个字节变量switch(z)//z为显示ChineseCharacterArrayOf16Row16Column[]变量中哪个汉字的32个字节所在序号变量{ case 1: SetOLED12864DisplayPostion(Column * 16,Page);//Column为OLED12864大列(即16小列为一大列)地址 Column * 16表示这个大列有16小列 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7for(i = (0 * j);i < (1 * j);i++)//循环ChineseCharacterArrayOf16Row16Column[]变量中某个数据上半部分16个数据{WriteDataToOLED12864(ChineseCharacterArrayOf16Row16Column[i]);//汉字上半部分显示 } SetOLED12864DisplayPostion(Column * 16,Page + 1);//Column为OLED12864大列(即16小列为一大列)地址 Column * 16表示这个大列有16小列 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7for(i = (1 * j);i < (2 * j);i++)//循环ChineseCharacterArrayOf16Row16Column[]变量中某个数据下半部分16个数据{WriteDataToOLED12864(ChineseCharacterArrayOf16Row16Column[i]);//汉字下半部分显示} z = 0;//清0 break;//跳出case 2: SetOLED12864DisplayPostion(Column * 16,Page);//Column为OLED12864大列(即16小列为一大列)地址 Column * 16表示这个大列有16小列 Page为OLED12864的8小行或小页(即8小行为一小页)地址 取值为0到7for(i = (2 * j);i < (3 * j);i++)//循环ChineseCharacterArrayOf16Row16Column[]变量中某个数据上半部分16个数据{WriteDataToOLED12864