实例6,stc8a8k单片机开发板4脚的OLED显示数据(I2C通信) 您所在的位置:网站首页 oled显示屏程序流程图 实例6,stc8a8k单片机开发板4脚的OLED显示数据(I2C通信)

实例6,stc8a8k单片机开发板4脚的OLED显示数据(I2C通信)

2023-09-09 06:39| 来源: 网络整理| 查看: 265

一、实验目的 利用显示屏OLED显示数据,包括整数,小数,字符串等; 二、实验器材 stc8a8k自制开发板; stc自动下载器; 4脚的OLED显示屏; 三、实验任务: 实验背景: 有时候我们需要测量温度,温度有小数点,比如35.6度,那么就是需要显示小数,怎么显示小数; 有时候,我们需要知道时间,135秒,这个秒不可能是小数,所以需要显示整数,怎么显示整数? 有时候,我们需要一些提示消息: 比如wen=35.6,sec=135 这个wen=,sec=怎么显示?所以需要显示字符串,来刚给人提示消息。

完成任务: 1、在特定坐标的地方,OLED上面显示小数1023.56,365.23;62.65;6.32; 2、在屏幕特定坐标,显示整数123456; 3、在屏幕特定坐标,显示字符串Wendu=;

四、实验步骤: 1、认识OLED; OLED有四线IIC协议的,有7线SPI通信的,还有串口屏等等。 这里我们讲解的是四脚的OLED的使用。直接讲使用,具体内部驱动原理,后面自己再深入研究。我们的OLED,一般是12864,什么意思呢,就是整个屏幕,长是128个像素点,宽是64个像素点,每个字符,比如a,+,-等等,由多个像素点组成,**如果一个字符是88个像素点,那么最多可以实现 长度:128/8=16个字符 宽度:64/8=8行** 但是因为做得太密,一点空间不留,会显得显示效果不好,密密麻麻。所以宽度,尽量做成6行,行和行之间,隔3-5个像素点。 下图中绿色是显示区域:类似于黑板,在里面定义好显示什么数据,后面用好函数就好了。 在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201125104208346.png#pic_center)

在这里插入图片描述

2、OLED接线; 有四个脚,两个是电源,GND,有两个是数据通信的引脚。根据oled.h头文件,根据实际的接线,修改相对应的引脚就可以了。 在这里插入图片描述 在这里插入图片描述 注意,最外面是VCC, 分别是VCC,GND,P77,P43。 如果是对换,就接这个地方,下图这里,刚好是 GND,VCC,P74,P75. 在这里插入图片描述

有一些店家的是GND,VCC,一定要看准了,不能对换。不然会烧,实在是反的,需要进行自己用洞洞板焊接一个转接板。

在这里插入图片描述 3、OLED显示流程和相关函数 (1)包含头文件oled.h和头文件oled.c 把头文件路径添加进来。不然找不到这个oled。h 在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

(2)引入头文件的路径; 见前面的图。

(3)在主函数里面,添加oled.h文件; 在这里插入图片描述

(4)修改oled.h里面的引脚的定义,和实物原理图对; 在这里插入图片描述 记得,更改延时函数的延时次数。因为stc8a8k是增强版本的单片机,延时次数应该更加多。

(5)具体编程: 初始化OLED; 延时一下; 可以使用OLED里面的函数。

函数: 在这里插入图片描述 主要有5个函数,分别进行讲解,这里特别说明下,没有写浮点数小数的显示函数,我们后面也讲解下。 函数1:void OLED_Init(void); //屏幕初始化 函数2:void OLED_Clear(void);//清空屏幕 :函数3: void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);// 函数4: void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);//显示整型***** *函数5:void OLED_ShowString(u8 x,u8 y, u8 p,u8 Char_Size);//显示字符串

函数6:显示浮点数。 需要进行多一点设置。 在main函数前面,注意是前面,设置一个全局变量的数组; unsigned char disbuf[9]; 然后在main函数的头文件,包含一个头文件 #include 然后显示浮点数的时候,先将浮点数,用sprintf函数变为字符串,然后用显示字符串的方法,显示出来。 比如, float aa=3.15; sprintf(disbuf,"%.2f",aa);//.2意思是2个小数点,注意有四舍五入的情况出现。 OLED_ShowString(0,0,disbuf,8); 多了一个步骤。

**

总的例子:

** 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

代码:

//******************************************************************************/ #include "stc8a8k.h" #include "oled.h" #include "stdio.h"//显示浮点数的sprintf函数,需要 unsigned char disbuf[9];//显示浮点数需要 void delay_tms(unsigned int ms) { unsigned int i,j; for(i=ms;i>0;i--) for(j=0;j //测试字符串显示,测试结果: //第一个参数,以8为间隔; //第二个参数,是行,如果第四个参数是12,那么以1间隔0-1-2-3-4-5-6,如果第四个参数是16,那么以2间隔,0-2-4-6 //第三个参数,字符串,双引号括起来 //第四个参数,是字体尺寸12或者16,16字体大一写 OLED_ShowString(0,0,"1234567890123456!",12); OLED_ShowString(8,1,"Hello1!",12); OLED_ShowString(16,2,"Hello2!",12); OLED_ShowString(0,3,"Hello3!",12); OLED_ShowString(8,4,"Hello4!",12); OLED_ShowString(16,5,"Hello5!",12); OLED_ShowString(0,6,"Hello6!",12); delay_tms(5000);//显示5秒 OLED_Clear() ; //清空屏幕 OLED_ShowString(0,0,"1234567890123456",16); OLED_ShowString(8,2,"Hello2!",16); OLED_ShowString(16,4,"Hello4!",16); OLED_ShowString(0,6,"Hello6!",16); delay_tms(3000);//显示5秒 OLED_Clear() ; //清空屏幕 OLED_ShowChar(0,0,'W',12);//显示ASCII字符 OLED_ShowChar(8,0,'e',12);//显示ASCII字符 OLED_ShowChar(16,0,'n',12);//显示ASCII字符 OLED_ShowChar(24,0,'=',12);//显示ASCII字符 OLED_ShowChar(32,0,'2',12);//显示ASCII字符 OLED_ShowChar(40,0,'6',12);//显示ASCII字符 OLED_ShowChar(48,0,'.',12);//显示ASCII字符 OLED_ShowChar(56,0,'5',12);//显示ASCII字符 delay_tms(3000);//显示5秒 OLED_Clear() ; //清空屏幕 OLED_ShowNum(0,0,intnum,5,12);// 63254 OLED_ShowNum(1,1,10000,5,12);// 63254 OLED_ShowNum(2,2,23564,5,12);// 63254 //OLED_ShowNum(6,0,6892,5,12);//显示ASCII字符的码值 delay_tms(3000); OLED_Clear() ; //清空屏幕 OLED_ShowNum(0,0,intnum,5,16);// 63254 OLED_ShowNum(1,2,10000,5,16);// 63254 OLED_ShowNum(2,4,23564,5,16);// 63254 //OLED_ShowNum(6,0,6892,5,16);//显示ASCII字符的码值 delay_tms(3000); OLED_Clear() ; //清空屏幕 //显示浮点数,两位小数。 %.2f sprintf(disbuf,"%.2f",floatnum); OLED_ShowString(0,0,disbuf,12); delay_tms(3000); OLED_Clear() ; //清空屏幕 sprintf(disbuf,"%.2f",floatnum); OLED_ShowString(0,0,disbuf,16); delay_tms(3000); OLED_Clear() ; //清空屏幕 } }

效果:

在这里插入图片描述

在这插入图片描述

在这里插入图片描述

在这里插入图片描述

4、案例二:OLED显示屏布局(画黑板报,规划好显示界面) 小小操作:我们显示这个内容, 第一行显示温度; 第二行显示时间; 第三个显示一串字符串; 第四行,显示距离; 先画好黑板,然后用好函数进行显示就好了。 在这里插入图片描述 在这里插入图片描述

//******************************************************************************/ #include "stc8a8k.h" #include "oled.h" #include "stdio.h"//显示浮点数的sprintf函数,需要 unsigned char disbuf[9];//显示浮点数需要 void delay_tms(unsigned int ms) { unsigned int i,j; for(i=ms;i>0;i--) for(j=0;j //测试字符串显示,测试结果: //第一个参数,以8为间隔; //第二个参数,是行,如果第四个参数是12,那么以1间隔0-1-2-3-4-5-6,如果第四个参数是16,那么以2间隔,0-2-4-6 //第三个参数,字符串,双引号括起来 //第四个参数,是字体尺寸12或者16,16字体大一写 sprintf(disbuf,"%.2f",floatnum); OLED_ShowString(4*8,0,disbuf,12); OLED_ShowNum(5*8,1,intnum,5,12);// 63254 sprintf(disbuf,"%.2f",floatnum); OLED_ShowString(4*8,3,disbuf,12); } }

效果: 在这里插入图片描述 *改善版本:用16为字体大小,这里第二个参数就是以2为倍数了:。 在这里插入图片描述

//******************************************************************************/ #include "stc8a8k.h" #include "oled.h" #include "stdio.h"//显示浮点数的sprintf函数,需要 unsigned char disbuf[9];//显示浮点数需要 void delay_tms(unsigned int ms) { unsigned int i,j; for(i=ms;i>0;i--) for(j=0;j //测试字符串显示,测试结果: //第一个参数,以8为间隔; //第二个参数,是行,如果第四个参数是12,那么以1间隔0-1-2-3-4-5-6,如果第四个参数是16,那么以2间隔,0-2-4-6 //第三个参数,字符串,双引号括起来 //第四个参数,是字体尺寸12或者16,16字体大一写 sprintf(disbuf,"%.2f",floatnum); OLED_ShowString(4*8,0,disbuf,16); OLED_ShowNum(5*8,2,intnum,5,16);// 63254 sprintf(disbuf,"%.2f",floatnum); OLED_ShowString(4*8,6,disbuf,16); } }

在这里插入图片描述 效果好很多。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有