Arduino UNO通过SPI串行方式驱动LCD12864液晶屏

news2024/11/19 0:22:35

LCD12864液晶屏简介

LCD12864带中文字库图形点阵式液晶显示器,可配合各种单片机可完成中文汉字、英文字符和图形显示,可构成全中文人机交互图形界面,模块具有功耗低、显示内容丰富等特点而应用广泛。它是利用液晶经过处理后能改变光线的传播方向,以电流刺激液晶分子产生点、线、面并配合背光灯构成画面。其显示分辨率为128×64, 内置2M位中文字型ROM(CGROM)8192个(1616点阵)汉字,和16K位半宽字型ROM(HCGROM)128个(168点阵)ASCII字符集,可以显示8×4行16×16点阵的汉字。ST7920的字型产生RAM(CGRAM)提供用户自定义字符生成(造字)功能,可提供4组1616点阵的空间。将要显示的字符的编码写到显示RAM(DDRAM)上,硬件自动从CGROM中选择将要显示的字型显示在屏幕上。绘图RAM提供6432个字节的空间,最多可以控制256*64点阵的二维绘图缓冲空间。具有4位/8位并行(适配M6800时序)、2线或3线串行多种接口方式。各种液晶厂家均有提供几乎都是同样规格的LCD12864模块或兼容模块,基本上也都采用了兼容的IC,所以从特性上基本上是一样的;当然,很多厂商提供了不同的字符颜色、背光色之类的显示模块。
LCD12864内部主要由LCD 显示屏(LCD PANEL)、控制器(controller)、驱动器(driver)和偏压产生电路构成。
在这里插入图片描述

模块引脚定义在这里插入图片描述

Vout为LCD驱动电压输出端,可不接
RST使用时不需复位LCD,可不接
VO一般LCD背面有电位器调节对比度,电压越高对比度也越高,可不接

Arduino UNO与LCD12864模块SPI串行接线方式

Arduino UNOLCD12864
A2R/W
A3RS
A4E
GNDVSS
5VVCC
GNDPSB
GNDBLK
5VBLA

在这里插入图片描述

测试代码

在Arduino IDE库管理器搜索u8glib,并安装如图示所例程库在这里插入图片描述
打开PCtoLCD2002软件,设置参数为C5I,选择模式为字符模式,输入要转换的汉字,然后点击生成字模,最后把生成的字模放入一个字符数组里面。
在这里插入图片描述
在这里插入图片描述
打开HelloWorld.ino例程,多个汉字显示代码演示

#include "U8glib.h"
U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
const uint8_t rook_bitmap1[] PROGMEM = {
0x00,0x00,0x27,0xFC,0x14,0x04,0x14,0xA4,
0x81,0x10,0x42,0x08,0x40,0x40,0x10,0x40,
0x17,0xFC,0x20,0x40,0xE0,0xE0,0x21,0x50,
0x22,0x48,0x2C,0x46,0x20,0x40,0x00,0x40,/*"深",0*/
};
const uint8_t rook_bitmap2[] PROGMEM = {
0x11,0x04,0x11,0x24,0x11,0x24,0x11,0x24,
0x11,0x24,0xFD,0x24,0x11,0x24,0x11,0x24,
0x11,0x24,0x11,0x24,0x11,0x24,0x1D,0x24,
0xE1,0x24,0x42,0x24,0x02,0x04,0x04,0x04,/*"圳",1*/
};
const uint8_t rook_bitmap3[] PROGMEM = {
0x02,0x00,0x01,0x00,0x00,0x00,0x7F,0xFC,
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x28,0x21,0x10,0x01,0x00,0x01,0x00,/*"市",2*/
};
const uint8_t rook_bitmap4[] PROGMEM = {
0x08,0x90,0x08,0x88,0x08,0x88,0x10,0x80,
0x17,0xFE,0x30,0xA0,0x30,0xA0,0x50,0xA0,
0x90,0xA0,0x10,0xA0,0x11,0x20,0x11,0x22,
0x11,0x22,0x12,0x22,0x12,0x1E,0x14,0x00,/*"优",0*/
};
const uint8_t rook_bitmap5[] PROGMEM = {
0x08,0x40,0x08,0x20,0x0B,0xFE,0x10,0x00,
0x10,0x00,0x31,0xFC,0x30,0x00,0x50,0x00,
0x91,0xFC,0x10,0x00,0x10,0x00,0x11,0xFC,
0x11,0x04,0x11,0x04,0x11,0xFC,0x11,0x04,/*"信",1*/
};
const uint8_t rook_bitmap6[] PROGMEM = {
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,/*"电",2*/
};
const uint8_t rook_bitmap7[] PROGMEM = {
0x00,0x00,0x7F,0xF8,0x00,0x10,0x00,0x20,
0x00,0x40,0x01,0x80,0x01,0x00,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,/*"子",3*/
};
const uint8_t rook_bitmap8[] PROGMEM = {
0x08,0x10,0x1D,0x10,0xF0,0x90,0x10,0x90,
0x10,0x10,0xFD,0x10,0x10,0x90,0x38,0x90,
0x34,0x10,0x50,0x1E,0x53,0xF0,0x90,0x10,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,/*"科",0*/
};
const uint8_t rook_bitmap9[] PROGMEM = {
0x10,0x20,0x10,0x20,0x10,0x20,0x13,0xFE,
0xFC,0x20,0x10,0x20,0x10,0x20,0x15,0xFC,
0x18,0x84,0x30,0x88,0xD0,0x48,0x10,0x50,
0x10,0x20,0x10,0x50,0x51,0x88,0x26,0x06,/*"技",1*/
};
const uint8_t rook_bitmap10[] PROGMEM = {
0x02,0x00,0x02,0x00,0xFF,0xFE,0x04,0x00,
0x04,0x00,0x0F,0xF0,0x08,0x10,0x18,0x10,
0x2F,0xF0,0x48,0x10,0x88,0x10,0x0F,0xF0,
0x08,0x10,0x08,0x10,0x08,0x50,0x08,0x20,/*"有",2*/
};
const uint8_t rook_bitmap11[] PROGMEM = {
0x00,0x00,0x7B,0xF8,0x4A,0x08,0x52,0x08,
0x53,0xF8,0x62,0x08,0x52,0x08,0x4B,0xF8,
0x4A,0x44,0x4A,0x48,0x6A,0x30,0x52,0x20,
0x42,0x10,0x42,0x88,0x43,0x06,0x42,0x00,/*"限",3*/
};
const uint8_t rook_bitmap12[] PROGMEM = {
0x00,0x80,0x04,0x80,0x04,0x80,0x08,0x40,
0x08,0x40,0x10,0x20,0x20,0x10,0x42,0x08,
0x82,0x06,0x04,0x00,0x04,0x40,0x08,0x20,
0x10,0x20,0x3F,0xF0,0x10,0x10,0x00,0x00,/*"公",4*/
};
const uint8_t rook_bitmap13[] PROGMEM = {
0x00,0x00,0x3F,0xF8,0x00,0x08,0x00,0x08,
0x7F,0xE8,0x00,0x08,0x00,0x08,0x1F,0x88,
0x10,0x88,0x10,0x88,0x10,0x88,0x10,0x88,
0x1F,0x88,0x10,0x88,0x00,0x28,0x00,0x10,/*"司",5*/
};
void draw(void) {
  // graphic commands to redraw the complete screen should be placed here  
  //u8g.setFont(u8g_font_unifont);
  //u8g.setFont(u8g_font_osb21);
  //u8g.drawStr( 0, 22, "Hello World!");
    u8g.drawBitmapP( 32,  0, 2, 16, rook_bitmap1);//0行0列显示“深”
    u8g.drawBitmapP( 48, 0, 2, 16, rook_bitmap2);//0行16列显示“圳”
    u8g.drawBitmapP( 64, 0, 2, 16, rook_bitmap3);//0行32列显示“市”
    u8g.drawBitmapP( 16, 16, 2, 16, rook_bitmap4);//16行32列显示“优”
    u8g.drawBitmapP( 32, 16, 2, 16, rook_bitmap5);//16行32列显示“信”
    u8g.drawBitmapP( 48, 16, 2, 16, rook_bitmap6);//16行32列显示“电”
    u8g.drawBitmapP( 64, 16, 2, 16, rook_bitmap7);//16行32列显示“子”
    u8g.drawBitmapP( 80, 16, 2, 16, rook_bitmap8);//16行32列显示“科”
    u8g.drawBitmapP( 96, 16, 2, 16, rook_bitmap9);//16行32列显示“技”
    u8g.drawBitmapP( 32, 32, 2, 16, rook_bitmap10);//32行32列显示“有”
    u8g.drawBitmapP( 48, 32, 2, 16, rook_bitmap11);//32行32列显示“限”
    u8g.drawBitmapP( 64, 32, 2, 16, rook_bitmap12);//32行32列显示“公”
    u8g.drawBitmapP( 80, 32, 2, 16, rook_bitmap13);//32行32列显示“司”
}
void setup(void) {
}
void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(500);
}

u8g.drawStr( m, n, str);//m代表的是第m列,n代表的是第n行,str是要显示的字符串
u8g.drawBitmapP( m, n, x, y, str);//m代表的是第m列,n代表的是第n行,x代表的是生成字。模点阵时的列数除以8,y代表的是点阵行数,str是要显示的字符串。

实验结果

接好线,编译上传代码到Arduino UNO后,可在LCD12864上程序对应位置显示出汉字。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试八股文(详细版)—上

本文将详细讲解 HTML 、CSS 、JavaScript 、计算机网络知识等方面的内容,Vue 、React 、git 、项目开发实例等内容放在下篇,预祝各位成功上岸! 第一板块:JavaScript ES6 新增内容 1、模板字符串 变量名写在 ${} 中,$…

可用性测试的理解

可用性测试是通过观察有代表性的用户,完成产品的典型任务,从而界定出可用性问题并解决的过程。通俗地讲就是“观察用户使用产品”。 可用性测试到底测的什么? a 有效性(独立完成任务的比例) b 完成任务的时间 c 满意度(用户主观评价操作难易/好感/是否再…

回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出

回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出 目录回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出基本介绍背景回顾模型介绍程序设计学习总结参考资料致谢基本介绍 本次运行测试环境MATLAB2020b; 本次预测基本任务是回归&a…

【JavaEE】JavaScript(基础语法)2

努力经营当下,直至未来明朗! 文章目录前言四、【运算符】五、条件、三元、switch、循环语句六、数组七、函数八、 对象THINK前言 一个人最大的痛苦来自于对自己无能的愤怒! Hi,这里依旧是秃头宝贝儿! 本文依旧是介绍…

win10录屏功能怎么打开,详细图文教学,轻松学会

在生活中,有不少人的电脑,都是WIN10系统,在学习工作或者娱乐的过程中想要录下视频,就需要使用win10录屏功能。Win10录屏功能怎么打开?Windows自带的屏幕录制功能如何使用?不要着急,今天小编将向…

尚医通-微信支付

流程梳理 依赖和工具类 <dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version> </dependency><dependency><groupId>com.example</groupId><ar…

Collagen胶原蛋白修饰亚油酸linoleic acid/甲磺酸酯Mesylate/磷酸三苯酯TPP

产品名称&#xff1a;胶原蛋白修饰亚油酸 英文名称&#xff1a;Collagen-linoleic acid 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 胶原蛋白是一种细胞外蛋…

Mybatis:Mybatis中特殊Sql执行(6)

特殊Sql执行1. 模糊查询2. 批量删除3. 动态设置表名4. 添加功能获取自增的主键5. 整体代码1. 模糊查询 /*** 根据用户名进行模糊查询* param moHu* return*/List<User> getUserByLike(Param("moHu") String moHu);<!--List<User> getUserByLike(Param…

Java多线程之相关拓展(静态代理和Lamda表达式演变)

Java多线程拓展之静态代理和Lamda表达式演变一、静态代理1、概念2、优点3、样例二、Lamda表达式&#xff08;演变过程展示&#xff09;1、定义一个函数式接口并实现类&#xff08;最初状态&#xff09;2、静态内部类&#xff08;状态演变2&#xff09;3、局部内部类&#xff08…

英国G5生物医学类专业IB成绩要求多高?

生物医学类专业一向是申请热门。最近几年&#xff0c;由于新冠疫情的原因&#xff0c;相关专业申请竞争更加激烈了。英国G5生物医学类专业IB成绩要求多高&#xff1f;话说&#xff0c;IB申请英国的生物医学类专业&#xff0c;需要做好哪些准备&#xff1f;英国大学的生物医学类…

Spring Data JPA使用Pageable 参数Thymeleaf 视图进行分页

在上一个教程中&#xff0c;我们看到了如何在Spring MVC控制器方法中使用参数。以下示例显示了如何将 Spring 数据分页与 Thymeleaf 视图一起使用。我们还将使用注释来更改默认页面大小。PageablePageableDefault 例 实体 package com.example;import jakarta.persistence.E…

VS系列多通道振弦温度采发仪的选型与开机操作

VS A B C D E VS&#xff1a;无线型振弦传感器采发仪 A&#xff1a;内嵌核心测量模块数量&#xff08;1~4 个&#xff09; B&#xff1a;两位数字表示的振弦通道数量&#xff08;02、04、08、16&#xff09; C&#xff1a;T 表示带有温度测量通道 D&#xff1a;是否有…

【能效管理】电力监控系统在移动某分公司配电系统中的应用分析

安科瑞 李亚俊 壹捌柒贰壹零玖捌柒伍柒 概述 在社会科技发展越来越快捷和便利的现在&#xff0c;对用电设施的管理和实时监视越来越重要。在用电过程中经常发生漏电、过流等现象。甚至照成断电现象&#xff0c;而及时查询故障并解决问题恢复用电也越发重要。 中国移动通信集…

LeetCode 278. 第一个错误的版本

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓本LeetCode 278. 第一个错误的版本&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetC…

Python基础(十):列表的详细讲解

文章目录 列表的详细讲解 一、列表的应用场景 二、列表的格式 三、列表的常用操作 1、查找 2、增加 3、删除 4、修改 5、复制 四、列表的循环遍历 1、while 2、for 五、列表嵌套 六、总结 列表的详细讲解 一、列表的应用场景 思考&#xff1a;有⼀个⼈的姓名(TO…

菜狗杯Misc迅疾响应wp

一、原题 之前没接触过这种题型&#xff0c;所以记录一下 打开题目附件压缩包是一个图片&#xff0c;一看就不是常见的那种二维码&#xff08;甚至看起来有点不适……呜呜&#xff09;果然微信扫一扫也扫不出来。 二、工具和解题步骤 后来去看了官方wp&#xff0c;知道了一…

【Matplotlib绘制图像大全】(十七):散点图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

防火墙dmz实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 ciscoasa> en Password: ciscoasa# conf t ciscoasa(config)# int e0/0 ciscoasa(co…

线程的概念+线程函数API

C线程 有关线程的简单实现 #include<stdio.h> #include<stdlib.h> #include<unistd.h> //定义线程函数&#xff08;固定&#xff09;--void * void *pth_fun(void *pth_arg){while(1){printf("pthread\n");sleep(1);}return NULL; } int main(){…

k8s学习笔记-完整版

文章目录第一章 kubernetes介绍应用部署方式演变kubernetes简介kubernetes组件kubernetes概念第二章 集群环境搭建环境规划集群类型安装方式主机规划环境搭建主机安装环境初始化安装docker安装kubernetes组件准备集群镜像集群初始化安装网络插件服务部署第三章 资源管理资源管理…