IIC驱动0.96寸OLED屏幕显示(51单片机)

您所在的位置:网站首页 oled接单片机原理图片高清 IIC驱动0.96寸OLED屏幕显示(51单片机)

IIC驱动0.96寸OLED屏幕显示(51单片机)

2024-07-09 09:06| 来源: 网络整理| 查看: 265

        这篇文章得用到IIC驱动,大家如果不会IIC通信,可以看这篇文章,也是我写的,是有关IIC通信的,有什么不理解的可以在看一下:https://blog.csdn.net/m0_58832575/article/details/124003619?spm=1001.2014.3001.5501

 OLED简介

         我买的是四针脚的利用IIC通OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显 示(Organic Electroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从 2003 年开始,这种显示设备在 MP3 播放器上得到了广泛应用,而对于同属数码类产品的 DC 与手机,此前只是在一些展会上展示过采用 OLED 屏幕的工程样品。自 2007 年后,寿命得 到很大提高,具备了许多 LCD 不可比拟的优势信的一款OLED显示屏,是显示蓝色字体的,就是这个形状。

        

IIC 电路连接:

GND: 电源地

VCC: 2.2V~5.5V

SCL: CLK 时钟 (高电平 2.2V~5.5V)

SDA: 传送数据  (高电平 2.2V~5.5V) 

 注意事项: OLED 显示屏不同于 LCD,OLED 上电是没有反应的,需要程 序驱动才会有显示。

显示原理: 

        这里给大家说一下,OLED显示原理,上面参数有说过,此OLED像素是128*64的,而每个像素点是就像一个小灯一样,但是很小,然后集成在一起,我们想显示什么,就点亮依次的小灯,就可以了。我们如何知道显示哪个灯呢?这里就牵扯到一个取模软件,取模软件可以让自己显示的字符,变成二进制的代码,组成数组,然后利用显示的代码调用这个数组就可以依次点亮那些点阵小灯,显示出来自己想显示的东西,可以显示数字、各种各样的符号、汉字,图片(51单片机很难实现,因为内存太小)。下篇文章在分享和教你们怎么使用取模软件。

 话不多说,上代码:

OLED显示出来需要七个文件iic.h、iic.c、oled.h、oled.c、main.h、main.c、oled_fong.h。

OLED显示数据函数:

//OLED显示数据函数 #include "oled.h" #include "iic.h" #include "oled_fong.h" void delay(u16 z) { u16 i,j; for(i=z;i>0;i--) for(j=114;j>0;j--); } /* 发送指令函数 */ void write_cmd(cmd) { IIC_Start(); IIC_SendByte(0x78); IIC_WaitAck(); IIC_SendByte(0x00); IIC_WaitAck(); IIC_SendByte(cmd); IIC_WaitAck(); IIC_Stop(); } /* 发送数据函数 */ void write_dat(dat) { IIC_Start(); IIC_SendByte(0x78); IIC_WaitAck(); IIC_SendByte(0x40); IIC_WaitAck(); IIC_SendByte(dat); IIC_WaitAck(); IIC_Stop(); } //坐标设置 void Set_add(unsigned char x, unsigned char y) //x表示列(0~127),y表示页(0~7) { write_cmd(0xb0+y); //设置页地址(0~7) write_cmd(((x&0xf0)>>4)|0x10); //设置显示位置—列高地址 write_cmd((x&0x0f)); //设置显示位置—列低地址 } /*********************OLED初始化************************************/ void OLED_Init(void) { delay(500);//初始化之前的延时很重要! write_cmd(0xae);//--turn off oled panel write_cmd(0x00);//---set low column address write_cmd(0x10);//---set high column address write_cmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) write_cmd(0x81);//--set contrast control register write_cmd(0xcf); // Set SEG Output Current Brightness write_cmd(0xa1);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 write_cmd(0xc8);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常 write_cmd(0xa6);//--set normal display write_cmd(0xa8);//--set multiplex ratio(1 to 64) write_cmd(0x3f);//--1/64 duty write_cmd(0xd3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) write_cmd(0x00);//-not offset write_cmd(0xd5);//--set display clock divide ratio/oscillator frequency write_cmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec write_cmd(0xd9);//--set pre-charge period write_cmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock write_cmd(0xda);//--set com pins hardware configuration write_cmd(0x12); write_cmd(0xdb);//--set vcomh write_cmd(0x40);//Set VCOM Deselect Level write_cmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02) write_cmd(0x02);// write_cmd(0x8d);//--set Charge Pump enable/disable write_cmd(0x14);//--set(0x10) disable write_cmd(0xa4);// Disable Entire Display On (0xa4/0xa5) write_cmd(0xa6);// Disable Inverse Display On (0xa6/a7) write_cmd(0xaf);//--turn on oled panel write_cmd(0x00); //初始清屏 Set_add(0,0); } //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! //先选中页,初始位置,然后128列全部清零 void OLED_Clear(void) { u8 i,n; for(i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3