键盘及接口显示电路 EDA.docx

上传人:b****4 文档编号:5475263 上传时间:2023-05-08 格式:DOCX 页数:16 大小:80.63KB
下载 相关 举报
键盘及接口显示电路 EDA.docx_第1页
第1页 / 共16页
键盘及接口显示电路 EDA.docx_第2页
第2页 / 共16页
键盘及接口显示电路 EDA.docx_第3页
第3页 / 共16页
键盘及接口显示电路 EDA.docx_第4页
第4页 / 共16页
键盘及接口显示电路 EDA.docx_第5页
第5页 / 共16页
键盘及接口显示电路 EDA.docx_第6页
第6页 / 共16页
键盘及接口显示电路 EDA.docx_第7页
第7页 / 共16页
键盘及接口显示电路 EDA.docx_第8页
第8页 / 共16页
键盘及接口显示电路 EDA.docx_第9页
第9页 / 共16页
键盘及接口显示电路 EDA.docx_第10页
第10页 / 共16页
键盘及接口显示电路 EDA.docx_第11页
第11页 / 共16页
键盘及接口显示电路 EDA.docx_第12页
第12页 / 共16页
键盘及接口显示电路 EDA.docx_第13页
第13页 / 共16页
键盘及接口显示电路 EDA.docx_第14页
第14页 / 共16页
键盘及接口显示电路 EDA.docx_第15页
第15页 / 共16页
键盘及接口显示电路 EDA.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

键盘及接口显示电路 EDA.docx

《键盘及接口显示电路 EDA.docx》由会员分享,可在线阅读,更多相关《键盘及接口显示电路 EDA.docx(16页珍藏版)》请在冰点文库上搜索。

键盘及接口显示电路 EDA.docx

键盘及接口显示电路EDA

 

河南科技大学

课程设计说明书

课程名称EDA技术

题目键盘及接口显示电路

学院车辆与动力工程学院

班级农业电气化与自动化091

学生姓名卢浩冉

指导教师罗四倍

日期2012年7月12号

 

键盘及接口显示电路

摘要

本文通过对4×4矩形键盘的信息采集,并能够在数码显示管上显示所按下的信息。

通过循环输出行信号,检测列信号输入,将行列信号相并,来达到采集信号的目地,并通过译码在7段数码管上显示出来。

此次设计,为了防止抖动引起的混乱,加入了一个防抖动环节。

在译完一个键值后,加了一个计算环节,一旦检测到列信号后,译码,紧跟着进入计数环节,此时键抖动不会进入其他环节,这样可以防止抖动。

给精度较高的场合应用提供了良好的条件,为以后高精度的应用创造良好空间。

设计中通过按键控制可以显示字符串,例如“HELLO”,较小的改动可以任意显示5个字符,这在广告中的用处随处可见,给现代生活带来了方便。

关键词:

键盘扫描译码显示字符串

 

第一章绪论

§1.1设计目的和意义

本次设计的目的就是通过实践深入理解计算机组成原理,了解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。

以计算机组成原理为指导,通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。

通过对掌握4×4键盘的扫描的巧妙实现和对字符串的显示过程.巩固和综合运用所学知识,提高IC设计能力,提高分析、解决计算机技术实际问题的独立工作能力。

§1.2设计任务及要求

1.键盘扫描功能:

能够对矩形键盘信息采集;

2.显示功能:

能够显示相应的按键信息,并能够在按键控制下切换为字符串显示“HELLO”!

3.掌握数码管工作的原理,并能够对设计的程序进行仿真和测试,以实现相应的功能。

第二章总体设计

§2.1工作原理

可编程器件的KEY_HANG[3..0]行信号输出端不停循环输出“1110”“1101”“1011”“0111”。

当没有键按下时可编程器件的KEY_LIE[3..0]列信号输入端检测到的是“1111”。

当有按键按下时,如按下1,此时KEY_HANG[3..0]行信号输出为“0111”,即KEY_HANG[3..0]的3管脚为“0”,可由电路看出,此时输入端KEY_LIE[3..0]检测到的将是“0111”。

KEY_LIE[3..0]的3管脚为0,可以在编写程序时,将输出信号KEY_HANG[3..0]与输入信号KEY_LIE[3..0]同时判断,比如可以认为当数据“KEY_HANG&KEY_LIE”为“01110111”时,可译码成数据1,。

同理可得其他按键的编码。

根据不同数据的编码译成不同的数据。

§2.2设计思路

1.循环输出行信号,检测列信号输入,将行列信号相并。

2.译键值。

3.去抖动。

在译没一个键值后,为了防止抖动,加了一个计算环节,一旦检测到列信号后,译码,紧跟着进入计数环节,此时键抖动不会进入其他环节,这样可以防止抖动。

4.数码管译码、循环显示。

电路的具体功能罗列如下:

1)采用4×4矩阵键盘作为操作数和操作符的输入设备。

2)采用2位8段数码管作为输出显示设备,显示按下的数字及简单的功能。

3)由于所有键盘在按下或者弹起的时候均有按键抖动,所以应该采用去抖电路,当检测到有按键按下去的时候,应该延时20ms后,再进行检测,如果仍有键盘按键被按下去的话,则进行键盘读值。

当CLK_1K上升沿到来时状态转为state0,然后判断列与非后的值,看是否有按键按下,如果有输入数据,则自动启动20ms的计数器,当计满数后,产生一个指示信号,此信号为1bit,高电平有效。

当读到此指示信号后,便再次将row信号锁存至寄存器,便得到键盘的一个返回值。

如果row没有变化,则state转换为state2,对第二行进行按键扫描。

依此类推,扫描第三行与第四行。

因为普通的按键都是接触式的,当按键闭合或释放时,上下接触面都会产生一个很短暂的抖动,如图2.2所示,这个抖动时间一般都会持续5-10ms,虽然这个抖动时间很短,但对于FPGA工作在50M的高频率上的器件来说,还是可以捕捉的到的。

为了使CPU对于一次按键操作只处理一次,在软件中必须加入去除抖动处理。

如图2.1所示

图2.1按键闭合时产生的抖动

由图中可以看出,最简单的去抖方法就是每隔一段时间读一次键盘,时间间隔大于10ms即可。

如果连续两次检测都有按键被按下,则可以肯定有按键被按下,而且也进入闭合稳定期。

§2.3数码管显示译码模块设计

数码管显示译码电路主要用来对实际的二进制数据装换为8段数码管的实际显示控制码,采用两个2位的8段共阴极数码管,数码管的显示方式有两种:

静态显示和动态显示。

具体如下:

静态显示方式:

所谓静态显示就是指无论是多少位数码管,同时处于显示状态需要的硬件电路较多(每一个数码管都需要一个锁存器),将造成很大的不便,同时由于所有数码管都处于被点亮状态,所以需要的电流很大,当数码管的数量增多时,对电源的要求也就随之增高。

所以,在大部分的硬件电路设计中,很少采用静态显示方式。

动态显示方式:

所谓动态显示,是指无论在任何时刻只有一个数码管处于显示状态,每个数码管轮流显示。

动态显示的优点是:

硬件电路简单(数码管越多,这个优势越明显),由于每个时刻只有一个数码管被点亮,所以所有数码管消耗的电流较小;缺点是:

数码管亮度不如静态显示时的亮度高,例如有8个数码管,以1秒为单位,每个数码管点亮的时间只有1/8秒,所以亮度较低;如果刷新率较低,会出现闪烁现象;如果数码管直接与单片机连接,软件控制上会比较麻烦等。

显示译码方式如下:

1)时钟上升沿到来时分别对位选和段选进行译码。

2)将输入的2bite位选数据译码成4比特数据控制数码管的2位,由于是共阴极数码管要选定相应的数码管则使该位位低电平,其它位为高电平即可,如:

0000译码为0111_1111,对应于实验板上的左边第一位数码管。

3)将输入的4bite段选数据译码为8比特数据控制8个LED的亮灭,最高位接A,最低位接小数点位DP。

若要显示0则对应的译码为8’b1111_1100。

§2.4字符串“HELLO”的模块实现

§2.4.1七段数码管译码扫描显示

clk:

时钟输入端,此信号是串行扫描的同步信号。

data_control[7..0]:

8个分别控制数码管显示的输入信号;

led_addr[7..0]:

对8个数码管进行串行扫描的输出控制信号;

seg7_data[6..0]:

驱动7段数码管各显示段的输出信号;

§2.4.2原理图

图2.2字符串显示原理图

第三章仿真

§3.1键盘扫描功能的仿真

没有键按下时行循环输出“1110”“1101”“1011”“0111”

图3.1无按键时波形

当随机按下时行保持所按下的状态不变

图3.2随机按键时波形

§3.2字符串的仿真

图3.3字符串显示

第四章程序

§4.1键盘扫描程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjpis

port(

clk,start:

instd_logic;

kbcol:

instd_logic_vector(3downto0);--行扫描信号

kbrow:

outstd_logic_vector(3downto0);--列扫描信号

seg7_out:

outstd_logic_vector(6downto0);--显示控制信号

scan:

outstd_logic_vector(7downto0)--数码管地址选择控制信号

);

endjp;

architectureoneofjpis

signalcount,sta:

std_logic_vector(1downto0);

signalseg7:

std_logic_vector(6downto0);

signaldat:

std_logic_vector(4downto0);

signalfn:

std_logic;--按键标志位,判断是否有键被按下

begin

scan<="00000001";--只使用一个数码管显示

--循环扫描计数器

process(clk)

begin

ifclk'eventandclk='1'then

count<=count+1;

endif;

endprocess;

--循环列扫描

process(clk)

begin

ifclk'eventandclk='1'then

casecountis

when"00"=>

kbrow<="0001";

sta<="00";

when"01"=>

kbrow<="0010";

sta<="01";

when"10"=>

kbrow<="0100";

sta<="10";

when"11"=>

kbrow<="1000";

sta<="11";

whenothers=>

kbrow<="1111";

endcase;

endif;

endprocess;

--行扫描译码

process(clk,start)

begin

ifstart='0'then

seg7<="0000000";

elsifclk'eventandclk='1'then

casestais

when"00"=>

casekbcolis

when"0001"=>

seg7<="1111001";

dat<="00011";

when"0010"=>

seg7<="1101101";

dat<="00010";

when"0100"=>

seg7<="0110000";

dat<="00001";

when"1000"=>

seg7<="1111110";

dat<="00000";

whenothers=>

seg7<="0000000";

dat<="11111";

endcase;

when"01"=>

casekbcolis

when"0001"=>

seg7<="1111000";

dat<="00111";

when"0010"=>

seg7<="1011111";

dat<="00110";

when"0100"=>

seg7<="1011011";

dat<="00101";

when"1000"=>

seg7<="0110011";

dat<="00100";

whenothers=>

seg7<="0000000";

dat<="11111";

endcase;

when"10"=>

casekbcolis

when"0001"=>

seg7<="0011111";

dat<="01011";

when"0010"=>

seg7<="1110111";

dat<="01010";

when"0100"=>

seg7<="1111011";

dat<="01001";

when"1000"=>

seg7<="1111111";

dat<="01000";

whenothers=>

seg7<="0000000";

dat<="11111";

endcase;

when"11"=>

casekbcolis

when"0001"=>

seg7<="1000111";

dat<="01111";

when"0010"=>

seg7<="1001111";

dat<="01110";

when"0100"=>

seg7<="0111101";

dat<="01101";

when"1000"=>

seg7<="1001110";

dat<="01100";

whenothers=>

seg7<="0000000";

dat<="11111";

endcase;

whenothers=>

seg7<="0000000";

endcase;

endif;

endprocess;

--产生按键标志位,用于存储按键信息

fn<=not(dat(0)anddat

(1)anddat

(2)anddat(3)anddat(4));

process(fn)

begin

iffn'eventandfn='1'then--按键信息存储

seg7_out<=seg7;

endif;

endprocess;

endone;

§4.2字符串显示程序

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityScan8ledis

port(clk:

instd_logic;

data_control:

instd_logic_vector(4downto0);

led_addr:

outstd_logic_vector(4downto0);

seg7_data:

outstd_logic_vector(6downto0));

endentityscan8led;

architectureoneofscan8ledis

typeaaaaisarray(0to3)ofinteger;

constanta:

aaaa:

=(0,1,2,3);

typeseg7_data_typeisarray(naturalrange<>)ofstd_logic_vector(6downto0);

constantseg7_data_table:

seg7_data_type(0to5):

=(--gfedcba

"1110110",

"1111001",

"0111000",

"0111000",

"0011111",

"0000000");

typeled_addr_typeisarray(naturalrange<>)ofstd_logic_vector(7downto0);

constantled_addr_table:

led_addr_type(0to4):

=(--dizhibiao

"00000001",

"00000010",

"00000100",

"00001000",

"00010000");

begin

process(clk)

variablecount:

integerrange0to4:

=0;

begin

if(clk'eventandclk='1')then

count:

=count+1;

led_addr<=led_addr_table(count);

if(data_control(count)='1')then

seg7_data<=seg7_data_table(count);

else

seg7_data<=seg7_data_table(5);

endif;

endif;

endprocess;

endarchitectureone;

第五章结论

这次EDA课程设计历时十天,学到很多很多的东西。

同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。

特别是当每一个子模块编写调试成功时,都会很高兴。

在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误。

排除困难后,程序编译就通过了。

在波形仿真时,也遇到了一点困难,想要的结果不能在波形上得到正确的显示,后来,经过屡次的调试之后,才发现在写代码之前对信号的相位考虑不足。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为以后的工作所服务。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

总的来说,这次设计还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤指导下,终于迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。

最后,对给过我帮助的老师和所有同学再次表示忠心的感谢!

参考文献

[1]徐志军.徐光辉《CPLD/FPGA的开发与应用》.2001.电子工业出版社

[2]朱正伟《EDA技术及应用》清华大学出版社

[3]延明、张亦华《数字电路EDA技术入门》北京邮电大学出版社

[4]EDA技术与VHDL徐志军、王金明、尹延辉北京:

电子工业出版社

[5]于润伟.数字系统设计与EDA技术.北京:

机械工业出版社

 

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

当前位置:首页 > PPT模板 > 卡通动漫

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2