当前位置: 首页 > news >正文

零基础国产GD32单片机编程入门(五)OLED显示及实战含源码

文章目录

    • 一.概要
    • 二.0.96寸OLED屏介绍
      • 1.OLED屏外观图
      • 2.OLED屏特点
      • 3.OLED屏接口定义
      • 4.OLED屏原理图
      • 5.OLED屏像素分辨率
    • 三.字库取模软件PCtoLCD2002介绍
      • 1.生成中文字模
      • 2.生成图片字模
    • 四.GD32单片机驱动OLED显示实验
    • 五.工程源代码下载
    • 六.小结

一.概要

OLED被称为有机激光二极管显示,OLED采用有机材料涂层和玻璃基板,当有电流通过时有机材料就会发光,所以OLED具有自发光特性,不需要背光源的特点。
显示的原理是将图像或文字分解为一组组小点,并通过控制每个点的亮度或颜色来显示信息。这些小点通常是很小的正方形,并且由有机发光二极管组成。
常用的点阵大小有12x12、14x14、16x16、8x16等,每个点用0或1表示,0代表没有点,1代表有点。这样,每个汉字就可以通过一个二进制数组来表示。

例如汉字16x16点阵如下图显示
在这里插入图片描述
其中"光"字C语言数组如下:

{0x40,0x40,0x42,0x44,0x58,0xC0,0x40,0x7F,0x40,0xC0,0x50,0x48,0x46,0x40,0x40,0x00},//光字上半部分点阵数组
{0x80,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00
},//光字下半部分点阵数组

16*16点阵,所以一个汉字横向是16个点,纵向也是16个点。取模顺序是从低到高,即左上角第一个点作为最低位。
上半部分最左边的1列8个点,就是第一个数,0代表没有点,1代表有点,所以二进制是01000000十六进制就是0x40,第2个是左边第2列,也是0x40,第3个是左边第3列0x42,依次类推,才有上面的数组表格。
在这里插入图片描述

二.0.96寸OLED屏介绍

1.OLED屏外观图

正面
在这里插入图片描述

背面
在这里插入图片描述

2.OLED屏特点

0.96寸OLED显示屏是一种小尺寸的有机发光二极管(OLED)显示屏,具有许多优点和特点。

尺寸:0.96寸指的是显示屏的对角线尺寸,通常为0.96英寸(约24.4毫米),适合小型设备和紧凑空间。
分辨率:通常具有128x64像素的分辨率,可以显示清晰的图像和文本。
技术:采用OLED技术,每个像素都是自发光的,不需要背光,因此具有更高的对比度和更广的视角。
高亮度:OLED显示屏具有较高的亮度,即使在室外或明亮的环境下也能清晰可见。
视角广:OLED显示屏具有广阔的视角,即使从不同的角度观看,图像仍然清晰可见。
薄型轻便:OLED显示屏采用薄型设计,重量轻,适合应用于便携式设备和可穿戴设备。
灵活性:某些OLED显示屏采用柔性基板制造,具有弯曲和弯折的能力,适用于柔性显示应用。
高对比度:OLED显示屏具有高对比度,黑色显示非常深黑,白色显示非常亮白,使图像更加清晰。

3.OLED屏接口定义

在这里插入图片描述

4.OLED屏原理图

在这里插入图片描述

5.OLED屏像素分辨率

0.96寸OLED是128x64像素的分辨率,我们可以理解为:水平方向分布了128个像素点,垂直方向分布了64个像素点。而驱动芯片在点亮像素点的时候,是以8个像素点为单位的。我们在画点的时候坐标Y的取值为0-7,坐标X的取值为0-127。
在这里插入图片描述

三.字库取模软件PCtoLCD2002介绍

PCtoLCD2002 是专业的取字模软件,采用C语言和汇编语言两种格式,支持逐行、逐列、行列、列行四种取模方式,可以选择字体、大小、文字的长宽,自动生成你想要的字符,能生成字符字模,中文字模,也能生成图片字模。

1.生成中文字模

1.双击PCtoLCD2002.exe打开软件
在这里插入图片描述
2.配置生成字模格式
在这里插入图片描述
3.保存参数配置
在这里插入图片描述

4.输入要显示的中文,生成显示数组如图

在这里插入图片描述
5.内容拷贝到程序驱动字库数组
在这里插入图片描述
6.程序中调用就能显示中文
在这里插入图片描述

2.生成图片字模

1.双击PCtoLCD2002.exe打开软件
在这里插入图片描述
2.配置生成图片字模格式
在这里插入图片描述

3.按确定保存
在这里插入图片描述
4.打开需要转换的128*64的图片
在这里插入图片描述

5.点击生成字模
在这里插入图片描述
5.内容拷贝到程序图片字库数组
在这里插入图片描述

6.程序中调用就能显示图片
在这里插入图片描述

四.GD32单片机驱动OLED显示实验

硬件准备:

STLINK接GD32F103C8T6开发板,STLINK接电脑USB口。
插上0.96寸OLED,实现OLED显示实验。

板子GND-----液晶GND
板子3.3--------液晶VDD
板子PB8-------液晶SCK
板子PB9-------液晶SDA
板子RESET—液晶RES
板子PB12-----液晶DC
板子PB13-----液晶CS
在这里插入图片描述

添加代码
在这里插入图片描述

添加OLED驱动文件
在这里插入图片描述
OLED管脚对应
在这里插入图片描述

在这里插入图片描述

中文字库里放取模软件生成的数组
在这里插入图片描述

主要代码

int main(void)
{rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1);//AHB主频是1分频systick_config();//系统主频108MHZ,采用外部晶振,由两个宏决定(__SYSTEM_CLOCK_108M_PLL_HXTAL与HXTAL_VALUE)rcu_periph_clock_enable(RCU_AF);//管脚复用时钟alternate function clock使能 delay_1ms(1000);//等待1秒rcu_periph_clock_enable(RCU_GPIOB);//GPIOB时钟使能OLED_Init();//OLED初始化  OLED_Clear();//OLED清屏 while(1){OLED_Clear();//OLED清屏 OLED_ShowCHinese(18,0,0);//显示中文(光)OLED_ShowCHinese(36,0,1);//显示中文(子)OLED_ShowCHinese(54,0,2);//显示中文(物)OLED_ShowCHinese(72,0,3);//显示中文(联)OLED_ShowCHinese(90,0,4);//显示中文(网)OLED_ShowString(6,3,(u8 *)"GD32F103 TEST");//显示字符OLED_ShowString(0,6,(u8 *)"ASCII:");//显示字符  OLED_ShowString(63,6,(u8 *)"CODE:");//显示字符  delay_1ms(5000);//等待5秒}}//初始化				    
void OLED_Init(void)
{ 	rcu_periph_clock_enable(RCU_GPIOB);gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);gpio_bit_write(GPIOB, GPIO_PIN_12, RESET);gpio_bit_write(GPIOB, GPIO_PIN_13, RESET);HAL_Delay(100);OLED_WR_Byte(0xAE,OLED_CMD);//--turn off oled panelOLED_WR_Byte(0x00,OLED_CMD);//---set low column addressOLED_WR_Byte(0x10,OLED_CMD);//---set high column addressOLED_WR_Byte(0x40,OLED_CMD);//--set start line address  Set Mapping RAM Display Start Line (0x00~0x3F)OLED_WR_Byte(0x81,OLED_CMD);//--set contrast control registerOLED_WR_Byte(0xCF,OLED_CMD); // Set SEG Output Current BrightnessOLED_WR_Byte(0xA1,OLED_CMD);//--Set SEG/Column Mapping     0xa0左右反置 0xa1正常OLED_WR_Byte(0xC8,OLED_CMD);//Set COM/Row Scan Direction   0xc0上下反置 0xc8正常OLED_WR_Byte(0xA6,OLED_CMD);//--set normal displayOLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)OLED_WR_Byte(0x3f,OLED_CMD);//--1/64 dutyOLED_WR_Byte(0xD3,OLED_CMD);//-set display offset	Shift Mapping RAM Counter (0x00~0x3F)OLED_WR_Byte(0x00,OLED_CMD);//-not offsetOLED_WR_Byte(0xd5,OLED_CMD);//--set display clock divide ratio/oscillator frequencyOLED_WR_Byte(0x80,OLED_CMD);//--set divide ratio, Set Clock as 100 Frames/SecOLED_WR_Byte(0xD9,OLED_CMD);//--set pre-charge periodOLED_WR_Byte(0xF1,OLED_CMD);//Set Pre-Charge as 15 Clocks & Discharge as 1 ClockOLED_WR_Byte(0xDA,OLED_CMD);//--set com pins hardware configurationOLED_WR_Byte(0x12,OLED_CMD);OLED_WR_Byte(0xDB,OLED_CMD);//--set vcomhOLED_WR_Byte(0x40,OLED_CMD);//Set VCOM Deselect LevelOLED_WR_Byte(0x20,OLED_CMD);//-Set Page Addressing Mode (0x00/0x01/0x02)OLED_WR_Byte(0x02,OLED_CMD);//OLED_WR_Byte(0x8D,OLED_CMD);//--set Charge Pump enable/disableOLED_WR_Byte(0x14,OLED_CMD);//--set(0x10) disableOLED_WR_Byte(0xA4,OLED_CMD);// Disable Entire Display On (0xa4/0xa5)OLED_WR_Byte(0xA6,OLED_CMD);// Disable Inverse Display On (0xa6/a7) OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panelOLED_WR_Byte(0xAF,OLED_CMD); /*display ON*/ OLED_Clear();OLED_Set_Pos(0,0); 	
}  

五.工程源代码下载

通过网盘分享的文件:5.OLED显示.zip
链接: https://pan.baidu.com/s/1iQcxbzoo0H2lwefNG_RaEw 提取码: 4p1b

如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行
CSDN代码

六.小结

该OLED显示屏广泛应用于手持设备、智能手表、健康监测、智能家居等众多领域中,成为现代产品中不可或缺的核心部件之一,所以学会GD32驱动OLED显示,能适应很多产品的开发。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring MVC常用注解及用法
  • 常用工具网站之Emoji
  • Java异常详解(全文干货)
  • 2024中国国际大数据博览会:引领数字变革,共创未来辉煌
  • 页面卡顿检测方案
  • 【STL】红黑树的全面探索与红黑树的实现
  • SQL SERVER日常表碎片和统计信息优化脚本
  • 构建Dubbo工程详解
  • Android Studio Koala下载并安装,测试helloworld.
  • 力扣--1657.确定两个字符串是否接近
  • 氛围感视频素材高级感的去哪里找啊?带氛围感的素材网站库分享
  • 力扣45.跳跃游戏II
  • 通过ICMP判断网络故障
  • Qt:鼠标事件
  • 最近公共祖先(LCA),树上差分,树的直径总结
  • JavaScript-如何实现克隆(clone)函数
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【mysql】环境安装、服务启动、密码设置
  • 11111111
  • Android Volley源码解析
  • Angular 响应式表单之下拉框
  • Debian下无root权限使用Python访问Oracle
  • Effective Java 笔记(一)
  • Git 使用集
  • Java,console输出实时的转向GUI textbox
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java教程_软件开发基础
  • k8s如何管理Pod
  • Laravel核心解读--Facades
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Sass 快速入门教程
  • 测试如何在敏捷团队中工作?
  • 开源SQL-on-Hadoop系统一览
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 你对linux中grep命令知道多少?
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #控制台大学课堂点名问题_课堂随机点名
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (007)XHTML文档之标题——h1~h6
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (6)STL算法之转换
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (C语言)球球大作战
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (一)pytest自动化测试框架之生成测试报告(mac系统)