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

        这篇文章得用到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);
} 


//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
//先选中页,初始位置,
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫咪死了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值