OLED之显示汉字
#include "reg52.h"
#include "intrins.h"
sbit scl = P0^1;
sbit sda = P0^3;
void IIC_Start()
{
scl = 0;
scl = 1;
sda = 1;
_nop_();
sda = 0;
_nop_();
}
void IIC_Stop()
{
scl = 0;
scl = 1;
sda = 0;
_nop_();
sda = 1;
_nop_();
sda = 0;
}
char IIC_ACK()
{
char flag;
sda = 1;
_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;
sda = dataSend & 0x80;
_nop_();
scl = 1;
_nop_();
scl = 0;
_nop_();
dataSend = dataSend << 1;
}
}
void Oled_Write_Cmd(char dataCmd)
{
IIC_Start();
IIC_Send_Byte(0x78);
IIC_ACK();
IIC_Send_Byte(0x00);
IIC_ACK();
IIC_Send_Byte(dataCmd);
IIC_ACK();
IIC_Stop();
}
void Oled_Write_Data(char dataData)
{
IIC_Start();
IIC_Send_Byte(0x78);
IIC_ACK();
IIC_Send_Byte(0x40);
IIC_ACK();
IIC_Send_Byte(dataData);
IIC_ACK();
IIC_Stop();
}
void Oled_Init()
{
Oled_Write_Cmd(0xAE);
Oled_Write_Cmd(0x00);
Oled_Write_Cmd(0x10);
Oled_Write_Cmd(0x40);
Oled_Write_Cmd(0xB0);
Oled_Write_Cmd(0x81);
Oled_Write_Cmd(0xFF);
Oled_Write_Cmd(0xA1);
Oled_Write_Cmd(0xA6);
Oled_Write_Cmd(0xA8);
Oled_Write_Cmd(0x3F);
Oled_Write_Cmd(0xC8);
Oled_Write_Cmd(0xD3);
Oled_Write_Cmd(0x00);
Oled_Write_Cmd(0xD5);
Oled_Write_Cmd(0x80);
Oled_Write_Cmd(0xD8);
Oled_Write_Cmd(0x05);
Oled_Write_Cmd(0xD9);
Oled_Write_Cmd(0xF1);
Oled_Write_Cmd(0xDA);
Oled_Write_Cmd(0x12);
Oled_Write_Cmd(0xDB);
Oled_Write_Cmd(0x30);
Oled_Write_Cmd(0x8D);
Oled_Write_Cmd(0x14);
Oled_Write_Cmd(0xAF);
}
void Oled_Clear()
{
unsigned char i,j;
for(i = 0; i < 8; i++){
Oled_Write_Cmd(0xB0 + i);
Oled_Write_Cmd(0x00);
Oled_Write_Cmd(0x10);
for(j = 0; j < 128; j++){
Oled_Write_Data(0);
}
}
}
code char j1[16] = {0x80,0x80,0x40,0x20,0x10,0x08,0x24,0xC3,0x04,0x08,0x10,0x20,0x40,0x80,0x80,0x00};
code char j2[16] = {0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x82,0x42,0x22,0x1A,0x06,0x00,0x00,0x00,0x00};
code char t1[16] = {0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00};
code char t2[16] = {0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00};
code char x1[16] = {0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x42,0x82,0x02,0x02,0x02,0x02,0x00};
code char x2[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x06,0x00,0x00,0x00};
code char y1[16] = {0x02,0xE2,0x22,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x22,0xE2,0x02,0x00};
code char y2[16] = {0x00,0xFF,0x00,0x00,0x09,0x12,0x00,0x7F,0x00,0x09,0x12,0x40,0x80,0x7F,0x00,0x00};
void main()
{
unsigned char i;
Oled_Init();
Oled_Write_Cmd(0x20);
Oled_Write_Cmd(0x02);
Oled_Clear();
Oled_Write_Cmd(0xB0);
Oled_Write_Cmd(0x00);
Oled_Write_Cmd(0x10);
for(i = 0; i < 16; i++){
Oled_Write_Data(j1[i]);
}
for(i = 0; i < 16; i++){
Oled_Write_Data(t1[i]);
}
for(i = 0; i < 16; i++){
Oled_Write_Data(x1[i]);
}
for(i = 0; i < 16; i++){
Oled_Write_Data(y1[i]);
}
Oled_Write_Cmd(0xB1);
Oled_Write_Cmd(0x00);
Oled_Write_Cmd(0x10);
for(i = 0; i < 16; i++){
Oled_Write_Data(j2[i]);
}
for(i = 0; i < 16; i++){
Oled_Write_Data(t2[i]);
}
for(i = 0; i < 16; i++){
Oled_Write_Data(x2[i]);
}
for(i = 0; i < 16; i++){
Oled_Write_Data(y2[i]);
}
while(1);
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1d603cecf4035892445d902f5da2e5f8.jpeg)