oled显示一张图片

avatar
作者
猴君
阅读量:0

器材
oled、单片机、杜邦线
源码
#include <REGX52.H>
#include “intrins.h”
sbit sda = P0^3;
sbit scl = P0^1;
ICC起始信号

void ICC_check_start() { 	scl = 0;//清雪花清stop后面的scl = 1 	sda = 1; 	scl = 1; 	_nop_(); 	sda = 0; 	_nop_(); } 

ICC停止信号

void ICC_check_stop() { 	scl = 0;//清雪花清stop后面的scl = 1 	sda = 0; 	scl = 1; 	_nop_(); 	sda = 1; 	_nop_(); } 

IIC应答信号

char IIC_ACK()				//IIC应答信号 { 	char flag; 	sda = 1;					//时钟脉冲9期间释放数据线 	_nop_(); 	scl = 1; 	_nop_(); 	flag = sda; 	_nop_(); 	scl = 0; 	_nop_(); 	return flag; } 

IIC发送字节

void IIC_Send_Byte(char senddate)									//发送一个字节 { 	int i; 	for(i=0;i<8;i++) 	{ 	scl = 0;//让sda做好数据传输准备 	sda = senddate & 0x80;//找到发的字节高位是1还是0(走上下线) 	_nop_();//发送数据需要准备过程 	scl = 1;//开始发送数据 	_nop_();//发送数据的过程 	scl = 0;//关闭发送数据通道 	_nop_(); 	senddate = senddate << 1;//把最高位挤走(一个字节有8bit,senddate是字节) 	} 	 }			//IIC协议													 

oled写地址

void Oled_Write_Cmd(char cmddate)			//写地址 { 	//起始信号 	ICC_check_start(); //0111 10 0(区分两个OLED位)0(R/W表示写入接受数据) 	IIC_Send_Byte(0x78); //ACK 	 IIC_ACK();//回应好的 //0(control默认后面为date数据) 0(写入指令)000000 	IIC_Send_Byte(0x00); //ACK 		 IIC_ACK();//回应好的 //写入oled数据 		IIC_Send_Byte(cmddate); //ACK IIC_ACK();//回应好的 //STOP(终止信号) ICC_check_stop(); } 

oled写数据

void Oled_Write_date(char datedate)				//写数据 { 		//起始信号 	ICC_check_start(); //0111 10 0(区分两个OLED位)0(R/W表示写入接受数据) 	IIC_Send_Byte(0x78); //ACK 	 IIC_ACK();//回应好的 //0(control默认后面为date数据) 1(写入数据)000000 	IIC_Send_Byte(0x40); //ACK 		 IIC_ACK();//回应好的 //写入oled数据 		IIC_Send_Byte(datedate); //ACK 		IIC_ACK();//回应好的 //STOP(终止信号) 		ICC_check_stop(); } 

oled初始化

void Oled_Init(void){ Oled_Write_Cmd(0xAE);//--display off Oled_Write_Cmd(0x00);//---set low column address Oled_Write_Cmd(0x10);//---set high column address Oled_Write_Cmd(0x40);//--set start line address Oled_Write_Cmd(0xB0);//--set page address Oled_Write_Cmd(0x81); // contract control Oled_Write_Cmd(0xFF);//--128 Oled_Write_Cmd(0xA1);//set segment remap Oled_Write_Cmd(0xA6);//--normal / reverse Oled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64) Oled_Write_Cmd(0x3F);//--1/32 duty Oled_Write_Cmd(0xC8);//Com scan direction Oled_Write_Cmd(0xD3);//-set display offset Oled_Write_Cmd(0x00);// Oled_Write_Cmd(0xD5);//set osc division Oled_Write_Cmd(0x80);// Oled_Write_Cmd(0xD8);//set area color mode off Oled_Write_Cmd(0x05);// Oled_Write_Cmd(0xD9);//Set Pre-Charge Period Oled_Write_Cmd(0xF1);// Oled_Write_Cmd(0xDA);//set com pin configuartion Oled_Write_Cmd(0x12);// Oled_Write_Cmd(0xDB);//set Vcomh Oled_Write_Cmd(0x30);// Oled_Write_Cmd(0x8D);//set charge pump enable Oled_Write_Cmd(0x14);// Oled_Write_Cmd(0xAF);//--turn on oled panel } 

oled清屏

void oled_clean() { 	int i,j;												//用int不用char(-127—127) 	for(i=0;i<8;i++) 	{ 		Oled_Write_Cmd(0xB0 + i);       //从page0—page7行清空 		Oled_Write_Cmd(0x00);				//最左列 		Oled_Write_Cmd(0x10);				//只用到7bit,16列中8小列最左列 		//列会自动偏移一共128列,导致为清空完 		for(j=0;j<128;j++) 		{ 			//在128*64中依次写入0 			Oled_Write_date(0); 		} 	} 	 } 

图像数据

code unsigned char bmpimage[] = { 	/*--  调入了一幅图像:C:\Users\14895\Desktop\无标题.bmp  --*/ /*--  宽度x高度=128x64  --*/ //128*8*8 0x00,0x00,0x00,0xC0,0xC0,0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80, 0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xF0,0xFC,0xFF,0x0F,0x01,0x00,0x01,0x01,0x03,0x83,0xF7,0xFF,0x7E,0x0E,0x0E,0x07, 0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x0E,0x0E,0x0E,0x0E,0x1C, 0x1C,0x1C,0x38,0x38,0x70,0x78,0xFC,0xFC,0xCE,0x86,0x87,0x03,0x07,0x03,0x03,0x03, 0x03,0x03,0x3F,0xFF,0xF8,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xFF,0xFF,0x80,0x80,0xC0,0x80,0x00,0xC0,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x0C, 0x3E,0x3F,0x3E,0x3E,0x3C,0x18,0x00,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00, 0x18,0x7C,0x7E,0x7C,0x7C,0x78,0x30,0x00,0x01,0x03,0x03,0x07,0xFF,0xFE,0xF8,0x38, 0x1C,0x1C,0x0E,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x03,0x03,0x03,0x01,0x01,0x00,0x1F,0x7F,0xFF,0xC0,0x80,0x80,0x00,0x00, 0x00,0x00,0x10,0x7C,0x7E,0xE7,0xE7,0xE3,0xC7,0xD3,0xC3,0xC3,0xC3,0xF3,0xF3,0xE3, 0xF7,0x7E,0x3E,0x08,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0x7F,0x1F,0x07,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x07, 0x07,0x07,0x0E,0x0E,0x0E,0x0E,0x1C,0x1C,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D,0x1D, 0x1C,0x1C,0x0C,0x0E,0x0E,0x0E,0x07,0x07,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x04,0x04,0x04,0x04,0x84,0x7C,0x3F,0xC4,0x04,0x04,0x04,0x04,0x00, 0x00,0x00,0x38,0x18,0x00,0x80,0x5F,0x91,0x9F,0x97,0x97,0x99,0xD1,0x9F,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x04,0x08, 0x00,0x00,0x00,0x00,0x00,0x08,0x09,0x01,0x06,0x06,0x04,0x05,0x00,0x08,0x00,0x00, 0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  };//起始就是16列中8隐藏了  (8)*16*64 

图像显示

void oled_showimage(unsigned char *image)   //8*128 { 	unsigned int i,j;												 	for(i=0;i<8;i++)				//行 	{ 		Oled_Write_Cmd(0xB0 + i);       //从page0—page7行清空 		Oled_Write_Cmd(0x00);				//最左列 		Oled_Write_Cmd(0x10);				//只用到7bit,16列中8小列最左列 		//列会自动偏移一共128列,导致为清空完 		for(j=128*i;j<(128*(i+1));j++)//128*8=64*16 		{ 			Oled_Write_date(image[j]); 			 		} 	} } 

主函数

void main() { 	//oled初始化 	Oled_Init(); //找到在哪地方显示 //1、什么模式 	Oled_Write_Cmd(0x20); 	Oled_Write_Cmd(0x02); 	oled_clean();                //清空oled 	oled_showimage(bmpimage);			//字符数组 	while(1);										//卡住 } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!