利用按键开关控制液晶显示器进行十六进制数字显示.docx

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

利用按键开关控制液晶显示器进行十六进制数字显示.docx

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

利用按键开关控制液晶显示器进行十六进制数字显示.docx

利用按键开关控制液晶显示器进行十六进制数字显示

目录

1、课程设计目的……………………………………………………………………3

2、课程设计内容及要求……………………………………………………………3

2.1、设计内容………………………………………………………………………3

2.2、设计要求………………………………………………………………………3

3、设计方案及实现情况……………………………………………………………3

3.1、设计思路………………………………………………………………………3

3.2、工作原理及框图………………………………………………………………3

3.3、各模块功能描述………………………………………………………………4

3.4、仿真结果………………………………………………………………………11

3.5、试验箱验证情况………………………………………………………………11

4、课程设计总结……………………………………………………………………14

5、参考文献…………………………………………………………………………14

附录1:

液晶显示屏说明书…………………………………………………………15

 

1、课程设计目的

1.学习操作数字电路设计实验开发系统,掌握液晶显示模块的工作原理及应用。

2.掌握组合逻辑电路、时序逻辑电路的设计方法。

3.学习掌握可编程器件设计的全过程。

2、课程设计内容和要求:

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:

instd_logic;

xdout:

outstd_logic);

endxd;

architectureaofxdis

signalcount:

integerrange0to100;

begin

process(clk,rst,xd)

begin

if(rst='0')then

count<=0;

xdout<='0';

elsif(clk'eventandclk='1')then

if(count=30)then

count<=0;

xdout<=notxd;

else

count<=count+1;

endif;

endif;

endprocess;

enda;

 

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

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

程序代码:

①按键输入模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;图3按键及译码模块硬件原理图

useieee.std_logic_arith.all;

entityajis

port(

aj:

instd_logic;

rst:

instd_logic;

ajout:

outstd_logic_vector(3downto0)

);

endaj;

architectureajworkofajis

signalq:

std_logic;

signalcount:

std_logic_vector(3downto0);

begin

q<=ajwhenrst='1'else'0';

process(q,rst)

begin

if(rst='0')then

count<="0000";

elsifq'eventandq='1'then

ifcount="1111"then

count<="0000";

else

count<=count+1;

endif;

endif;

ajout<=count;

endprocess;

endajwork;

②译码模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityymis

port(ym:

instd_logic_vector(3downto0);

Y:

outstd_logic_vector(7downto0));

endym;

architectureyima_archofymis

signala:

std_logic_vector(3downto0);

begin

a<=ym;

Y<="00110000"when(a="0000")else

"00110001"when(a="0001")else

"00110010"when(a="0010")else

"00110011"when(a="0011")else

"00110100"when(a="0100")else

"00110101"when(a="0101")else

"00110110"when(a="0110")else

"00110111"when(a="0111")else

"00111000"when(a="1000")else

"00111001"when(a="1001")else

"01000001"when(a="1010")else

"01000010"when(a="1011")else

"01000011"when(a="1100")else

"01000100"when(a="1101")else

"01000101"when(a="1110")else

"01000110"when(a="1111")else

"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:

INSTD_LOGIC;

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='0'THEN

IFready='1'THEN

current_state<=XX;

ready<='0';

ELSE

db<="11111001";

req<='1';

ready<='0';

ENDIF;

ELSE

req<='0';

ready<='1';

current_state<=CMD;

ENDIF;

WHENXX=>

IFbusy='0'THEN

IFready='1'THEN

current_state<=YY;

ready<='0';

ELSE

db<="00000111";

req<='1';

ready<='0';

ENDIF;

ELSE

req<='0';

ready<='1';

current_state<=XX;

ENDIF;

WHENYY=>

IFbusy='0'THEN

IFready='1'THEN

current_state<=AS

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

当前位置:首页 > 经管营销 > 经济市场

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

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