利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx

上传人:b****3 文档编号:15717806 上传时间:2022-11-15 格式:DOCX 页数:23 大小:267.93KB
下载 相关 举报
利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx_第1页
第1页 / 共23页
利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx_第2页
第2页 / 共23页
利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx_第3页
第3页 / 共23页
利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx_第4页
第4页 / 共23页
利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx

《利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。

利用按键开关控制液晶显示器进行十六进制数字显示Word文档下载推荐.docx

2.1、设计内容

用VHDL语言编写程序,实现利用按键开关控制液晶屏显示16进制数。

2.2、设计要求

1.学习掌握按键开关控制模块、液晶显示模块的工作原理及应用;

2.熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;

3.仿真所编写的程序,模拟验证所编写的模块功能;

4.下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;

5.整理设计内容,编写设计说明书。

3、 

设计方案及实现情况

3.1、设计思路

根据题目设计要求,用按键控制液晶屏显示16进制数,开始的实际本来是要用16个按键来实现,但在硬件实现的过程中,一直出现各种问题,所以采用了一个按键,循环显示0—f。

由于是按键控制,所以加入了消抖程序,对液晶屏的控制则是通过状态机来实现的。

先输入F9,选择8*16ascII码显示模式,在输入坐标XXYY。

3.2、工作原理及框图

本设计将系统分为四个模块,消抖模块,按键输入模块,译码模块和液晶屏控制模块,先分别用MAX+PLUSII文本设计输入编写每个模块,模块功能好了就可以实现最后的结果了。

信号由消抖模块的XD管脚输入,经过消抖程序后,在译码模块中将四位二进制代码翻译成八位2进制的ASCII码,输入到液晶屏控制模块中,实现对液晶屏的控制。

与此同时,每按下一次按键,按键模块中的变量就会+1,当加到1111B时,自动清零,实现了0--F循环显示。

最重要也是最难的液晶屏控制模块采用状态机程序编写,原理祥见附录1(如图1)。

图1系统原理图

3.3、各模块功能描述

(1)消抖电路

加入本模块的原因是因为按键开关在按下时信号会产生抖动,在硬件实现是可能出现按一下跳过很多个数的情况,对程序的输入会产生影响,加入模块后消除抖动(如图2)。

程序代码:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

图2消抖模块硬件原理图

entityxdis

port(

rst:

instd_logic;

xd:

instd_logic;

clk:

xdout:

outstd_logic);

endxd;

architectureaofxdis

signalcount:

integerrange0to100;

begin

process(clk,rst,xd)

if(rst='

0'

)then

count<

=0;

xdout<

='

;

elsif(clk'

eventandclk='

1'

if(count=30)then

=notxd;

else

=count+1;

endif;

endprocess;

enda;

(2)按键输入和译码模块

该模块的作用是将按键输入进来的信号进行处理,每按一次,数自动+1,并将数字的ASCII码编译成8位2进制ASCII码送给液晶屏控制程序,当显示到F时置0(如图3)。

①按键输入模块

图3按键及译码模块硬件原理图

entityajis

port(

aj:

ajout:

outstd_logic_vector(3downto0)

);

endaj;

architectureajworkofajis

signalq:

std_logic;

signalcount:

std_logic_vector(3downto0);

begin

q<

=ajwhenrst='

else'

process(q,rst)

="

0000"

elsifq'

eventandq='

then

ifcount="

1111"

ajout<

=count;

endajwork;

②译码模块

entityymis

port(ym:

instd_logic_vector(3downto0);

Y:

outstd_logic_vector(7downto0));

endym;

architectureyima_archofymis

signala:

std_logic_vector(3downto0);

a<

=ym;

Y<

00110000"

when(a="

)else

"

00110001"

0001"

00110010"

0010"

00110011"

0011"

00110100"

0100"

00110101"

0101"

00110110"

0110"

00110111"

0111"

00111000"

1000"

)else

00111001"

1001"

01000001"

1010"

01000010"

1011"

01000011"

1100"

01000100"

1101"

01000101"

1110"

01000110"

10011010"

endyima_arch;

(3)液晶屏控制模块

本模块用状态机的方法实现,每次按键按下,模块将液晶屏模式选择代码F9,横坐标07,

纵坐标03分三次输入到液晶屏中,然后再将要显示的数的ASCII码的8位2进制码输入到液晶屏中(如图4)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

图4液晶显示屏控制模块硬件原理图

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYlcdIS

PORT(busy:

INSTD_LOGIC;

clk_fsm:

db_ascii:

INSTD_LOGIC_VECTOR(7DOWNTO0);

req:

OUTSTD_LOGIC;

db:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDlcd;

ARCHITECTURErtlOFlcdIS

SIGNALready:

STD_LOGIC;

TYPEstateIS(CMD,XX,YY,ASCII);

SIGNALcurrent_state:

state;

BEGIN

PROCESS(clk_fsm,busy,ready,db_ascii)

variablecnt1:

std_logic_vector(2downto0);

BEGIN

IFrising_edge(clk_fsm)THEN

CASEcurrent_stateIS

WHENCMD=>

IFbusy='

THEN

IFready='

THEN

current_state<

=XX;

ready<

='

ELSE

db<

="

11111001"

req<

ENDIF;

ELSE

req<

ready<

current_state<

=CMD;

ENDIF;

WHENXX=>

=YY;

00000111"

ELSE

WHENYY=>

=AS

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1