FPGA实现LCD1602控制

目录

注意!

本工程采用野火征途PRO开发板,外接LCD1602部件进行测试。

有偿提供代码!!!可以定制功能!!!

联系方式见底部

一、基础知识

1.1 引脚信息

1.2 指令

1.2.1 清屏

1.2.2 归位(返回)

1.2.3 输入方式设置

1.2.4 显示模式控制

1.2.5 光标、画面位移

1.2.6 功能设置

1.2.7 CG RAM地址设置

1.2.8 DD RAM地址设置

1.2.9 写数据

1.3 常用指令

1.4 内置字符与自定义字符显示原理

1.5 LCD1602初始化过程

二、部分代码

2.1 LCD1602循环滚动显示0-9-a-z-A-D

2.2 LCD1602显示自定义字符“仰以殊观”

三、实测

3.1 LCD1602循环滚动显示0-9-a-z-A-D

3.1.1 第一行显示0-9-a-z-A-D

3.1.2 第二行显示0-9-a-z-A-D

3.1.3 滚动显示

3.2 LCD1602显示自定义字符“仰以殊观”

四、联系我


注意!

本工程采用野火征途PRO开发板,外接LCD1602部件进行测试。

有偿提供代码!!!可以定制功能!!!

联系方式见底部

一、基础知识

1.1 引脚信息

VSS电源地
VDD电源正极
V0偏压(可不接或接地或接电位器调整电压)
RS寄存器选择(Register Select,选择数据或命令寄存器)
RW读/写
E使能
D0-D78位数据
A背光正极
K背光负极

1.2 指令

1.2.1 清屏

运行时间(250Khz): 1.64 µs

功能:清DDRAM和AC值。

1.2.2 归位(返回)

运行时间(250Khz): 1.64 µs

功能:AC= 0, 光标、画面回HOME位。

1.2.3 输入方式设置

运行时间(250Khz): 40 µs

功能:设置光标、画面移动方式。

其中:I/D =1: 数据读、写操作后,AC自动增一;

           I/D =0: 数据读、写操作后,AC自动减一;

           S = 1:数据读、写操作,画面平移;

           S = 0: 数据读、写操作,画面不动。

1.2.4 显示模式控制

运行时间(250Khz): 40 µs

功能:设置显示、光标及闪烁开关。

其中:D表示显示开关:D = 1为开,D = 0为关;

           C表示光标开关:C = 1为开,C = 0为关;

           B表示闪烁开关:B = 1为开,B = 0为关。

1.2.5 光标、画面位移

运行时间(250Khz): 40 µs

功能:光标、画面移动,不影响DDRAM。

其中:S/C = 1: 画面左移一个字符位;

           S/C = 0: 画面右移一个字符位;

           R/L = 1: 光标左移一个字符位;

           R/L = 0:光标右移一个字符位。

1.2.6 功能设置

运行时间(250Khz): 40 µs

功能:工作方式设置(初始化指令)。

其中:DL = 1:8位数据接口;

           DL = 0:4位数据接口;

           N = 1:两行显示;

           N = 0:一行显示;

           F = 1:5 × 10点阵字符;

           F = 0:5 × 7点阵字符。

1.2.7 CG RAM地址设置

运行时间(250Khz): 40 µs

功能:设置CG RAM地址。A5 ~ A0 = 0 ~ 3FH

1.2.8 DD RAM地址设置

运行时间(250Khz): 40 µs

功能:设置DD RAM地址;

         N = 0:一行显示,A6 ~ A0 = 0 ~ 4FH

         N = 1: 两行显示,首行A6 ~ A0 = 00H ~ 2FH ,次行A6 ~ A0 = 40H ~ 67H

1.2.9 写数据

运行时间(250Khz): 40 µs

功能:根据最近设置的地址性质,数据写入DD RAM或CG RAM内。

1.3 常用指令

'h38:功能设置(初始化指令,设置数据接口位数-1.3.6)

'h08:显示关闭(所有显示1.3.4)

'h01:显示清屏(清DDRAM和AC(AddressCount地址计数器)值-1.3.1)

'h06:显示光标及画面移动设置(控制读写后AC自动增减一,控制画面平移或不动-1.3.3)

'h0c:显示开及光标设置(控制显示开关,光标开关,闪烁开关-1.3.4)

'h18:画面左移(1.3.5)

1.4 内置字符与自定义字符显示原理

a)        DDRAM就相当于显示映射,最多可以显示2行*40列=80个字符,但是屏幕上只支持显示2行*16列=32个字符,显示字符时直接把想要显示数字或字母的ASCII值赋给D0-D7即可。

b)         CGROM中存储了00-ff个字符(其中00-07字符可以由CGRAM定义),用户将地址写入到DDRAM,相当于是把地址写入了CGROM中,然后CGROM将字符输出到DDRAM进行显示。

c)         CGRAM可以存储自定义字符,下图为DDRAM数据,CGRAM地址与写入字模码之间关系

        1、字符码(DDRAM数据)0 ~ 2位与CGRAM地址3 ~ 5位对应(要么是000,要么是001);

        2、CGRAM地址0 ~ 2位生成字模数据行位置(一个字符8行,一次输入一行,注意第八行为游标位置)

        3、字符码3位的赋值状态并不影响用户自定义

        4、用户自定义字符码的范围为00H ~ 07H或者08H ~ 0FH,也就是说字符码00H与08H对应同一 组用户自定义字符字模;

d)       自定义字符输入完毕后,将自定义字符的地址赋值给DDRAM即可显示自定义字符

字符码CGRAM地址
0x000x00-0x07
0x010x08-0x0f
0x020x10-0x17
0x030x18-0x1f
0x040x20-0x27
0x050x28-0x2f
0x060x30-0x37
0x070x38-0x3f

1.5 LCD1602初始化过程

        a)        程序烧录到FPGA后首先复位15ms

        b)        15ms后进入INIT初始化状态

        c)        INIT初始化状态分别写0x38 0x08 0x01 0x06 0x0c

每次写指令或数据间隔时间均远大于处理时间,故不用考虑读忙信号

二、部分代码

2.1 LCD1602循环滚动显示0-9-a-z-A-D

 // -------------------状态机控制LCD数据/指令赋值	
always @(posedge I_clk or negedge I_rst_n) beginif (!I_rst_n) beginO_lcd_data <= 8'd0;endelse begincase(S_state_c)IDLE		:begin O_lcd_data <= 8'h38; O_lcd_rs <= 0;end//初始化指令,设置lcd1602模式为8位数据接口;两行显示,5*7点阵(硬件限制)S1			:begin O_lcd_data <= 8'h01; O_lcd_rs <= 0;end//清屏(清DDRAM以及AC计数器)S2			:begin O_lcd_data <= 8'h06; O_lcd_rs <= 0;end//控制读写后AC自动增减一,控制画面不动S3			:begin O_lcd_data <= 8'h0c; O_lcd_rs <= 0;end//控制显示开,光标关,闪烁关ROW1_ADDR	:begin O_lcd_data <= 8'h80; O_lcd_rs <= 0;endWRITE		:begin O_lcd_data <= S_data_display; O_lcd_rs <= 1;endROW2_ADDR	:begin O_lcd_data <= 8'hc0; O_lcd_rs <= 0;endstop		:begin O_lcd_data <= 8'h18; O_lcd_rs <= 0;end//控制画面左移default:;endcaseendend

2.2 LCD1602显示自定义字符“仰以殊观”

一开始用的字模软件生成的01序列,但是5*8点阵来显示汉字有点太挤了,看不出来字形,所以将“仰殊观”这三个汉字拆成了两部分,其中“仰”的第一部分用一个5*8点阵显示,第二部分和“以”的左边一个竖用一个5*8点阵显示,“以”的右边部分用一个5*8点阵显示,“殊观”两个字分别用两个5*8点阵显示

// -------------------字符显示寄存器S_data_display赋值
/*
向CGRAM写入数据*/always @(*) begincase(S_char_cnt)//-------------仰-------------'d0: S_data_display   = 8'h05;'d1: S_data_display   = 8'h0a;'d2: S_data_display   = 8'h1a;'d3: S_data_display   = 8'h0a;'d4: S_data_display   = 8'h0b;'d5: S_data_display   = 8'h0a;'d6: S_data_display   = 8'h08;'d7: S_data_display   = 8'h00;//------------仰以------------'d8: S_data_display   = 8'h1d;'d9: S_data_display   = 8'h15;'d10: S_data_display  = 8'h15;'d11: S_data_display  = 8'h1d;'d12: S_data_display  = 8'h11;'d13: S_data_display  = 8'h11;'d14: S_data_display  = 8'h11;'d15: S_data_display  = 8'h00;//-------------以-------------'d16: S_data_display  = 8'h04;'d17: S_data_display  = 8'h04;'d18: S_data_display  = 8'h14;'d19: S_data_display  = 8'h14;'d20: S_data_display  = 8'h14;'d21: S_data_display  = 8'h0a;'d22: S_data_display  = 8'h11;'d23: S_data_display  = 8'h00;//-------------殊-------------'d24: S_data_display  = 8'h1f;'d25: S_data_display  = 8'h04;'d26: S_data_display  = 8'h0b;'d27: S_data_display  = 8'h15;'d28: S_data_display  = 8'h01;'d29: S_data_display  = 8'h02;'d30: S_data_display  = 8'h04;'d31: S_data_display  = 8'h00;//-------------殊-------------'d32: S_data_display  = 8'h14;'d33: S_data_display  = 8'h1f;'d34: S_data_display  = 8'h04;'d35: S_data_display  = 8'h1f;'d36: S_data_display  = 8'h0e;'d37: S_data_display  = 8'h15;'d38: S_data_display  = 8'h04;'d39: S_data_display  = 8'h00;//-------------观-------------'d40: S_data_display  = 8'h1f;'d41: S_data_display  = 8'h11;'d42: S_data_display  = 8'h0a;'d43: S_data_display  = 8'h04;'d44: S_data_display  = 8'h0a;'d45: S_data_display  = 8'h11;'d46: S_data_display  = 8'h00;'d47: S_data_display  = 8'h00;//-------------观-------------'d48: S_data_display  = 8'h1f;'d49: S_data_display  = 8'h15;'d50: S_data_display  = 8'h15;'d51: S_data_display  = 8'h04;'d52: S_data_display  = 8'h0c;'d53: S_data_display  = 8'h15;'d54: S_data_display  = 8'h07;'d55: S_data_display  = 8'h00;default:S_data_display = "P";endcaseend

三、实测

3.1 LCD1602循环滚动显示0-9-a-z-A-D

这里采用的方法是将DDRAM的2行40列全部显示0-9-a-z-A-D(10+26+4=40),然后让屏幕滚动起来

3.1.1 第一行显示0-9-a-z-A-D

LCD1602循环显示0-9-a-z-A-D(一)

3.1.2 第二行显示0-9-a-z-A-D

LCD1602循环显示0-9-a-z-A-D(二)

3.1.3 滚动显示

LCD1602循环显示0-9-a-z-A-D(三)

3.2 LCD1602显示自定义字符“仰以殊观”

这里采用的方法是用excel自己排列每个汉字的01序列,然后写入CGRAM中。

          
        
          
           
         
        
       
 
        
       
      
         
      
     
   
 
           
      
    
    
      
       
 

LCD1602显示自定义字符“仰以殊观”

四、联系我

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

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

相关文章

ubuntu实践

目录 扩容 本机上ping不通新建立的虚拟机 ssh连接 装sshd ssh客户端版本较低&#xff0c;会报key exchange算法不匹配问题 ubuntun上装docker 将centos7下的安装包改造成适配 ubuntu的包 参考文章 扩容 Hyper-V 管理器安装的ubutun扩容磁盘空间说明_hype-v磁盘扩容-…

人工智能算法工程师(中级)课程20-模型注意力机制之注意力机制的原理、计算方式与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程20-模型注意力机制之注意力机制的原理、计算方式与代码详解。本文深入探讨了注意力机制在深度学习中的应用与原理&#xff0c;尤其聚焦于序列到序列模型的上下文中。通过直观的解释和详…

48 mysql 全局变量修改了时区, 客户端拿到的依然是旧时区

前言 这是一个 我们最近碰到的问题 在我们的一个 服务平台 查询到的时间字段 比 当前时区的当前时间多 8 小时 然后 这个问题 也是挺神奇的, navicate 上面查询到的 时间是在正常的时间 然后 查询环境变量 tz_zone 是 “08:00”, 也没有问题, 但是 客户端这边 拿到的是 当…

【HTML+CSS】HTML超链接:构建网页导航的基石

目录 什么是HTML超链接&#xff1f; 基本语法 示例 链接到另一个网页 链接到同一页面内的不同部分 常用属性 在Web开发的广阔世界中&#xff0c;HTML&#xff08;HyperText Markup Language&#xff09;作为网页内容的标准标记语言&#xff0c;扮演着至关重要的角色。而在…

nodejs安装及环境配置轨道交通运维检测系统App-OA人事办公排班故障维修

✌网站介绍&#xff1a;✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围&#xff1a;Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容&#xff1a;免费功能设计、免费提供开题答辩P…

【SpringCloud】企业认证、分布式事务,分布式锁方案落地-2

目录 高并发缓存三问 - 穿透 缓存穿透 概念 现象举例 解决方案 缓存穿透 - 预热架构 缓存穿透 - 布隆过滤器 布隆过滤器 布隆过滤器基本思想​编辑 了解 高并发缓存三问 - 击穿 缓存击穿 高并发缓存三问 - 雪崩 缓存雪崩 解决方案 总结 为什么要使用数据字典&…

对Linux目录结构的补充

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…

白鲸开源CEO郭炜荣获「2024中国数智化转型升级先锋人物」称号

2024年7月24日&#xff0c;由数据猿主办&#xff0c;IDC协办&#xff0c;新华社中国经济信息社、上海大数据联盟、上海市数商协会、上海超级计算中心作为支持单位&#xff0c;举办“数智新质力拓未来 2024企业数智化转型升级发展论坛——暨AI大模型趋势论坛”数据猿“年中特别策…

数据结构_study(一)

术语 程序设计数据结构算法 数据结构&#xff1a;相互之间存在一种或多种特定关系的数据元素的集合 数据&#xff1a;输入到计算机中可以操作的对象&#xff0c;数值类型&#xff08;整型&#xff0c;浮点型&#xff09;&#xff0c;非数值类型&#xff08;字符&#xff0c;…

算法——二分查找(day10)

目录 69. x 的平方根 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 35. 搜索插入位置 题目解析&#xff1a; 算法解析&#xff1a; 代码&#xff1a; 69. x 的平方根 69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09; 题目解析&#xff1a; 老…

Linux 安装mysql-client-core-8.0

在Linux上安装mysql-client-core-8.0 安装流程 下面是安装mysql-client-core-8.0的步骤和相应的命令&#xff1a; 步骤1&#xff1a;更新系统软件源 我们首先需要更新系统的软件源&#xff0c;以确保我们能够获取到最新的软件包列表。使用以下命令更新软件源&#xff1a; …

C语言——运算符及表达式

C语言——运算符及表达式 运算符运算符的分类&#xff08;自增运算符&#xff09;、--&#xff08;自减运算符&#xff09;赋值运算符逗号运算符&#xff08;顺序求值运算符&#xff09; 表达式 运算符 运算符的分类 C语言的运算符范围很宽&#xff0c;除了控制语句和输入输出…

go语音进阶 Goroutine

什么是 Goroutine&#xff1f; 在Go语言中 是通过 ‘协程’ 来实现并发&#xff0c; Goroutine 是 Go 语言特有的名词&#xff0c; 区别于进程 Process&#xff0c; 线程Thread&#xff0c; 协程 Coroutine, 因为 Go语言的作者们觉得是有所区别的&#xff0c;所有专门创造做 Go…

python-绝对值排序(赛氪OJ)

[题目描述] 输入 n 个整数&#xff0c;按照绝对值从大到小排序后输出。保证所有整数的绝对值不同。输入格式&#xff1a; 输入数据有多组&#xff0c;每组占一行&#xff0c;每行的第一个数字为 n ,接着是 n 个整数&#xff0c; n0 表示输入数据的结束&#xff0c;不做处理。输…

Ruoyi-WMS本地运行

所需软件 1、JDK&#xff1a;8 安装包&#xff1a;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.htmlopen in new window 安装文档&#xff1a;https://cloud.tencent.com/developer/article/1698454open in new window 2、Redis 3.0 安装包&a…

[Vulnhub] Acid-Reloaded SQLI+图片数据隐写提取+Pkexec权限提升+Overlayfs权限提升

信息收集 IP AddressOpening Ports192.168.101.158TCP:22,33447 $ nmap -p- 192.168.101.158 --min-rate 1000 -sC -sV Not shown: 65534 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Ubuntu 5ubuntu1.3 (Ubuntu Lin…

C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性

文章目录 C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性转换Tip切换内容介绍显示方式字体色背景色 常用光标控制附示例和运行结果 C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性 标准输出格式其属性可控制&#xff0c;控制由一系列的控制码指定。标准输出函数可…

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言&#xff0c;其特性包括&#xff1a;模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法&#xff0c;以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…

【Socket编程】了解应用层协议HTTP

HTTP协议 HTTP又叫超文本传输协议。它定义了客户端和服务端之间该如何通信&#xff0c;以交换或者传输超文本&#xff08;如HTML文档&#xff09;。HTTP协议是一个无连接、无状态的协议&#xff0c;即每次请求都需要建立新的连接&#xff0c;且服务器不会保存客户端的状态信息…

智谱OpenDay“大有可玩”:30秒将任意文字生成视频

Sora毫无疑问带来AI大模型的全新玩法&#xff0c;大模型可基于任意文字生成视频&#xff0c;这也是这个“大家庭”若干努力&#xff08;包括Runway的Gen系列、微软的Nuwa、Meta的Emu、谷歌的Phenaki/VideoPoet、CogVideo等&#xff09;的一个全新高度。 7月26日&#xff0c;这…