FPGA实现LCD1602控制

news2024/11/27 18:42:56

目录

注意!

本工程采用野火征途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) begin
		if (!I_rst_n) begin
			O_lcd_data <= 8'd0;
		end
		else begin
			case(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;end
				WRITE		:begin O_lcd_data <= S_data_display; O_lcd_rs <= 1;end
				ROW2_ADDR	:begin O_lcd_data <= 8'hc0; O_lcd_rs <= 0;end
				stop		:begin O_lcd_data <= 8'h18; O_lcd_rs <= 0;end//控制画面左移
				default:;
			endcase
		end
	end

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

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


 // -------------------字符显示寄存器S_data_display赋值
/*
向CGRAM写入数据

 */
	always @(*) begin
		case(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";
		endcase
	end

三、实测

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中。

          
        
          
           
         
        
       
 
        
       
      
         
      
     
   
 
           
      
    
    
      
       
 

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

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

相关文章

Ubuntu22.04重装系统+基础配置

重装系统 note&#xff1a;备份数据&#xff0c;重装系统后home下的文件会丢失&#xff0c;所以先备份一下home的数据到其他的盘/mnt/下里。记住之前系统的DNS&#xff0c;IP和掩码。 先在Ubuntu官网下载22.04桌面版&#xff08;种子链接要用迅雷下载&#xff09;。但是版本还…

JavaScrip中删除的应用

实现功能&#xff1a; 点击删除超链接删掉 var lisdocument.getElementsByTagName("li");for (let i 0; i < lis.length; i) {lis[i].onclickfunction () {if (confirm("确定删除" this.firstChild.nodeValue "信息吗")) {this.parentNod…

聊聊,IEEE论文的含金量!这四本超赞的IEEE系列期刊,发文量超2000,谁投谁中!

关注GZH【欧亚科睿学术】&#xff0c;第一时间了解期刊最新动态&#xff01; 在学术界&#xff0c;IEEE (电气电子工程师协会) 论文被公认为高质量的研究成果。IEEE作为全球最大的专业技术组织之一&#xff0c;在电气、电子、计算机工程和科学领域具有广泛的影响力。其出版的论…

HarmonyOs~UIAbility组件的启动模式及交互

单实例模式 首先在该模块的module.json5配置 "abilities": [{..."launchType": "singleton",...}], 然后我们看一下UIAbility单实例的执行过程 tips&#xff1a;首次启动为冷启动 如果是冷启动 系统就新建该UIAbility组件的实力 若不是冷启…

【MQTT(5)】php 做一个mqtt按钮,发布触发信号

在之前博客php 做一个文件下载服务器&#xff0c;得避免跨路径工具&#xff0c;安全很重要 中加了一个按钮&#xff0c;触发物联网设备返回数据。基于mqtt开发&#xff0c;如果想知道mqtt如何搭建&#xff0c;可以看我的博客【MQTT&#xff08;1&#xff09;】服务端的搭建 效…

day13:函数基本使用

1、什么是函数 函数就相当于具备某一功能的工具 函数的使用必须遵循一个原则&#xff1a;先定义后调用2、为何要用函数 1、组织结构不清晰&#xff0c;可读性差 2、代码冗余 3、可维护性、扩展性差3、如何用函数 先定义三种定义方式后调用三种调用方式返回值三种返回值的形式…

醒醒,别睡了...讲《数据分析pandas库》了—/—<6>

一、 1、长宽格式转换 基于多重索引&#xff0c;Pandas 可以很容易地完成长型、宽型数据格式的相互转换。 1.1 转换为最简格式 stack&#xff08;&#xff09;其使用法如下&#xff1a; stack函数用于将DataFrame中的列转换为行&#xff0c;即将宽格式数据转换为长格式数据。…

【python】PyQt5中QToolButton的详细用法教学与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

jeecguniapp开发小结

一、问题:app发行后图片不显示 解决:绝对路径改成相对路径 另外&#xff1a;避免发行上线图片变形要给到图标或图片具体宽高 //绝对路径 <img src"/static/home/128/wendang.png" style"width:90rpx;height:90rpx;"/> //相对路径 <img src"…

Anaconda环境迁移方法

前言 当我们需要将在一个新电脑上配置Anaconda的环境时&#xff0c;联网的情况下是需要在Anaconda Prompt上安装python环境以及一堆库&#xff1b;离线的情况下则需要用wheel文件一个一个装&#xff0c;十分麻烦。因此方便起见&#xff0c;我们可以将当前电脑上已有的Anaconda…

预测元器件温度的十大技巧——高级操作指南

元器件温度预测为什么很重要&#xff1f; 元器件温度预测在很多方面都有重要意义。一直以来&#xff0c;元器件温度关系到可靠性&#xff0c;早期研究认为现场故障率与稳态元器件温度相关。近来&#xff0c;基于物理学的可靠性预测将电子组件的故障率与工作周期&#xff08;开…

“论大数据处理架构及其应用”写作框架,软考高级论文,系统架构设计师论文

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面&#xff0c;旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构&#xff0c;它是一种将批处理和流…

apache2和httpd web服务器

apache2和httpd web服务器 apache2和httpd web服务器是啥apache是软件基金会apache2是一个web服务httpd和apache2是同一个东西&#xff0c;但是不同linux发行版中叫法不一样。就是同一个东西&#xff0c;但是看上去有一些不一样。 apache2和httpd web服务器是啥 apache是软件基…

使用chainlit快速构建类似OPEN AI一样的对话网页

快速开始 创建一个文件&#xff0c;例如“chainlit_chat” mkdir chainlit_chat进入 chainlit_chat文件夹下&#xff0c;执行命令创建python 虚拟环境空间(需要提前安装好python sdk。 Chainlit 需要python>3.8。,具体操作&#xff0c;由于文章长度问题就不在叙述&#xf…

CUDA编程之grid和block详解

CUDA 文章目录 CUDAgrid和block基本的理解1维 遍历2维 遍历3维 遍历3维 打印对应的thread grid和block基本的理解 Kernel&#xff1a;Kernel不是CPU&#xff0c;而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机&#xff08;CPU&#xff09;调…

谈一谈数据库中的死锁问题

文章目录 死锁是什么&#xff1f;死锁的四个必要条件避免死锁的策略 本篇文章是基于《MySQL45讲》来写的个人理解与感悟。 死锁是什么&#xff1f; 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。若无外力作用&a…

Linux--Socket 编程 TCP(Echo Server)

目录 1.认识TCP接口 2.Echo Server 2.1添加的日志系统&#xff08;代码&#xff09; 2.2解析网络地址 2.3 服务端逻辑 &#xff08;代码&#xff09; 2.4客户端逻辑&#xff08;代码&#xff09; 2.5代码测试 1.认识TCP接口 下面介绍程序中用到的 socket API,这些函数都在…

“简源共生“:融合乔布斯与埃隆·马斯克智慧之光的设计思维在产品开发中的应用

在科技创新的浩瀚星空中&#xff0c;史蒂夫乔布斯&#xff08;Steve Jobs&#xff09;与埃隆马斯克&#xff08;Elon Musk&#xff09;无疑是两颗璀璨的明星&#xff0c;他们以独特的设计思维引领了时代的潮流&#xff0c;塑造了无数颠覆性产品。本文旨在深入剖析这两位巨匠的设…

文本编辑三剑客(grep)

目录 正则表达式 元字符 grep 案例 我在编写脚本的时候发现&#xff0c;三个文本编辑的命令&#xff08;grep、sed、awk&#xff0c;被称为文本编辑三剑客&#xff0c;我习惯叫它三巨头&#xff09;用的还挺多的&#xff0c;说实话我一开始学的时候也有些懵&#xff0c;主要…

深入分析 Android ContentProvider (八)

文章目录 深入分析 Android ContentProvider (八)ContentProvider 高级使用及最佳实践案例分析&#xff08;续&#xff09;1. 深入了解跨应用数据共享示例&#xff1a;跨应用数据共享的完整实现1. 定义权限2. 定义 ContentProvider3. ContentProvider 实现 2. 实践案例&#xf…