0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机的OLED显示图片文字

王子变青蛙_35400519 来源:王子变青蛙_35400519 作者:王子变青蛙_35400 2022-06-12 00:43 次阅读

目录

一、前言

二、OLED模块介绍

1、液晶显示屏

2、0.95OLED模块

三、硬件连接

四、软件代码

五、效果展示

六、代码链接

一、前言

从性能来说OLED屏幕分辨率相对较高,引脚也少很多,占用的I/O口会少很多。从功耗来说首先oled显示屏不需要背光灯,当有电流通过时,这些有机材料就可以发光,而且3.3V~5V之间都可以使用。从外观来说体型更小,重量更轻更薄,可用来制作许多小型显示设备。这次我使用的是四个引脚的0.95寸oled显示屏,进行文字图片的循环显示。

二、OLED模块介绍

1、液晶显示屏

液晶显示器,为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。

液晶显示器的工作原理:液晶是一种介于固体和液体之间的特殊物质,它是一种有机化合物,常态下呈液态,但是它的分子排列却和固体晶体一样非常规则,因此取名液晶,它的另一个特殊性质在于,如果给液晶施加一个电场,会改变它的分子排列,这时如果给它配合偏振光片,它就具有阻止光线通过的作用(在不施加电场时,光线可以顺利透过),如果再配合彩色滤光片,改变加给液晶电压大小,就能改变某一颜色透光量的多少,也可以形象地说改变液晶两端的电压就能改变它的透光度(但实际中这必须和偏光板配合)。

2、0.95OLED模块

特点:OLED显示屏是利用有机电致发光二极管制成的显示屏。由于同时具备有机电自发光二极管,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

中国OLED产业前景非常广阔,业内企业也正在努力积累发展经验,但国内产业链上游环节薄弱,行业的配套能力欠缺等因素为广大厂商制造了比较大的发展障碍。

相关资料

oled电路原理

pYYBAGKkoa-AM7NiAACpS82Oc-0949.png

oled行列位置

poYBAGKkodeAPuZeAAA0ejYLE_E413.png

三、硬件连接

1、实物图

poYBAGKkod6Ab1I_AAFGTZg_H4M995.png

VCC:接5V

GND:接地

SCL:IIC时钟线(我接的P2^0)

SDA:IIC数据线(我接的P2^1)

2、取模软件

poYBAGKkofaAVZ2fAADtMFdTFiQ879.png

四、软件代码

pYYBAGKkoguALo3DAAAhOoiQdY4555.png

main主函数

进行一些宏定义,对各种函数的调用。

void main()`	
{
	OLED_Init();			
	OLED_ColorTurn(0);	//0正常显示,1反色显示`	
	OLED_DisplayTurn(0);//0正常显示,1屏幕反转显示`	
	while(1) 
	{
    OLED_DrawBMP(0,4,25,24,BMP4);	//生成图像	 
	OLED_DrawBMP(25,4,25,24,BMP4);
	OLED_DrawBMP(50,4,25,24,BMP4);
	OLED_DrawBMP(75,4,25,24,BMP4);
	OLED_DrawBMP(100,4,25,24,BMP4);			 
	OLED_ShowChinese(0,1,0,16);		//生成文字	 
	OLED_ShowChinese(27,1,1,16);		  
	OLED_ShowChinese(54,1,2,16);
	OLED_ShowChinese(81,1,3,16);
	OLED_ShowChinese(111,1,4,16);
				  				 		
	delay_ms(200);						  
    OLED_Clear();
	OLED_ShowChinese(0,0,5,16);
	OLED_ShowChinese(17,0,6,16);
	OLED_ShowString(33,0,":",16);		  //显示字符串
	OLED_ShowChinese(51,0,7,16);
	OLED_ShowChinese(67,0,8,16);
	OLED_ShowChinese(83,0,9,16);
	OLED_ShowNum(10,2,16286,5,16);		//显示数字
    OLED_ShowNum(50,2,30070,5,16);		//显示数字

	delay_ms(50);						  
	OLED_Clear();								  
}
}	

oled.c

void delay_ms(unsigned int ms)
{                         
	unsigned int a;
	while(ms)
	{
		a=1800;
		while(a--);
		ms--;
	}
	return;
}
//反色显示函数
void OLED_ColorTurn(u8 i)
{
	if(i==0)
		{
			OLED_WR_Byte(0xA6,OLED_CMD);
		}
	if(i==1)
		{
			OLED_WR_Byte(0xA7,OLED_CMD);
		}
}
  //屏幕旋转180度
void OLED_DisplayTurn(u8 i)
{
	if(i==0)
		{
			OLED_WR_Byte(0xC8,OLED_CMD);
			OLED_WR_Byte(0xA1,OLED_CMD);
		}
	if(i==1)
		{
			OLED_WR_Byte(0xC0,OLED_CMD);
			OLED_WR_Byte(0xA0,OLED_CMD);
		}
}
 //延时
void IIC_delay(void)
{
	u8 t=1;
	while(t--);
}
 //起始信号
void I2C_Start(void)
//结束信号
void I2C_Stop(void)
//等待信号响应
void I2C_WaitAck(void) 
void Send_Byte(u8 dat) //写入一个字节
void OLED_WR_Byte(u8 dat,u8 mode)
{
	I2C_Start();
	Send_Byte(0x78);
	I2C_WaitAck();
	if(mode){Send_Byte(0x40);}
  else{Send_Byte(0x00);}
	I2C_WaitAck();
	Send_Byte(dat);
	I2C_WaitAck();
	I2C_Stop();
}
void OLED_Set_Pos(u8 x, u8 y) //坐标设置
{ 
	OLED_WR_Byte(0xb0+y,OLED_CMD);
	OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);
	OLED_WR_Byte((x&0x0f),OLED_CMD);
}     
/***void OLED_Display_On(void)	//开启OLED显示
{
	OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC?üá?
	OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
	OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
}
 **/    
/****void OLED_Display_Off(void)   //关闭OLED显示
{
	OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC?üá?
	OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
	OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
}
 ****/
void OLED_Clear(void)  	   //清屏函数
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 sizey)
{      	
	u8 c=0,sizex=sizey/2;
	u32 i=0,size1;
	if(sizey==8)size1=6;
	else size1=(sizey/8+((sizey%8)?1:0))*(sizey/2);
	c=chr-' ';  
	OLED_Set_Pos(x,y);
	for(i=0;i;i++)>

oledWENZI.h

#ifndef __OLEDFONT_H
#define __OLEDFONT_H 	

//中文字
unsigned char code Hzk[][33]=

/************************************6*8点阵显示字符************************************/
unsigned char code asc2_0806[][6] =

//16*16 ASCII字符集点阵
unsigned char code asc2_1608[][16]=

oledTUPIAN.h

#ifndef __BMP_H
#define __BMP_H
/******************************************************************
							图片
*******************************************************************/
unsigned char code BMP1[] =

unsigned char code BMP2[] =

unsigned char code BMP3[] =

unsigned char code BMP4[] =

#endif

五、效果展示

实物演示链接 https://live.csdn.net/v/211086

六、代码链接

关注公众号“小小创客者”回复“OLED”获得代码,回复“取模软件”获取取模软件。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6000

    文章

    43968

    浏览量

    620766
  • OLED
    +关注

    关注

    118

    文章

    5984

    浏览量

    221409
  • 51单片机
    +关注

    关注

    269

    文章

    5648

    浏览量

    120690
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128383
收藏 人收藏

    评论

    相关推荐

    51单片机OLED基本操作,汉字、字符(串)、变量值、图片显示 #51单片机 #oled显示屏#硬声创作季

    单片机OLED显示51单片机LED显示显示
    fly
    发布于 :2022年08月12日 01:37:43

    51单片机显示透明图片

    51单片机显示透明图片,即把一个图片叠加在另一个图片上。
    发表于 08-22 09:50

    51单片机驱动OLED 求大神解答

    我一点也不懂,就是买了一台小车,主板是51单片机核心的,说是可以加很多的传感器,我想把温湿度,火焰,天然气探测模块用51单片机控制然后把传感器工作的实时数据反馈到一块
    发表于 11-16 18:13

    51单片机0.96OLED带字库

    51单片机0.96OLED带字库
    发表于 04-22 12:23

    如何用51单片机驱动 12864_OLED显示温度值,或者adc值

    如何用51单片机驱动 12864_OLED显示温度值,或者adc采样的电压值,有没有大神做过,求解决办法
    发表于 06-12 20:54

    如何制作一个基于51单片机文字滚动的LED灯显示

    如何制作一个基于51单片机文字滚动的LED灯显示
    发表于 10-07 01:22

    如何用51单片机使七脚oled显示显示

    如何用51单片机使七脚oled显示显示
    发表于 07-18 04:29

    51单片机驱动oled显示

    文章目录51单片机一.前言二.代码三.总结51单片机一.前言说起51,可以说是老古董了,刚开始接触单片机
    发表于 07-15 07:11

    如何利用51单片机+0.96寸iic接口oled显示图片或动图呢

    ~利用51单片机+0.96寸iic接口oled显示图片或动图
    发表于 11-17 06:10

    如何利用89C51实现OLED屏的显示

    的89C51显示程序图片制作:尺寸大小>>转BMP格式>>取模89C52单片机按键,蜂鸣器89C51I2C通信的相关配置/*********
    发表于 12-02 08:19

    基于51单片机简易示波器设计OLED显示(包含源程序原理图PCB)

    基于51单片机简易示波器设计OLED显示(包含源程序原理图PCB)(单片机课程设计)- 基于51
    发表于 07-22 14:50 245次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>简易示波器设计<b class='flag-5'>OLED</b><b class='flag-5'>显示</b>(包含源程序原理图PCB)

    利用51单片机+0.96寸iic接口oled显示图片或动图

    ~利用51单片机+0.96寸iic接口oled显示图片或动图
    发表于 11-10 17:21 33次下载
    利用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>+0.96寸iic接口<b class='flag-5'>oled</b><b class='flag-5'>显示</b><b class='flag-5'>图片</b>或动图

    51单片机 OLED Proteus SPI 仿真

    51单片机 OLED Proteus SPI 仿真
    发表于 11-20 11:21 45次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b> <b class='flag-5'>OLED</b> Proteus SPI 仿真

    51单片机+oled+ds18b20检测并显示温度第一篇:初始化oled显示

    51单片机+oled+ds18b20检测并显示温度~
    发表于 11-21 11:51 68次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>+<b class='flag-5'>oled</b>+ds18b20检测并<b class='flag-5'>显示</b>温度第一篇:初始化<b class='flag-5'>oled</b><b class='flag-5'>显示</b>

    基于89C51OLED显示

    的89C51显示程序图片制作:尺寸大小 >> 转BMP格式 >> 取模89C52单片机按键,蜂鸣器89C51
    发表于 11-23 17:21 23次下载
    基于89C<b class='flag-5'>51</b>的<b class='flag-5'>OLED</b>屏<b class='flag-5'>显示</b>