基于SPI接口的OLED数据显示

一、实验目的

理解OLED屏显和汉字点阵编码原理,使用STM32F103的SPI或IIC接口实现以下功能:

1、显示自己的学号和姓名;

2、显示AHT20的温度和湿度;

3、上下或左右的滑动显示长字符,比如“Hello,欢迎来到重庆交通大学物联网205实训室!”或者歌词、诗词。

二、准备工作

1、stm32mini开发板

2、AHT20温度传感器

3、下载线

4、0.96OLED

5、例程下载:https://detail.tmall.com/item.htm?spm=a1z0d.6639537.1997196601.80.201d74841fbMPw&id=556732249552

三、理论基础

1、0.96OLED简介
  • OLED即有机发光二级管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低耗电、极高反应速度、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优点,被认为是下一代的平面显示器新兴应用技术。
  • OLED 显示和传统的LCD显示不同,其可以自发光,所以不需要背光灯,这使得OLED 显示屏相对于LCD显示屏尺寸更薄,同时显示效果更优
2、接线说明

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rfO2SO6M-1609311441183)(E:\大三学习\嵌入式系统开发\第三次实验\image\1.png)]

针对七孔0.96OLED对MINIstm32开发板的连接

四、实验步骤

1、显示自己的学号和姓名

步骤1:打开例程进入如下画面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShY1SW0h-1609311441192)(E:\大三学习\嵌入式系统开发\第三次实验\image\2.png)]

发现main函数中有很多测试函数。

这里我只保留了主界面显示测试,其他测试都注释掉了,保留的测试用于显示学号和姓名。

步骤2:进入主界面显示测试函数,右击函数,选择Go To Definition Of 'TEST_MainPage’进入该函数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fuFKeN0Y-1609311441198)(E:\大三学习\嵌入式系统开发\第三次实验\image\3.jpg)]

进入后修改函数类容,添加两个函数如下,进行学号和姓名的显示,原来该函数内的内容可以删掉或注释掉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-120KOkAC-1609311441205)(E:\大三学习\嵌入式系统开发\第三次实验\image\4.png)]

这两个函数是以及写好了的,可供调试的函数

步骤3:分别进行用于显示学号和姓名的两个函数,步骤如步骤2所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PalwYE44-1609311441208)(E:\大三学习\嵌入式系统开发\第三次实验\image\5.png)]

GUI_ShowString()这个函数用于显示学号

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9yYuDJxH-1609311441211)(E:\大三学习\嵌入式系统开发\第三次实验\image\6.png)]

GUI_ShowCHinese()这个函数用于显示姓名

步骤4:在显示姓名的函数中,我们要进行数组内容的修改。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6viQNfkA-1609311441212)(E:\大三学习\嵌入式系统开发\第三次实验\image\7.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fj5ET4tp-1609311441214)(E:\大三学习\嵌入式系统开发\第三次实验\image\8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpn4UWyB-1609311441215)(E:\大三学习\嵌入式系统开发\第三次实验\image\9.png)]

最后会进入如下界面:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JneOvSnl-1609311441217)(E:\大三学习\嵌入式系统开发\第三次实验\image\10.png)]

图中相应部分我已进行修改,就是通过修改cfont16[]这个数组内容进行不同的汉字输出的

步骤5:汉字生成。打开汉字生成软件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yDLXDYfd-1609311441218)(E:\大三学习\嵌入式系统开发\第三次实验\image\11.png)]

打开后进行如下设置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twuFY1cF-1609311441220)(E:\大三学习\嵌入式系统开发\第三次实验\image\12.png)]

输入要生成的汉字,生成字模

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OjRhpkx4-1609311441221)(E:\大三学习\嵌入式系统开发\第三次实验\image\13.png)]

将生成的字模复制,粘贴至cfont16[]数组内:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIXmH9zs-1609311441223)(E:\大三学习\嵌入式系统开发\第三次实验\image\14.png)]

步骤6:全部修改完毕后,编译烧录进ministm32开发板,查看效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7dnlynUo-1609311441224)(E:\大三学习\嵌入式系统开发\第三次实验\image\15.png)]

2、显示AHT20的温度和湿度

步骤1:将读取温度的实验代码添加到本次实验的工程中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KnkYbMdv-1609311441225)(E:\大三学习\嵌入式系统开发\第三次实验\image\2.1.png)]

步骤2:修改部分代码(main函数部分代码内容)

  float P,T,ALT;
    uint32_t CT_data[2];
	int  c1,t1;
		delay_init();	    	 //延时函数初始化	  
		NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 	LED_Init();			     //LED端口初始化
		OLED_Init();			//初始化OLED  
		OLED_Clear(0) ; 
		RCC_Configuration();					   	//设置系统时钟
    GPIO_Configuration();					    //IO口设
I2C_Bus_Init();
    ret = ATH20_Init();
    if(ret == 0)
		while(1)
    {   OLED_Clear(0);
         OLED_ShowString(0,11,"631807030616",16);  
		  delay_ms(2500);
       printf("ATH20传感器初始化错误\n");
    }

步骤3:编译烧录,查看效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2zbcb856-1609311441226)(E:\大三学习\嵌入式系统开发\第三次实验\image\16.gif)]

3、上下或左右的滑动显示长字符

步骤1:设置水平左右移

OLED_WR_Byte(0x2E,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x26,OLED_CMD);        //水平向左或者右滚动 26/27
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

步骤2:设置垂直和水平滚动

OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

步骤3:设置滚动区域

   OLED_WR_Byte(0x2e,OLED_CMD);        //关闭滚动
    OLED_WR_Byte(0x29,OLED_CMD);        //水平垂直和水平滚动左右 29/2a
    OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节
    OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0
    OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔
    OLED_WR_Byte(0x07,OLED_CMD);        //终止页 1
    OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量

步骤4:设置滚动的开始

	OLED_WR_Byte(0xA3,OLED_CMD);        //开启滚动
    OLED_WR_Byte(16,OLED_CMD);        //开启滚动
    OLED_WR_Byte(8,OLED_CMD);        //开启滚动
    OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

步骤5:主函数

	delay_init();	    	       //???????	  
	NVIC_Configuration(); 	   //??NVIC????2:2??????,2?????? 	
	OLED_Init();			         //???OLED  
	OLED_Clear(0);             //??(??)
	OLED_WR_Byte(0x2E,OLED_CMD);        //????
    OLED_WR_Byte(0x27,OLED_CMD);        //????????? 26/27
    OLED_WR_Byte(0x00,OLED_CMD);        //????
	OLED_WR_Byte(0x00,OLED_CMD);        //??? 0
	OLED_WR_Byte(0x07,OLED_CMD);        //??????
	OLED_WR_Byte(0x07,OLED_CMD);        //??? 7
	OLED_WR_Byte(0x00,OLED_CMD);        //????
	OLED_WR_Byte(0xFF,OLED_CMD);        //????

	OLED_ShowCHinese(6,0,24);
    OLED_ShowCHinese(26,0,25);
	OLED_ShowCHinese(46,0,21);
	OLED_ShowCHinese(66,0,6);
    OLED_ShowCHinese(86,0,7);
	OLED_ShowCHinese(106,0,8);
	OLED_ShowCHinese(6,3,22);
    OLED_ShowCHinese(26,3,23);
	OLED_ShowCHinese(46,3,21);
	OLED_ShowString(0,6,"631807030433",16);  
	OLED_WR_Byte(0x2F,OLED_CMD);  

步骤6:编译烧录,查看效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xEbaxLp5-1609311441227)(E:\大三学习\嵌入式系统开发\第三次实验\image\17.gif)]

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值