OLED怎么显示字符 汉字 图片

定位写入坐标(页写入模式下)

//显示坐标

	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++;
   }
				    	
}

总结:

  1. 检测写入长度,循环写入,当检测到‘\0’停止写入while (chr[j]!=’\0’)
  2. 定位写入字符存放位置,c=chr[j]-32; ,获取字符偏移量,这是因为字库跟标准ASCII码表相差32,即字符的码值-码值32或’ ',就可以得出字符的码值用于显示
  3. 按页写入,第一页调用数据表写入字符上半身,然后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;
      }					
}

总结:

  1. 确定写入汉字位置
  2. 第一页调用数据写入汉字上半身,翻页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++]);	    	
	    }
	}
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值