oled显示一张图片

器材
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);										//卡住
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值