文档详情

矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示

平***
实名认证
店铺
DOC
630.82KB
约18页
文档ID:18084755
矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示_第1页
1/18

一、 矩阵键盘按键的数码管显示 1.实验目的(1)掌握 VHDL 语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验所用仪器及元器件计算机一台 实验板一块 电源线一根 扁平线一根 下载线一根 3.实验任务要求设计出 4*4 矩阵键盘对某一按键按下就在数码管显示一个数字按键从左上角到右下角依次为 1,2,…,164.实验原理按键模块原理键盘扫描的实现过程如下:对于 4×4 键盘,通常连接为 4 行、4 列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出 4 行为高电平,然后输出 4 列为低电平,在读入输出的 4 行的值,通常高电平会被低电平拉低,如果读入的 4 行均为高电平,那么肯定没有按键按下,否则,如果读入的 4 行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值同理,获取列值也是如此,先输出 4 列为高电平,然后在输出 4 行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下键盘键值的获取:键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点会呈现 0 的状态,反之,未被按下时则呈现逻辑 1 的状态。

扫描信号由 row 进入键盘,变化的顺序依次为 1110-1101-1011-0111-1110每一次扫描一排,依次地周而复始例如现在的扫描信号为 1011,代表目前正在扫描 9,10,11,12 这一排的按键,如果这排当中没有按键被按下的话,则由column 读出的值为 1111;反之当 9 这个按键被按下的话,则由 column 读出的值为 1110根据上面所述原理,我们可得到各按键的位置与数码关系如表所示:row 1110 1110 1110 1110 1101 1101 1101 1101column 1110 1101 1011 0111 1110 1101 1011 0111键值 1 2 3 4 5 6 7 8row 1011 1011 1011 1011 0111 0111 0111 0111column 1110 1101 1011 0111 1110 1101 1011 0111键值 9 10 11 12 13 14 15 16动态显示原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。

各位数码管的相同段是并联的,段码的输出对各位数码管来说都是相同的因此在同一时刻如果各位数码管都处于点亮状态,6 位数码管将显示相同的字符若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位处于点亮状态,而其它各位处于灭灯状态同时,段码输出相应位要显示字符的字型码这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出要显示的字符虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于 50Hz,将看不到闪烁现象5.设计思路该程序可分为两个模块:获取并存储键值模块和动态显示模块获取并存储键值模块:此次实验只要求仿真而不需要接硬件,因而不存在按键这个动作,所以键盘扫描原理在这里并不适用在程序设计中我们将 row和 column 都设置为输入信号,则低电平出现的行和列所交处即为按键处,以此简单模拟按键。

根据上表所列,将对应按键的键值存储在 key_code 中这样就完成了键值的存储动态显示模块:此次实验只需用到两个显示数码管,因此只要用一个高频时钟信号控制这两个数码管交替亮灭,并在对应位显示正确的键值,就完成动态显示了综上就可以实现矩阵案件的数码管显示了具体流程图如下:6.仿真波形当 row=1110,column=1110 时,key_code=0000,键值为 1,所以第一个数码管不亮,第二个数码管显示 1,如下图:rowcolumnn判断按键处,并得出对应的键值将键值存储到key_code 中数码管动态显示键值当 row=0111,column=0111 时,key_code=1111,键值为 16,所以第一个数码管显示 1,第二个数码管显示 6,如下图:7. 硬件实现以上步骤都完成后,在硬件上实现就比较简单了此时要注意两个问题:第一,时钟频率的设置,在仿真时由于没有外在时钟源,所以把 row 和 column都设置为手动输入,但当在硬件上实现时要采用实验板上的低频时钟源,并设计分频电路提供合适的时钟频率这就需要对程序做相应的修改;第二,管脚号的编写,根据各实物图纸标号和 ATF1508 的对应关系编写对应管脚号。

接下来要做的就是硬件连接,然后就是下载程序程序通过编译后生成*.pof 文件,用 pof2jed 软件将文件转换为 jed 格式,然后用 Atmel ISP 软件实现下载如果下载成功的话,就能实现从左上到右下按键分别显示数字 1-168. 实物展示二、 数码管学号滚动显示 1.实验目的(1)掌握 VHDL 语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验所用仪器及元器件计算机一台 实验板一块 电源线一根 扁平线一根 下载线一根 3. 实验任务要求学生在六个数码管滚动显示自己的学号(六位) ,每隔一定时间循环移位一次,学号为奇数则左移,学号为偶数则右移间隔时间可由开关选择 1 秒,2 秒,3 秒和 4 秒4. 实验原理该实验同样主要用到按键模块和数码管的动态显示,实验原理和实验一所阐述的相同5. 设计思路循环右滚动,始终点亮 6 个数码管,左出右进状态为:010506-105060-050601-506010-060105-601050-010506主要思路如下:(1)加入按键控制,主要用到 4 个键,用来选择不同的移位周期具体实现方案是引入一个变量 time_count,用时钟信号和按键值来控制 time_count 的累加周期,从而控制移位周期。

例如当按 2 键,key_code=0001,time_count 以000,001 为周期循环计数(即 2s) ,每循环一次,shift 就加 1 即移位周期为2s(shift 控制移位)以此类推,可以选择 1s,2s,3s,4s 不同的移位周期2)为实现移位,关键改动为新增一个计数器,计数周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的 6 位数码进行动态扫描,显示出6 种移位状态中的一种;在下一个大的周期内,计数变量 shift 加 1定义led_sel_count 来控制初始时刻对应位显示的数字(固定不变的关系) ,定义led_sel_llb 控制数字显示的对应位置,则 led_sel_llb=led_sel_count+shift则代表相对于初始时刻移位 shift 位后该数字显示的对应位,这样就实现了移位以此类推,实现循环移位3)按键模块和动态显示模块同实验一具体流程图如下:6. 仿真波形1 Row=1110,Column=1110,key_code=0000,shift 的计数周期是 1s,即移位周期为 1sClk 信号 Time_countKey_code(按键值)shiftled_sel_llb=led_sel_count+shift实现移位动态显示Clk_temp信号移位模块移位周期选择模块动态显示模块2 Row=1110,Column=1101,key_code=0001,time_count 以 000,001 循环计数,shift 的周期为 2s 即移位周期为 2s3 Row=1110,Column=1011,key_code=0010,time_count 以 000,001,010循环计数,shift 的周期为 3s 即移位周期为 3s4 Row=1110,Column=1110,key_code=0011,time_count 以000,001,010,011 循环计数,shift 的周期为 4s 即移位周期为 4s 7. 硬件实现这个实验要注意的问题和上一个实验基本相同。

这个实验涉及到动态显示,所以还要特别注意 Clk 和 Clk-temp 的设置,后者要比前者大的多才能实现动态显示程序编译通过后连接硬件并进行下载,下载成功则可以实现学号的动态显示和右移,并通过按键选择右移的周期8. 体会和建议由于上学期没有做过软件部分,所以这学期的任务还是比较重的但是老师给的资料很全,照着资料一步步做下来还比较顺利但还是发生了一些小插曲,Atmel ISP 支持的下载文件类型为 *.JED,而 JED 文件是由POF 文件转换而来的但是我们在编译的文件夹中却找不到 POF 文件,最后百度得知 Quartus6.0 版本编译后无法生成 POF 文件,必须破解到 9.0 版本才行还有一开始电源线是坏的,下载一直不成功,但这个问题很快就排查出来了之前同学告诉我们下载不成功是因为热插拔冷插拔的原因,后来发现其实那个没什么关系貌似,是下载的电源线有问题我觉得课程设计的安排是有必要的,让我学到了很多:首先就是排查故障的方法,在确保软件不出错的情况下找硬件问题,这样一级级排查很有效;其次就是善于发现问题并有效解决问题的能力通过这个阶段的努力把学到的理论知识运用到实践中,更直观也有利于对理论知识的理解。

9.附录(VHDL 源程序)-测试数码管,控制最右边 2 个数码管动态显示 1~16--40M 有源晶振 2 脚--32.768 晶振 83 脚--数码管 a~h 75,76,77,79,80,81,69,70--6 个选择管脚 54,55,56,57,58,60LIBRARY ieee ;USE ieee.std_logic_1164.all ;USE ieee.std_logic_unsigned.all ;--显示模块ENTITY count2 ISPORT ( clk : IN STD_LOGIC;--40M 高频时钟,也可以接低频时钟,看数码管显示的情况led_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管 8 段显示,可显示 0~9,A~Fled_sel : buffer STD_LOGIC_VECTOR(5 DOWNTO 0);--选择 6 个数码管,‘1’表示点亮对应数码管row : out STD_LOGIC_VECTOR (3 downto 0);--行列式键盘的 4 行column : in STD_LOGIC_VECTOR (3 downto 0)--行列式键盘的 4 列) ; END count2 ;ARCHITECTURE Behavior OF count2 ISSIGNAL clk_temp :STD_LOGIC;--分频后的电路时钟输出signal data :STD_LOGIC_VECTOR(3 DOWNTO 0);--数码管要显示的数 0~15 表示 1~16signal led_sel_count :STD_LOGIC;--用于选择第 5 个和第 6 个数码管,分别用 1 和 0 代表SIGNAL div_cnt : std_logic_vector(1downto 0。

下载提示
相似文档
正为您匹配相似的精品文档