STM32--7针0.96寸OLED屏幕显示(4线SPI)

news/2024/11/25 10:59:28/

本文介绍基于STM32F103C8T6+0.96寸OLED(7针)的显示(完整程序代码见文末链接)

一、简介

OLED,即有机发光二极管( Organic Light Emitting Diode)。 OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。
在这里插入图片描述
关于OLED基础知识介绍可参考我的另外一篇博客,建议阅读本文前先了解下,链接如下:https://blog.csdn.net/u011816009/article/details/130119426

本文是基于7pin 0.96寸OLED 屏幕4线SPI通信实现的和STM32通信,该7针屏幕模组还支持IIC以及3线SPI通信,在此不做赘述,可查看相关博文

二、接线图

STM32F103C8T6+0.96寸OLED(7针4线SPI)接线图,其中单片机的IO口资源可以在代码中修改,结合实际情况选用

STM32F103C8T60.96寸OLED(7针4线SPI)
3.3VVCC
GNDGND
PA5SCL/D0
PA6SDA/D1
PA3RST
PA4DC
PA2CS

三、代码函数(完整工程文件见文末连接)

显示主函数如下所示,其中:

OLED_ShowString:字符串显示函数
OLED_ShowChar:单个字符显示函数
OLED_ShowNum:变量/数值显示函数

int main(void){ delay_init();	//延时函数初始化	  OLED_Init();    //OLED初始化函数u32 t=10;while(1){		OLED_ShowString(0,0,"Hello world",16); //显示字符串		OLED_ShowNum(10,30,t,2,16);            //显示具体变量t数值OLED_ShowChar(60,30,'A',16,1);         //显示单个字符OLED_Refresh_Gram(); //更新显示到OLED屏幕//OLED_Fill(0,60,127,63,1);//填充OLED}}

OLED_ShowString:字符串显示函数

//显示字符串
//x,y:起点坐标  
//size:字体大小 
//*p:字符串起始地址 
void OLED_ShowString(u8 x,u8 y,const u8 *p,u8 size)
{	while((*p<='~')&&(*p>=' '))//判断是不是非法字符!{       if(x>(128-(size/2))){x=0;y+=size;}if(y>(64-size)){y=x=0;OLED_Clear();}OLED_ShowChar(x,y,*p,size,1);	 x+=size/2;p++;}  }	

OLED_ShowChar:单个字符显示函数

//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示				 
//size:选择字体 16/12 
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{      			    u8 temp,t,t1;u8 y0=y;u8 csize=(size/8+((size%8)?1:0))*(size/2);		//得到字体一个字符对应点阵集所占的字节数chr=chr-' ';//得到偏移后的值		 for(t=0;t<csize;t++){   if(size==12)temp=asc2_1206[chr][t]; 	 	//调用1206字体else if(size==16)temp=asc2_1608[chr][t];	//调用1608字体else if(size==24)temp=asc2_2412[chr][t];	//调用2412字体else return;								//没有的字库for(t1=0;t1<8;t1++){if(temp&0x80)OLED_DrawPoint(x,y,mode);else OLED_DrawPoint(x,y,!mode);temp<<=1;y++;if((y-y0)==size){y=y0;x++;break;}}  	 }          
}

OLED_ShowNum:变量/数值显示函数

//显示2个数字
//x,y :起点坐标	 
//len :数字的位数
//size:字体大小
//mode:模式	0,填充模式;1,叠加模式
//num:数值(0~4294967295);	 		  
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
{         	u8 t,temp;u8 enshow=0;						   for(t=0;t<len;t++){temp=(num/mypow(10,len-t-1))%10;if(enshow==0&&t<(len-1)){if(temp==0){OLED_ShowChar(x+(size/2)*t,y,' ',size,1);continue;}else enshow=1; }OLED_ShowChar(x+(size/2)*t,y,temp+'0',size,1); }
} 

四、实际显示效果

在这里插入图片描述

STM32--7针0.96寸OLED屏幕显示(4线SPI)

附完整代码程序资料

链接:https://pan.baidu.com/s/1nH14xjhXIhVPtjbK8joR9w?pwd=kxhl
提取码:kxhl


http://www.ppmy.cn/news/1326225.html

相关文章

Redis--HyperLogLog的指令语法与使用场景举例(UV统计)

文章目录 前言HyperLogLog介绍HyperLogLog指令使用使用场景&#xff1a;UV统计 前言 Redis除了常见的五种数据类型之外&#xff0c;其实还有一些少见的数据结构&#xff0c;如Geo&#xff0c;HyperLogLog等。虽然它们少见&#xff0c;但是作用却不容小觑。本文将介绍HyperLogL…

牛客小白月赛86 --- E-- 可口蛋糕 ---- 题解

可口蛋糕 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 小蓝制作了 n 个蛋糕并将其从左往右排成一行&#xff0c;其中第 i 个蛋糕的饱腹度为 wi​ 其可口值为 di​。 由…

C++类与对象【继承】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;C从基础到进阶 &#x1f384;1 继承&#x1f354;1.1 继承的基本语法&#x1f354;1.2 继承方式&#x1f354;1.3 继承中的对象模型&#x1f354;1.4 继承中构造和析构顺序&#x1f354;1.…

Visual Studio Code 1.67调整文件嵌套、Markdown导航

2022年4月发布的微软代码编辑器也为Java和Visual Studio code for Web扩展包带来了改进。 Visual Studio Code 1.67发布于5月5日&#xff0c;可以从项目网站下载&#xff0c;适用于Linux、Windows或Mac。新特性中特别关注的是浏览器文件嵌套和Markdown代码导航。该版本还带来了…

列表项按需加载 v-infinite-scroll 滚动条触底无效 解决方案

后台返回的分页数据需要实现滚动条触底加载下一页&#xff0c; 用了element-ui 的 v-infinite-scroll 指令来实现。但是发现在某一分辨率下, 滚动条触底时未触发加载方法。 解决方法 在同一标签内将 infinite-scroll-distance 设置为 1 或其他合适的 >0 的数值&#xff0…

ValueError: Unable to read workbook: could not read strings from data.xlsx解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

一、背景 docker安装jenkins&#xff0c;可能你会反问&#xff0c;这太简单了&#xff0c;有什么好讲的。 我最近就接手了一个打包项目&#xff0c;它是一个nodejs的前端项目&#xff0c;jenkins已在容器里部署且运行OK。 但是&#xff0c;前端组很追求新技术&#xff0c;不…

【jupyter添加虚拟环境内核(pytorch、tensorflow)- 实操可行】

jupyter添加虚拟环境内核&#xff08;pytorch、tensorflow&#xff09;- 实操可行 1、查看当前状态(winR&#xff0c;cmd进入之后)2、激活虚拟环境并进入3、安装ipykernel5、完整步骤代码总结6、进入jupyter 添加pytorch、tensorflow内核操作相同&#xff0c;以下内容默认已经安…