您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页EDA技术课程设计-脉冲按键电话显示器.

EDA技术课程设计-脉冲按键电话显示器.

来源:保捱科技网


课程 EDA技术课程设计 题目 脉冲按键电话显示器 专业

电子信息工程

主要内容、基本要求、主要参考资料等 主要内容:

设计一个准确地反映按键数字具有8位显示的电话按键显示器,该电话显示器要求具有重拨的功能,当按下重拨键时,能够显示最后一次输入的电话号码。

基本要求:

1、设计一个具有8位显示的电话按键显示器; 2、能准确地反映按键数字;

3、显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位; 4、设置一个“重拨”键,按下此键,能显示最后一次输入的电话号码; 5、挂机2秒后或按熄灭按键,熄灭显示器显示。

主要参考资料:

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006. [3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

完成期限 2011.3.11 指导教师 专业负责人

2011年 3月7日

一、总体设计思想

1.基本原理

本次课程设计是用VHDL语言实现一个能准确地反映按键数字、具有8位显示的电话按键显示器。摘机时开始工作,显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位;设置一个“重拨”键,按下此键能显示最后一次输入的电话号码;挂机2秒后或按熄灭键,熄灭显示器显示。

本文设计的脉冲按键电话显示器由五个模块组成:按键电路、译码器、移位寄存、锁存器和数码管显示电路,其中移位寄存、锁存器和数码管译码显示电路为系统的主要组成部分。

(1)按键电路模块。提供“0”到“9”数字按键的输入,同时设置有拨号键,清除键,挂机键和重拨键。

(2)译码电路模块。译码器有两个功能。第一,把输入的一位键值转换成四位BCD码;第二,把4位二进制码译成相应的数码管输出显示码。

BCD码对应的七段数码管显示如下表:

4位BCD码 g f e d c b a 0 1 0 1 0 1 0 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 0 0 0 1 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 1 0 显示数字 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 1 2 3 4 5 6 7 8 9 无 其他情况 BCD码对应的数码管显示

1

(3)移位寄存器、锁存模块。移位寄存器分为三个部分。当按下拨号键时,数字按键值依次由数码管的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位数码管熄灭;当按下重拨键时,锁存器中存储的键值输入到移位寄存器中,并通过数码管显示出来。

(4)数码管显示模块。数码管显示用于将设置好的每个按键的键值在数码管上显示出来。由于实验过程中需要使用8个数码管,因此数码管显示模块必须加上数码管片选及移位得程序,从而实现数据输入以后从低位向高位移动、显示。 2.设计框图

译数字键入 码显示电路 脉冲产生电路i 译计时电路 码显示电路控制电路1 移位寄存器 控制电路2

脉冲按键电话总体设计方案

二、设计步骤和调试过程 1、总体设计电路

2

SHOW:U1CLEARCLK1DIALDIN1[0]DIN1[1]DIN1[2]DIN1[3]DIN1[4]DIN1[5]DIN1[6]DIN1[7]DIN1[8]DIN1[9]RE_DIALCLEARCLK1DIALDIN1[0]DIN1[1]DIN1[2]DIN1[3]DIN1[4]DIN1[5]DIN1[6]DIN1[7]DIN1[8]DIN1[9]RE_DIALKEY1SEG8[0]SEG8[1]SEG8[2]SEG8[3]SEG8[4]SEG8[5]SEG8[6]SEG8[7]SET[0]SET[1]SET[2]SET[3]SHOW:U1:SET[0]SHOW:U1:SET[1]SHOW:U1:SET[2]SHOW:U1:SET[3]KEYOUTSEG8[0]SEG8[1]SEG8[2]SEG8[3]SEG8[4]TRA:U2Mux0~3Mux1~3Mux2~3Mux3~3Mux4~3Mux5~3Mux6~3SEG71[6]SEG71[5]SEG71[4]SEG71[3]SEG71[2]SEG71[1]SEG71[0]SEG8[7]SEG8[6]SEG8[5] 2、模块设计和相应模块程序

1)顶层文件程序

各端口说明分别为:

输入: 输出:

DIN1[9…0]:0~9十个数字键; KEYOUT:可输入数字指示灯; CLK1:时钟脉冲; SEG71[6…0]:8位数码管;

3

CLEAR:删除键; SEG3[2…0]:数码管的七段; DIAL:拨号键; RE_DAIL:重拨键 模块程序:

LIBRARY IEEE; --库定义 USE IEEE.STD_LOGIC_11.ALL; --包定义 USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY UPKEY IS --定义实体名、端口 PORT(DIN1:IN STD_LOGIC_VECTOR(9 DOWNTO 0); --定义0~9数字输入 CLK1,CLEAR,DIAL,RE_DIAL:IN STD_LOGIC;

KEYOUT:OUT STD_LOGIC; --定义可输入脉冲指示灯 SEG71:OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --定义七位段码 SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); -- 8个数码管 END ENTITY;

ARCHITECTURE ONE OF UPKEY IS --定义结构体 COMPONENT SHOW IS PORT(DIN:IN STD_LOGIC_VECTOR(9 DOWNTO 0); CLK,CLEAR,DIAL,RE_DIAL:IN STD_LOGIC; KEYOUT:OUT STD_LOGIC;

SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT;

4

COMPONENT TRA IS PORT(BCD1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEG7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END COMPONENT;

SIGNAL SET_1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

U1:SHOW PORT MAP( DIN1,CLK1,CLEAR,DIAL,RE_DIAL,KEYOUT,SET_1,SEG8); U2:TRA PORT MAP(SET_1,SEG71); END ARCHITECTURE ONE; 2)BCD译码子程序

BCD译码程序的框图如下图所示:

BCD译码程序

各端口说明分别为:

输入: 输出:

BCD1[3…0]:4位BCD码; 数码管的七段显示 模块程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

5

ENTITY TRA IS PORT(

BCD1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEG7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ENTITY;

ARCHITECTURE ONE OF TRA IS BEGIN

PROCESS(BCD1)IS BEGIN CASE BCD1 IS

WHEN \"0000\"=>SEG7<=\"0111111\"; -- WHEN \"0001\"=>SEG7<=\"0000110\"; -- WHEN \"0010\"=>SEG7<=\"1011011\"; -- WHEN \"0011\"=>SEG7<=\"1001111\"; -- WHEN \"0100\"=>SEG7<=\"1100110\"; -- WHEN \"0101\"=>SEG7<=\"1101101\"; -- WHEN \"0110\"=>SEG7<=\"1111101\"; -- WHEN \"0111\"=>SEG7<=\"0000111\"; -- WHEN \"1000\"=>SEG7<=\"1111111\"; -- WHEN \"1001\"=>SEG7<=\"1101111\"; -- WHEN OTHERS=>SEG7<=\"0000000\"; -- END CASE;

6

显示0 显示1 显示2 显示3 显示4 显示5 显示6 显示7 显示8 显示9

其他情况下数码管熄灭

END PROCESS; END ARCHITECTURE; 3)键值显示子程序

键值显示控制的框图如下图所示

按键显示控制框图

各端口说明分别为:

输入: 输出:

DIN [9…0]:0~9十个数字键; KEYOUT:可输入数字指示灯; CLK:时钟脉冲; SET[3…0]:键值的BCD码 CLEAR:删除键; SEG3[2…0]:数码管的七段; DIAL:拨号键; RE_DAIL:重拨键 模块程序: LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SHOW IS

PORT(DIN:IN STD_LOGIC_VECTOR(9 DOWNTO 0);

7

CLK,CLEAR,DIAL,RE_DIAL:IN STD_LOGIC; KEYOUT:OUT STD_LOGIC;

SET:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); SEG8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY;

ARCHITECTURE ONE OF SHOW IS

SUBTYPE TEN IS STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL BCD :TEN;

TYPE NUMBER1 IS ARRAY(7 DOWNTO 0) OF STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL NUMBER : NUMBER1;

SIGNAL KEY,KEY1,CLK1,DIAL1,RE_DIAL1:STD_LOGIC; SIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL COUNT1:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL COUNT2:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL DIN1: STD_LOGIC_VECTOR(9 DOWNTO 0); SIGNAL LOCK: STD_LOGIC_VECTOR(31 DOWNTO 0); BEGIN

---------------------------------------------------- PROCESS(CLK)IS BEGIN

IF RISING_EDGE(CLK) THEN COUNT1<=COUNT1+1;

8

END IF; END PROCESS;

CLK1<='0' WHEN COUNT1<\"1100\" ELSE '1'; PROCESS(CLK1)IS BEGIN

IF RISING_EDGE(CLK1) THEN

DIN1(9 DOWNTO 0)<=DIN(9 DOWNTO 0); DIAL1<=DIAL; RE_DIAL1<=RE_DIAL; END IF; END PROCESS;

KEY<=(DIN1(0) OR DIN1(1) OR DIN1(2) OR DIN1(3) OR DIN1(4) OR DIN1(5) OR DIN(6) OR DIN1(7) OR DIN1(8) OR DIN1(9));

PROCESS(CLK1)IS BEGIN

IF FALLING_EDGE(CLK1) THEN IF COUNT2=\"100\" THEN

IF CLEAR='0'AND RE_DIAL='0' THEN KEY1<=KEY;

ELSIF CLEAR ='1' AND RE_DIAL='0' THEN KEY1<=CLK;

ELSE KEY1<=RE_DIAL1;

9

END IF; COUNT2<=\"000\"; ELSE

COUNT2<=COUNT2+1; END IF; END IF; END PROCESS;

-------------------------------------- PROCESS(DIN1)IS BEGIN

IF DIN1(6)='1' THEN BCD<=\"0110\"; ELSIF DIN1(1)='1' THEN BCD<=\"0001\"; ELSIF DIN1(2)='1' THEN BCD<=\"0010\"; ELSIF DIN1(3)='1' THEN BCD<=\"0011\"; ELSIF DIN1(4)='1' THEN BCD<=\"0100\"; ELSIF DIN1(5)='1' THEN BCD<=\"0101\"; ELSIF DIN1(0)='1' THEN BCD<=\"0000\"; ELSIF DIN1(7)='1' THEN BCD<=\"0111\"; ELSIF DIN1(8)='1' THEN BCD<=\"1000\"; ELSIF DIN1(9)='1' THEN BCD<=\"1001\"; ELSE BCD<=\"0000\"; END IF;

10

END PROCESS;

------------------------------------------------------ KEYOUT<=KEY1; PROCESS(KEY1)IS BEGIN

IF RISING_EDGE(KEY1) THEN

IF CLEAR='0' AND RE_DIAL1='0' THEN --数字从低位向高位移动

NUMBER(7)<=NUMBER(6); NUMBER(6)<=NUMBER(5); NUMBER(5)<=NUMBER(4); NUMBER(4)<=NUMBER(3); NUMBER(3)<=NUMBER(2); NUMBER(2)<=NUMBER(1); NUMBER(1)<=NUMBER(0); NUMBER(0)<=BCD;

ELSIF CLEAR='1' AND RE_DIAL1='0' THEN --从高位向低位移动

NUMBER(0)<=NUMBER(1); NUMBER(1)<=NUMBER(2); NUMBER(2)<=NUMBER(3); NUMBER(3)<=NUMBER(4);

11

输入数字,实现按下删除键,数字 NUMBER(4)<=NUMBER(5); NUMBER(5)<=NUMBER(6); NUMBER(6)<= NUMBER(7); NUMBER(7)<=\"1111\";

ELSE --将已输入数字锁存 NUMBER(7)<= LOCK(31 DOWNTO 28); NUMBER(6)<= LOCK(27 DOWNTO 24); NUMBER(5)<= LOCK(23 DOWNTO 20); NUMBER(4)<= LOCK(19 DOWNTO 16); NUMBER(3)<= LOCK(15 DOWNTO 12); NUMBER(2)<= LOCK(11 DOWNTO 8); NUMBER(1)<= LOCK(7 DOWNTO 4); NUMBER(0)<= LOCK(3 DOWNTO 0); END IF; END IF; END PROCESS;

--------------------------------------------------------- PROCESS(CLK)IS BEGIN

IF RISING_EDGE(CLK) THEN COUNT<=COUNT+1; END IF;

12

END PROCESS;

--------------------------------------------------------- PROCESS(COUNT)IS BEGIN

CASE COUNT IS --片选,选择数码管 WHEN \"0001\"=>SET<=NUMBER(7);SEG8<=\"00000001\"; WHEN \"0011\"=>SET<=NUMBER(6);SEG8<=\"00000010\"; WHEN \"0101\"=>SET<=NUMBER(5);SEG8<=\"00000100\"; WHEN \"0111\"=>SET<=NUMBER(4);SEG8<=\"00001000\"; WHEN \"1001\"=>SET<=NUMBER(3);SEG8<=\"00010000\"; WHEN \"1011\"=>SET<=NUMBER(2);SEG8<=\"00100000\"; WHEN \"1101\"=>SET<=NUMBER(1);SEG8<=\"01000000\"; WHEN \"1111\"=>SET<=NUMBER(4);SEG8<=\"10000000\"; WHEN OTHERS=>NULL; END CASE; END PROCESS;

---------------------------------------------------------- PROCESS(DIAL1)IS

BEGIN --在重拨键以后,显示已拨号码 IF RISING_EDGE(DIAL1) THEN LOCK(31 DOWNTO 28)<=NUMBER(7); LOCK(27 DOWNTO 24)<=NUMBER(6);

13

LOCK(23 DOWNTO 20)<=NUMBER(5); LOCK(19 DOWNTO 16)<=NUMBER(4); LOCK(15 DOWNTO 12)<=NUMBER(3); LOCK(11 DOWNTO 8)<=NUMBER(2); LOCK(7 DOWNTO 4)<=NUMBER(1); LOCK(3 DOWNTO 0)<=NUMBER(0); END IF;

END PROCESS;END ARCHITECTURE;

3、仿真及仿真结果分析

4、实验调试结果

为验证所设计的程序是否正确,将程序下载进行硬件测试。在QuartusⅡ开发环境中进行管脚锁定,连接好数码管驱动电路,然后将目标文件下载到器件中。最终可以看到按键正常显示、“重拨”键功能正常、达到设计要求。

三、结论及心得体会

在此次EDA课程设计中,我不仅强化了以前所学过的知识,并且学到了许

14

多书本上没有的知识,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编译调试成功时,心里特别有成就感。但是在编顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接总是有错误。在细心的检查下,终于找出了错误,程序编译才通过了。

参考资料

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 谭会生,张繁昌. EDA技术及应用, 西安电子科技大学出版社,2004.. [3] 李云,侯传教,冯永浩. VHDL电路设计实用教程 ,机械工业出版社,2009 [4] 康光华. 电子技术基础 数字部分(第五版) ,高等教育出版社,2006

15

2011年 3 月 11

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务