当前位置:文档之家› 矩阵键盘显示,六位数码管滚动显示

矩阵键盘显示,六位数码管滚动显示

南京邮电大学课程设计报告设计类别: EDA-VHDL专业名称: 通信工程班级学号: B09010504 学生姓名: 张嫣艳基本题 : 矩阵键盘按键的数码管显示综合题 : 数码管学号滚动显示同小组成员:学号:B09010502姓名:沈沁芳指导教师: 王奇、梅中辉、周晓燕、孔凡坤日期:2012年3月5日—3月30日目录一矩阵键盘按键的数码管显示1.实验目的--------------------------------------------------------------------- 3 2.实验所用仪器及元器件----------------------------------------------------3 3.实验任务要求----------------------------------------------------------------34. 设计思路-----------------------------------------------------------------------35. 模块分析-----------------------------------------------------------------------36. 逻辑仿真图及功能分析-----------------------------------------------------47. 调试过程与问题--------------------------------------------------------------88. 实验总结-----------------------------------------------------------------------89. 附录(VHDL源程序)-----------------------------------------------------8二数码管学号滚动显示1.实验目的----------------------------------------------------------------------12 2.实验所用仪器及元器件----------------------------------------------------12 3.实验任务要求----------------------------------------------------------------134. 设计思路----------------------------------------------------------------------135. 模块分析----------------------------------------------------------------------136. 逻辑仿真图及功能分析----------------------------------------------------167. 调试过程与问题-------------------------------------------------------------188. 实验总结----------------------------------------------------------------------189. 附录(VHDL源程序)----------------------------------------------------18一矩阵键盘按键的数码管显示1.实验目的(1).使学生全面了解如何应用该硬件描述语言进行高速集成电路设计;(2).通过软件设计环节与仿真环节使学生熟悉Quartus II设计与仿真环境;(3).通过对基本题、综合题的设计实践,使学生掌握硬件系统设计方法(自底向上或自顶向下),熟悉VHDL语言三种设计风格,熟悉其芯片硬件实现的过程。

2.实验所用仪器及元器件(1)PC机(2)ALtera CPLD硬件实验开发系统(3)设计软件(Quartus II )3.实验任务要求要求学生设计出4*4矩阵键盘对某一按键按下就在数码管显示一个数字。

按键从左上角到右下角依次为1,2, (16)4. 设计思路首先一个4*4矩阵键盘中有四行四列,先假设键盘自上至下的第一行的四个键分别代表01,02,03,04;第二行四个键分别代表05,06,07,08;第三行四个键分别代表09,10,11,12;第四行分别代表13,14,15,16。

题目的意思是任意按下一个键,输出端会输出相应的数字,而每个键被选中的条件是它的行数和列数被选中,也就是在仿真中可以假设选中的行数和列数是0电平,而其他的行数和列数都是1电平。

所以输入端应是行数与列数,而输出端是两个数码管的显示。

5. 模块分析(1)输入输出解释输入: clk ------时钟信号rst ------清零row ------行线column ------列线输出: dataout1 ------数码管显示数据,个位dataout2 ------数码管显示数据,十位en ------数码管显示使能(2)模块解释PROCESS(clk,rst)BEGINIF (NOT rst = '1') THENkey_code <= "0000";ELSIF(clk'EVENT AND clk='1')THEN --上升沿有效CASE row IS --检测何处有键按下WHEN "1110" =>CASE column ISWHEN "1110" =>key_code <= "0000";WHEN "1101" =>key_code <= "0001";WHEN "1011" =>key_code <= "0010";WHEN "0111" =>key_code <= "0011";WHEN OTHERS =>NULL;END CASE;(……中间省略相同步骤……)WHEN OTHERS =>key_code <= "1111";END CASE;END IF;END PROCESS;(这部分用key_code 这个四位寄存器来代表16个键)PROCESS(key_code)BEGINCASE key_code ISWHEN "0000" =>dataout_tmp1 <= "10011111";dataout_tmp2 <= "00000011";WHEN "0001" =>dataout_tmp1 <= "00100101";dataout_tmp2 <= "00000011";(……中间省略相同部分……)END CASE;END PROCESS;(这部分中,对于相应的key_code值输出相应的数值)6. 逻辑仿真图及功能分析当选中第一行第一列时,输出端的两个数码管显示是01(00000011 10011111)当选中第一行第二列时,输出端的两个数码管显示是02(00000011 00100101)当选中第一行第三列时,输出端的两个数码管显示是03(00000011 00001101)当选中第一行第四列时,输出端的两个数码管显示是04(00000011 10011001)当选中第二行第一列时,输出端的两个数码管显示是05(00000011 01001001)当选中第二行第二列时,输出端的两个数码管显示是06(00000011 01000001)当选中第二行第三列时,输出端的两个数码管显示是07(00000011 00011111)当选中第二行第四列时,输出端的两个数码管显示是08(00000011 00000001)当选中第三行第一列时,输出端的两个数码管显示是09(00000011 00001001)当选中第三行第二列时,输出端的两个数码管显示是10(00000011 00000011)当选中第三行第三列时,输出端的两个数码管显示是11(00000011 00000011)当选中第三行第四列时,输出端的两个数码管显示是12(00000011 00100101)当选中第四行第一列时,输出端的两个数码管显示是13(00000011 00001101)当选中第四行第二列时,输出端的两个数码管显示是14(00000011 10011001)当选中第四行第三列时,输出端的两个数码管显示是15(00000011 01001001)当选中第四行第四列时,输出端的两个数码管显示是16(00000011 01000001)7. 调试过程与问题(1)操作问题:由于我是第一次接触这个软件,在操作时会忘了一些必要的步骤,从而导致系统出现error,不能运行下去,但是多操作几次以后这种问题就可以被解决了。

(2)设计问题:联系实际,矩阵键盘中的row一般设计成输出,然后采用扫描的方法进行数码管的输出。

但在功能仿真的时候出现了只能扫描出1,2,3,4的情况,仔细分析问题后发现,在确定column了以后,扫描都会从第一列开始,所以采用这种方法就只能出现1,2,3,4四个数字,为了使其他的数字也可以在功能仿真的出现,所以我在仿真的时候将row 设计成了输入,以确保每一个数字都有出现的机会。

(3)时延问题:在功能仿真的时候,在除了01这个数字的显示外,每个数字的显示都会出现一小段的时延。

一开始我留意到这个问题时我没有理解,后来我去查看了源代码,然后发现在键盘上的按键按下之前,两个数码管分别默认输出数字是01,如果是按下的是别的键,那么输出的时候会有一定的时延,而它们在真正跳变之前,第一个数码管会显示0,第二个数码管会显示1。

8. 实验总结通过这个设计实验,我学习到了很多知识。

在做这个矩阵键盘的实验设计的过程中,我通过查阅资料和搜集有关的文献,培养了自学能力。

并且由原先的被动的接受知识转化为主动的寻求知识,这可以说是学习方法上的一个很大的突破。

虽然我之前从来没有用过这个软件,也没有接触过VHDL语言,但是我依然可以通过自学,查阅资料和与同学之间讨论交流来做出这个课题,我想将来不管遇到什么样的题目,只要我采用同样的方法和态度,总会可以找到解决的方案的。

相关主题