OLED的一些心得

 oled显示屏本质上就是一些微小的发光管的集合,它的显示原理和led排灯一
 样,给1就亮,给0就灭,oled自带显存来存储这些值的集合。
 
值的注意的是,它是实时的,你往显存里面写1,那么对应位置会立刻变化,很多人以为,
oled的显示是先往显存里面写数据,写完一块数据更新一块显示,其实不是这样的,oled
和led排灯类似就是为了体现它是实时的这一特点,立刻在屏幕上面体现显存里面的内容。

如果是一块stm32在控制oled显示,通常的做法是在32里面开辟一块内存来存储oled显存里
面的数据,这样做的好处是修改都是在32这一端修改,可以极大的提升速度,避免了从
oled的显存里面读取数据这一过程。
以12864oled举例,可以在stm32里面开辟一块oled[128][8]这样的内存来存储显存数据。

分割线。
上面是为了说明我曾经犯的一个错误,误以为oled的显示不是实时的,曾经以为oled是根
据页来刷新显示,每次需要等一页的数据都刷新完毕,不管数据是否发生变化,才会刷新
显示。
oled的使用方法
1 开辟内存空间,模拟oled显存
2将内从空间里面的数据修改成所需要的显示数据,
3将内存空间的数据写入显存
具体到stm32
    //OLED的显存
//存放格式如下.
//[0]0 1 2 3 ... 127	
//[1]0 1 2 3 ... 127	
//[2]0 1 2 3 ... 127	
//[3]0 1 2 3 ... 127	
//[4]0 1 2 3 ... 127	
//[5]0 1 2 3 ... 127	
//[6]0 1 2 3 ... 127	
//[7]0 1 2 3 ... 127 	

u8 OLED_GRAM[128][8];
//更新显存到OLED	
void OLED_Refresh_Gram(void)
{
	u8 i,n;		    
	for(i=0;i<8;i++)  
	{ 		
		OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
		OLED_WR_Byte (0x00,OLED_CMD);      //设置显示位置—列低地址
		OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
		for(n=0;n<64;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA); 
		for(n=64;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA); 
	}
}	

你可能感兴趣的:(stm32)