OLED显示
基本参数:
•OLED(Organic Light Emitting Diode):有机发光二极管
•OLED显示屏:性能优异的新型显示屏,具有功耗低、相应速度快、宽视角、轻薄柔韧等特点
•0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
•供电:3~5.5V,通信协议:I2C/SPI,分辨率:128*64
本篇文章默认你是有一些I2C通讯的基础知识的,所以在源码展示部分有直接调用的 I2C_SAND_BYTE(),I2C发送数据函数,如果对I2C的驱动函数不知道如何编写可以移步至我的这篇文章:I2C驱动代码
常见的硬件连接方式: ![请添加图片描述](https://img-blog.csdnimg.cn/02cfe86bfab249e5958e2abfcc98b721.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54ix5ZCD54K46bih55qE5bCP54yq,size_20,color_FFFFFF,t_70,g_se,x_16)
电亮方式:
将分辨率为128*64的屏幕分为多个8x8像素块来显示:
那么以8x8像素块为基本单位而言,行就有8个像素块,列就有16个像素块 ![请添加图片描述](https://img-blog.csdnimg.cn/76126e4185f24dc8a1ce6e5b2dcaf6be.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA54ix5ZCD54K46bih55qE5bCP54yq,size_20,color_FFFFFF,t_70,g_se,x_16)
单独对于一个小的8x8像素块而言,根据芯片的配置,采用“纵向取模下高位的方式”。即如图电亮第一列的像素点需要输入的数据为0x47,转化为二进制数据为0100 0111。二进制数的高位在下,低位在上。“1”表示电亮,“0”表示熄灭
对于英文,数字,汉字而言需要用不同方式的8x8元素块进行拼接显示,这样显示的效果最好,后续会详细说明
(下面的代码注释紊乱是编码的问题,复制到Keil5里选择ANSI编码就没问题了)
OLED初始化
#define OLED0561_ADD 0x78 // OLEDµÄI2CµØÖ·£¨½ûÖ¹Ð޸ģ©
#define COM 0x00 // OLED Ö¸Á½ûÖ¹Ð޸ģ©
#define DAT 0x40 // OLED Êý¾Ý£¨½ûÖ¹Ð޸ģ©
void OLED0561_Init (void){//OLEDÆÁ¿ªÏÔʾ³õʼ»¯
OLED_DISPLAY_OFF(); //OLED¹ØÏÔʾ
OLED_DISPLAY_CLEAR(); //Çå¿ÕÆÁÄ»ÄÚÈÝ
OLED_DISPLAY_ON(); //OLEDÆÁ³õʼֵÉèÖò¢¿ªÏÔʾ
}
void OLED_DISPLAY_ON (void){//OLEDÆÁ³õʼֵÉèÖò¢¿ªÏÔʾ
u8 buf[28]={
0xae,//0xae:¹ØÏÔʾ£¬0xaf:¿ªÏÔʾ
0x00,0x10,//¿ªÊ¼µØÖ·£¨Ë«×Ö½Ú£©
0xd5,0x80,//ÏÔʾʱÖÓƵÂÊ£¿
0xa8,0x3f,//¸´ÓÃÂÊ£¿
0xd3,0x00,//ÏÔʾƫÒÆ£¿
0XB0,//дÈëҳλÖã¨0xB0~7£©
0x40,//ÏÔʾ¿ªÊ¼Ïß
0x8d,0x14,//VCCµçÔ´
0xa1,//ÉèÖöÎÖØÐÂÓ³É䣿
0xc8,//COMÊä³ö·½Ê½£¿
0xda,0x12,//COMÊä³ö·½Ê½£¿
0x81,0xff,//¶Ô±È¶È£¬Ö¸Á0x81£¬Êý¾Ý£º0~255£¨255×î¸ß£©
0xd9,0xf1,//³äµçÖÜÆÚ£¿
0xdb,0x30,//VCCµçѹÊä³ö
0x20,0x00,//ˮƽѰַÉèÖÃ
0xa4,//0xa4:Õý³£ÏÔʾ£¬0xa5:ÕûÌåµãÁÁ
0xa6,//0xa6:Õý³£ÏÔʾ£¬0xa7:·´É«ÏÔʾ
0xaf//0xae:¹ØÏÔʾ£¬0xaf:¿ªÏÔʾ
}; //
I2C_SAND_BUFFER(OLED0561_ADD,COM,buf,28);
}
void OLED_DISPLAY_OFF (void){//OLEDÆÁ¹ØÏÔʾ
u8 buf[3]={
0xae,//0xae:¹ØÏÔʾ£¬0xaf:¿ªÏÔʾ
0x8d,0x10,//VCCµçÔ´
}; //
I2C_SAND_BUFFER(OLED0561_ADD,COM,buf,3);
}
void OLED_DISPLAY_LIT (u8 x){//OLEDÆÁÁÁ¶ÈÉèÖã¨0~255£©
I2C_SAND_BYTE(OLED0561_ADD,COM,0x81);
I2C_SAND_BYTE(OLED0561_ADD,COM,x);//ÁÁ¶ÈÖµ
}
void OLED_DISPLAY_CLEAR(void){//ÇåÆÁ²Ù×÷
u8 j,t;
for(t=0xB0;t |