定位写入坐标(页写入模式下)
//显示坐标
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
Write_IIC_Command(0xb0+y);//页地址
Write_IIC_Command(((x&0xf0)>>4)|0x10);//取高位地址
Write_IIC_Command((x&0x0f)|0x01); //取低位地址
}
例1:X=0时;(x&0xf0)>>4)|0x10,等于0,那么高位等于0;
(x&0x0f)|0x01),等于1,那么低位等于1;
例2:X=16时;十六进制为00010000;00010000&11110000=00010000;>>4=0000001;|0x10=00010001;那么高位为00010001;
00010000&00001111=00000000;|00000001=00000001;
用命令写入寄存器,系统将只识别低位,或者高位。
清屏幕,黑色
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
void OLED_Clear(void)
{
u8 i,n;
for(i=0;i<8;i++)
{
Write_IIC_Command(0xb0+i); //页寻址模式下使用X[2:0]设置GDDRAM页开始地址(PGAE0~PGAE7)。
Write_IIC_Command(0x00); //设置显示位置—列低地址
Write_IIC_Command(0x10); //设置显示位置—列高地址 ,列地址为0;
for(n=0;n<132;n++)
Write_IIC_Data(0x00);
} //更新显示
}
写入字符串或者指针
void OLED_Data(u8 x,u8 y,u8 *chr)
{
unsigned char c=0,i=0,j=0;
while (chr[j]!='\0')
{
c=chr[j]-32; //获取字符偏移量,这是因为字库跟标准ASCII码表相差32,即一个空格,字符的地址-空格的地址,等于字符在数据表内位置
if(x>Max_Column-1){x=0;y=y+2;}
OLED_Set_Pos(x,y);
for(i=0;i<8;i++) //在第一页写入前8个数据
Write_IIC_Data(F8X16[c*16+i]); //比如:chr='1',1的模在表1行,每行16个元素,1-空格0=1,1x16=16,那么'1'的模就从F8X16[16+i]开始写,写入8次数据
OLED_Set_Pos(x,y+1); //开始写第二页
for(i=0;i<8;i++)
Write_IIC_Data(F8X16[c*16+i+8]);//在第二页写入后8个数据
x+=8;
j++;
}
}
总结:
- 检测写入长度,循环写入,当检测到‘\0’停止写入while (chr[j]!=’\0’)
- 定位写入字符存放位置,c=chr[j]-32; ,获取字符偏移量,这是因为字库跟标准ASCII码表相差32,即字符的码值-码值32或’ ',就可以得出字符的码值用于显示
- 按页写入,第一页调用数据表写入字符上半身,然后Y+1,写入字符下半身
写入汉字
//显示汉字
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,addre=0;
OLED_Set_Pos(x,y); //设置页地址,列地址高位,低位
for(t=0;t<16;t++)
{
Write_IIC_Data(Hzk[2*no][t]);
addre+=1;
}
OLED_Set_Pos(x,y+1); //设置页地址,列地址高位,低位,列地址加1
for(t=0;t<16;t++)
{
Write_IIC_Data(Hzk[2*no+1][t]);
addre+=1;
}
}
总结:
- 确定写入汉字位置
- 第一页调用数据写入汉字上半身,翻页Y+1,数据表+1,第二页写入汉字下半身
图片
/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
{
unsigned int j=0;
unsigned char x,y;
if(y1%8==0) y=y1/8;
else y=y1/8+1;
for(y=y0;y<y1;y++)
{
OLED_Set_Pos(x0,y);
for(x=x0;x<x1;x++)
{
Write_IIC_Data(BMP[j++]);
}
}
}