IIC总线可以驱动很多器件,比较常见的有OLED、EEPROM存储器(AT24C02)、温度传感器(LM75A)、温湿度传感器(DHT11)等。有关IIC总线协议的基本原理可以看我之前的文章介绍。这一次总结一下IIC驱动OLED的实现过程,实现简单的中英文和图片显示。(有关IIC的时序基本函数参考我之前的博客)
嵌入式开发中最常用的显示屏主要有一下几种:
(1)TFTLCD,它的特点是屏幕可以做到很大,性价比高,而且色彩丰富, 适合显示一些视觉方面的内容,比如手机屏幕,笔记本屏幕等。
(2)字符液晶屏,如 LCD1206(12*6 的像素),LCD12864(128*64 像素),如下 图,其特点是单色,像素粗糙,但是价格低廉,体积小,适合显示一些数据用,常用于仪器仪表。
(3)数码管,它的特点是价格非常低,几毛钱一片, 但是驱动电路复杂,需要的引脚很多,而且如果用单片机来驱动很占用单片机的 CPU 资源, 通常使用专门的 LED 驱动芯片如 TM1640或者使用移位寄存器进行驱动。
(4)OLED 显示屏,现在流行的高端显示器和手机屏幕都是用 的 OLED 屏幕,其实它的内部是由非常多的小 LED 灯组成的,因此它是自发光屏幕,它的优点是像素高,色彩还原度好,但是价格相对较高。
常见OLED尺寸示意图(图片来源telesky旗舰店)
我所使用的是 0.96 寸 OLED 屏幕,分辨率为 132*64,可显示图片,字符,中西方文字等。其中英文和数字最小可用8*8像素,但屏幕尺寸小显示不清楚,所以通常使用8*16像素,汉字的最小显示单位是16*16像素。其内部使用SH1106 驱动屏幕SH1106 芯片为我们提供了 132*8 字节的显存空间,即 132*64 个位,但是实际上使用有效的是128*64位就可以了,每个位对应着屏幕上 的一个像素点。还有比较常用的驱动屏幕芯片SSD1306,与SH1106不同的是其分辨率为128*64。它们在软件模拟IIC驱动原理是一样的。
OLED显示屏显示的原理很简单,假设把8*8像素大小看作8*8的正方形方块,整个128*64像素就分成16*8个8*8的正方形方块。那么在8*8的正方形方块中的每一列对应着一个字节的数据,每一个字节中的每一位对应着一个像素点,一列中的最上面一点对应字节中的最低位,最下面一点对应字节中最高位,那么这一列中的字节为1时就点亮,所以对应8*8区块只要8个字节就可以填充。假如发送的数据是0x00,则第一列都不亮,发送数据0xff,则第一列数据全亮。这样就可以根据想要的显示内容发送相对应的字节数据。
有关字符的C程序生成ÿ