使用OLED屏显示汉字

  • 一、SPI
    • 1.什么是SPI
    • 2.SPI协议概括
    • 3.SPI接口
  • 二、使用OLED屏显示
    • 1.OLED屏简介
    • 2.所需汉字的点阵
    • 3.部分代码
    • 4.静态显示汉字
      • (1)在gui.c中的oledfont.h中填入汉字的点阵
      • (2)在test.c中的void TEST_MainPage(void)函数中编写需要显示的汉字/数字
      • (3)main.c
      • (4)运行结果
    • 5.动态显示
      • (1)OLED屏的滚屏命令
      • (2)部分代码
      • (3)运行结果
  • 完整代码
  • 参考文章

一、SPI

1.什么是SPI

SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,如今越来越多的芯片集成了这种通信协议,比如AT91RM9200。

2.SPI协议概括

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

(1)SDI – SerialData In,串行数据输入;

(2)SDO – SerialDataOut,串行数据输出;

(3)SCLK – Serial Clock,时钟信号,由主设备产生;

(4)CS – Chip Select,从设备使能信号,由主设备控制。

其中,CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个SPI设备成为可能。

接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要8次时钟信号的改变(上沿和下沿为一次),才能完成8位数据的传输。

SCLK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCLK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCLK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。

最后,SPI接口的一个缺点:没有指定的流控制,没有应答机制确认是否接收到数据。

SPI的片选可以扩充选择16个外设,这时PCS输出=NPCS,说NPCS03接4-16译码器,这个译码器是需要外接4-16译码器,译码器的输入为NPCS03,输出用于16个外设的选择。

3.SPI接口

SPI(Serial Peripheral Interface–串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。SPI总线可直接与各个厂家生产的多种标准外围器件相连,包括FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。该接口一般使用4条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线NSS。

SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还和数字信号处理器和数字信号解码器之间。

SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。

特点:信号线少,协议简单,相对数据速率高。

(1)MOSI – 主器件数据输出,从器件数据输入

(2)MISO – 主器件数据输入,从器件数据输出

(3)SCLK –时钟信号,由主器件产生,最大为fPCLK/2,从模式频率最大为fCPU/2

(4)NSS – 从器件使能信号,由主器件控制,有的IC会标注为CS(Chip select)

在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从器件的系统中,每个从器件需要独立的使能信号,硬件上比I2C系统要稍微复杂一些。

SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如下图所示,在SCLK的上升沿上数据改变,同时一位数据被存入移位寄存器。

二、使用OLED屏显示

1.OLED屏简介

具体简介可看此处

接线说明

2.所需汉字的点阵

使用点阵汉字生成器,得到自己需要汉字的点阵
如下

DB 08H 08H FFH 08H 00H 08H 49H 2AH 28H 08H 1BH 29H 48H 88H 08H 08H;
DB 20H 20H FEH 20H 80H F8H 10H A0H 50H 90H FEH 10H 90H 90H 10H 30H;“蒋”,0
DB 04H 7FH 04H 1FH 10H 1FH 10H 1FH 04H FFH 12H 22H CBH 12H 2AH 04H;
DB 40H FCH 40H F0H 10H F0H 10H F0H 00H FEH 10H 08H 26H 90H 90H 00H;“慕”,1
DB 00H 0FH 08H 08H 08H 0AH 09H 08H 08H 08H 10H 10H 20H 20H 40H 80H;
DB 00H E0H 20H 20H 20H 20H 20H A0H A0H 20H 20H 22H 22H 22H 1EH 00H;“凡”,2

3.部分代码

4.静态显示汉字

(1)在gui.c中的oledfont.h中填入汉字的点阵

(2)在test.c中的void TEST_MainPage(void)函数中编写需要显示的汉字/数字

void TEST_MainPage(void)
{   GUI_ShowCHinese(28,20,16,"蒋慕凡",1);GUI_ShowString(4,48,"631907060208",16,1);delay_ms(1500);      delay_ms(1500);
}

(3)main.c

int main(void)
{   delay_init();                    //延时函数初始化    OLED_Init();                   //初始化OLED  OLED_Clear(0);                   //清屏(全黑)while(1) {   TEST_MainPage();                 //界面显示}
}

(4)运行结果

5.动态显示

(1)OLED屏的滚屏命令

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);        //终止页 7
OLED_WR_Byte(0x01,OLED_CMD);        //垂直滚动偏移量
OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动

(2)部分代码

main.c

int main(void)
{   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/27OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节OLED_WR_Byte(0x00,OLED_CMD);        //起始页 0OLED_WR_Byte(0x07,OLED_CMD);        //滚动时间间隔OLED_WR_Byte(0x07,OLED_CMD);        //终止页 7OLED_WR_Byte(0x00,OLED_CMD);        //虚拟字节OLED_WR_Byte(0xFF,OLED_CMD);        //虚拟字节TEST_MainPage();                    //需要显示的内容OLED_WR_Byte(0x2F,OLED_CMD);        //开启滚动}

(3)运行结果

完整代码

https://github.com/J-JMF/OLED

参考文章

https://blog.csdn.net/weixin_56102526/article/details/121481216?spm=1001.2014.3001.5501

使用OLED屏显示汉字相关推荐

  1. 用STM32F103达成基于I2C协议的AHT20温湿度传感器和OLED屏显示汉字

    目录 一 I2C协议简介 硬件I2C与软件I2C 二 代码和ATH20芯片实现温湿度的串口显示 三 用stm32f103芯片的SPI和IIC接口接上OLED屏显示中文姓名温湿度 1 先用文字字模生成器 ...

  2. 【嵌入式】STM32基于SPI通信协议OLED屏显示

    STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...

  3. 基于STM32的0.96寸OLED显示屏显示汉字+数字

    文章目录 一.SPI协议 1.什么是SPI协议 2. SPI 协议的物理层和协议层 二.0.96寸OLED屏 三.使用OLED屏显示数据 1.下载程序 2.打开工程 3.部分代码 4.编译并烧录 5. ...

  4. esp32使用MicroPython驱动oled屏显示中文和英文

    文章目录 esp32使用MicroPython驱动oled屏显示中文和英文 介绍 安装 特点 开源 硬件连接 API 示例 显示英文字符 显示汉字 参考链接 esp32使用MicroPython驱动o ...

  5. 实验 STM32 基于SPI的OLED屏显示

    STM32 基于SPI的OLED屏显示 一.任务要求 二.显示自己的学号和姓名 1.例子程序的改写 (1)下载资料 (2)解压后找到文件,并用KEIL打开. (3)改写程序 2.连接硬件 3.运行结果 ...

  6. 基于STM32F4 的OLED屏显示噪点、花屏问题

    现象 在实现OLED屏显示 内容时,屏幕会出现噪点:多点亮一些点位,使要显示的内容不能辨识. 原因 1.可能是因为当前io配置频率过高 2.延时时间太短 解决方法 方法1.更换io管脚为可高频io 例 ...

  7. esp32 spi 驱动 oled 屏显示来自 PC 的画面

    esp32 spi 驱动 oled 屏显示来自 PC 的画面 实验代码 gayhub 实验源码 设备及运行环境 装有python的电脑 Python 3.8.2 (tags/v3.8.2:7b3ab5 ...

  8. nokia5110液晶屏显示汉字,图形,…

    nokia5110液晶屏显示汉字,图形,字符,字符串 从网上看到的文章,感觉很好,顾转载收藏啦 #include #include #define uchar unsigned char #defin ...

  9. STM32+OLED巧妙显示汉字英文

    STM32+OLED巧妙显示汉字英文 目标:实现OLED_Print函数,可以在OLED屏幕上显示中英文和符号混合的任意字符串 汉字编码原理 ASCII码显示的原理这里不再说明,一般的OLED例程都有 ...

  10. msp430f5529——OLED屏显示文字与图片

    目录 前言 一.效果展示 二.步骤 1.OLED.C文件 2.OLED.h文件 3.OLEDFONT.h文件 4.type.h文件 5.bmp.h文件 6.main.c 7.关于文字和图片的取模 总结 ...

最新文章

  1. 关于System.Web.Caching的“未将对象引用设置到对象的实例”错误
  2. 在数据准备区中允许使用的数据结构有哪些, 各有什么优点?
  3. 机器人学习--电子指南针定位导航
  4. SpringSecurity实现拦截未登录页面
  5. python wireshark_用python编写脚本从wireshark导出的数据文件中提取数据
  6. java怎么快速创建监听类_如何创建监听器
  7. 计算机网络中seq,计算机网络A卷及参考答案
  8. JavaScript数据结构——图(Graph)
  9. 限时删!字节总监总结一套目标检测、卷积神经网络和OpenCV学习资料(教程/PPT/代码)...
  10. vue基础之样式绑定(class,style)
  11. php有没有能无限遍历,php无限遍历目录代码
  12. 埃斯顿三轴机器人编程_一文了解Estun Studio机器人仿真与离线编程软件
  13. C语言找出完数并输出
  14. win7 64位 安装Infragistics NetAdvantage,报Error 1606 Could Not Access Network Location %SystemDrive%/ine
  15. C++ Reference: Standard C++ Library reference: C Library: cfenv: FE_INEXACT
  16. java正则表达式双引号_java正则表达式去掉双引号
  17. 《每日一题》NO.21:画出CMOS 非门/与非门/或非门的结构
  18. Target DLL has been cancelled
  19. 视频无法播放,视频打不开怎么办?可用这款视频修复工具快速修复
  20. 【翻译论文】An Architecture Combining Convolutional Neural Network (CNN) and Support Vector Machine (SVM)

热门文章

  1. 百度网盘微信小程序文件 同步到百度网盘APP或客户端
  2. 悟道-看山是山,看水是水
  3. Unite洛杉矶峰会精彩回顾:从图形、平台再到VR
  4. 别人家的阿里巴巴校招
  5. Cubieboard2开发要点简记
  6. ubutu 识别android手机
  7. 【Day4.1】打的士去卧佛寺
  8. 数商云:打造B2B大宗电商供应链服务系统,落地产业互联网
  9. COOC+VOSviewer可取代任何文献计量与知识图谱软件
  10. atq1_使用at,atq,atrm和batchLinux调度命令示例