1、利用按键开关控制液晶显示器进行十六进制数字显示目 录1、课程设计目的32、课程设计内容及要求32.1、设计内容32.2、设计要求33、设计方案及实现情况33.1、设计思路33.2、工作原理及框图33.3、各模块功能描述43.4、仿真结果113.5、试验箱验证情况114、课程设计总结145、参考文献14附录1:液晶显示屏说明书151、课程设计目的1.学习操作数字电路设计实验开发系统,掌握液晶显示模块的工作原理及应用。2.掌握组合逻辑电路、时序逻辑电路的设计方法。3.学习掌握可编程器件设计的全过程。2、课程设计内容和要求:2.1、设计内容用VHDL语言编写程序,实现利用按键开关控制液晶屏显示16进
2、制数。2.2、设计要求1学习掌握按键开关控制模块、液晶显示模块的工作原理及应用;2. 熟练掌握VHDL编程语言,编写按键开关控制模块的控制逻辑;3. 仿真所编写的程序,模拟验证所编写的模块功能;4. 下载程序到芯片中,硬件验证所设置的功能,能够实现十六进制数字的显示;5. 整理设计内容,编写设计说明书。3、设计方案及实现情况3.1、设计思路根据题目设计要求,用按键控制液晶屏显示16进制数,开始的实际本来是要用16个按键来实现,但在硬件实现的过程中,一直出现各种问题,所以采用了一个按键,循环显示0f。由于是按键控制,所以加入了消抖程序,对液晶屏的控制则是通过状态机来实现的。先输入F9,选择8*1
3、6ascII码显示模式,在输入坐标XX YY。3.2、工作原理及框图本设计将系统分为四个模块,消抖模块,按键输入模块,译码模块和液晶屏控制模块,先分别用MAX+PLUS II文本设计输入编写每个模块 ,模块功能好了就可以实现最后的结果了。信号由消抖模块的XD管脚输入,经过消抖程序后,在译码模块中将四位二进制代码翻译成八位2进制的ASCII码,输入到液晶屏控制模块中,实现对液晶屏的控制。与此同时,每按下一次按键,按键模块中的变量就会+1,当加到1111B时,自动清零,实现了0-F循环显示。最重要也是最难的液晶屏控制模块采用状态机程序编写,原理祥见附录1(如图1)。图1 系统原理图3.3、各模块功
4、能描述(1)消抖电路加入本模块的原因是因为按键开关在按下时信号会产生抖动,在硬件实现是可能出现按一下跳过很多个数的情况,对程序的输入会产生影响,加入模块后消除抖动(如图2)。程序代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; 图2 消抖模块硬件原理图entity xd is port( rst:in std_logic; xd: in std_logic; clk: in std_logic; xdout: out std_log
5、ic );end xd;architecture a of xd is signal count:integer range 0 to 100; begin process(clk,rst,xd) begin if(rst=0)then count=0; xdout=0; elsif(clkevent and clk=1)then if(count=30)then count=0; xdout=not xd; else count=count+1; end if; end if; end process;end a;(2)按键输入和译码模块该模块的作用是将按键输入进来的信号进行处理,每按一次,
6、数自动+1,并将数字的ASCII码编译成8位2进制ASCII码送给液晶屏控制程序,当显示到 F时置0(如图3)。程序代码:按键输入模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; 图3 按键及译码模块硬件原理图 use ieee.std_logic_arith.all;entity aj isport( aj:in std_logic; rst:in std_logic; ajout:out std_logic_vector(3 downto 0) );end aj;architecture
7、ajwork of aj issignal q: std_logic;signal count : std_logic_vector(3 downto 0);begin q=aj when rst=1else 0; process(q,rst) begin if(rst=0)then count=0000; elsif qevent and q=1 then if count=1111 then count=0000; else count=count+1; end if; end if; ajout=count; end process; end ajwork;译码模块library iee
8、e;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ym is port(ym:in std_logic_vector(3 downto 0); Y:out std_logic_vector(7 downto 0);end ym;architecture yima_arch of ym issignal a:std_logic_vector(3 downto 0);begina=ym;Y IF busy=0 THEN IF ready=1 THEN current_state = XX; ready = 0; ELSE db = 11111001; req = 1; ready = 0; END IF; ELSE req = 0; ready = 1; current_state IF busy=0 THEN IF ready=1 THEN current_state = YY; ready = 0; ELSE db = 00000111; req = 1; ready = 0; END IF; ELSE req = 0; ready = 1; current_state IF busy=0 THEN IF ready=1 THEN current_state = AS
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1