在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 脉冲按键电话显示器VHDL

脉冲按键电话显示器VHDL

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.15M
  • 下载次数:9
  • 浏览次数:243
  • 发布时间:2020-08-18
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.PDF
  • 所需积分:2
 

实例介绍

【实例简介】
类似电话拨号,按键显示在8个数码管上,内有具体的VHDL程序。
常熟理工学院课程设计报告 22.3移位寄存器、锁存模块 移位寄存器:移位寄冇器分为三个部分,当按下拨号键时,数字按键值依次由数码管 的低位向高位移动,同时送入锁存器中;当按下删除键时,键值由高位向低位移除,高位 数码管熄灭;当按卜重拨键时,锁冇器中冇储的键值输入到移位寄冇器中,并通过数码管 显示出来。其大致的流程图如图2.2所示 开始) 有键按下Y期除键 可输入脉冲指示灯灭← 数码管初始化 将之前输入的数据 可输入脉冲指示灯亮AY∠有键按下N 前移,并在低位输 入数字 扫描键值 有键拉Y删除键 转换成4位BCD码 删除已输入数字 计数到8 译成七段数码管显示码 在数码管上显示相应数值 拨号并锁存 重拨 结束 图22按键输入过稈流程图 2.2.4数码管显示模块 数码管显示用于将设置好的每个按键的键值(对应0-9的数字)在数码管上显示出来。 由于实验过程中需要使用8个数码管,因为在数码管显示模块必须加上数码管片选及移位 的程序,从而实现数据在输入以后从低位向高位移动、显示 在进行编写脉冲按键电话显示器程序时,我们主要是利用元件例化语句来实现的, 在顶层文件基础上,调用了数码管BCD码译码、键值显示两个底层文件,分别命名为 DISPLAY VHD、 SET NUM. VHD。 31顶层文件程序( PLUSE KEY VHD) 顶层文件的框图如图3.1所示: 常熟理工学院课程设计报告 PLSE KEY D■】匚学 了 匚L酝置 EET冒 L配B E且【 L EG彐[己 FE二即" 图3.1顶层文件框图 各端口说明分别为: 输入 输出 DIN9.01:09十个数字键 KEYOUT:可输入数字指示灯 CLKI:时钟脉冲; SEG71[6.0:8位数码管 CLEAR:删除键; SEG3[20]:数码管的七段 DIAL:拨号键; RE DAIL:重拨键 32BCD译码子程序 BCD译码程序的框图如图3.2所示 DISPLAY BcDL[彐]sEG7[4.·四 图3.2BCD译码程序 各端凵说明分别为: 输入: 输出: BCDI[3.0:4位BCD码; 数码管的七段显示 3.3键值显示子程序( SET NUM VHD) 键值显示控制的框图如图3.3所示 常熟理工学院课程设计报告 ET NUM E订LT 一LE自R 吾TE耳, ■翻L s匚口3E正 兵E二D『L 图3.3按键显示控制框图 各端口说明分别为: 输入 输出: DIN[9.0]:09十个数字键 KEYOUT:可输入数字指示灯; CLK:时钟脉冲; SET[3.0]:键值的BCD码 CLEAR:删除键 SEG3[2.0:数码管的七段 DIAL:拨号键; RE DAIL:重拨键 总结与体会 在大学课程即将接近尾声的时候,学院最后为我们安排了EDA技术实训,主要是通 过ⅤHDL语言编程,利用CPLA/FPGA芯片完成脉冲按键电话显示器的模拟。可以说通过 一学期EDA的理论和实验的学习,对ⅤHDL语言以及 CPLD/FPGA的下载与仿真有了 定的了解。 但是在刚拿到题目要求吋,我们小组有点茫然,特别在找资料的吋候,我们利用网络 搜索基本没有找到有用的资料,后来去学校图书馆去找参考书籍,也没什么用。后来实在 没有办法,只能在之前我们实验做过的数字秒表的基础上展开设计,自己画程序流图以及 原理图,编写程序。在设计之初,由于用的实验箱资源不够,只能实现四位数字的移动显 小,并且没有设置删除键,只有一个清除键。后来经过我们的修改,终于实现的八位数字 的移动显小,也就基本将课题要求完成了。 通过此次EDA技术实训,我们在之前的基础上:能进一步熟练使用ⅤHDL语言进行编 程,也对CPLD/FPGA有了更进一步的理解。相信在我们电子信息工程专业的学生以后的 学习、工作有不少的好处 常熟理工学院课程设计报告 附录 顶层文件程序 LIBRARY IEEE 定义 USE IEEESTD LOGIC 1164.ALL: 包定义 USE IEEE STD LOGIC UNSIGNED.ALL. ENTITY PLUSE KEY IS 定义实体名、端口 PORTODINI: IN STD LOGIC VECTOR(9 DOWNTO O 定义0~9数字输入 CLKI, CLEAR, DIAL,RE DIAL: IN STD LOGIC KEYOUT OUT STD LOGIC 定义可输入脉冲指小灯 SEG71 OUT STD LOGICⅤ ECTOR(6 DOWNTO0);-定义七位段码 SLG8 UT STD LOGIC VECTOR(7 DOWNTO0);-8个数码管 END ENTITY ARCHITECTURE ONE OF PLUSE KEY IS 定义结构体 COMPONENT SET NUM IS 调用 SET NUM底层文件 PORTODIN: IN STD LOGIC VECTOR(9 DOWNTO O CLK, CLEAR, DIAL RE DIAL: IN STD LOGIC KEYOUT OUT STD LOGIC SET: OUT STD LOGIC VECTOR(3 DOWNTO O SEG8: OUT STD LOGIC VECTOR( DOWNTO O) END COMPONENT COMPONENT DISPLAY IS 调用 DISPLAY底层文件 PORT(BCDI: IN STD LOGIC VECTOR(3 DOWNTO 0); SEG7: OUT STD LOGIC VECTOR(6 DOWNTO 0)); END COMPONENT. SIGNAL SET 1: STD LOGIC VECTOR( DOWNTO O BEGIN -各端口的连接 U1: SET NUM PORT MAP( DINI, CLKI, CLEAR, DIAL, RE DIAL, KEYOUT, SET 1, SEG8); U2: DISPLAY PORT MAP(SET 1, SEG71); END ART 2BCD译码子程序( DISPLAY VHD) LIBRARY IEEE USE IEEE STD LOGIC 1164.ALL USE IEEE STD LOGIC UNSIGNED.ALI ENTITY DISPLAY IS PORTO BCDI: IN STD LOGIC VECTOR( DOWNTOO 常熟理工学院课程设计报告 SEG7: OUT STD LOGIC VECTOR(6 DOWNTO O)) END ENTITY ARCHITECTURE ONE OF DISPLAY IS BEGIN PROCESS(BCDIIS BEGIN CASE BCDI IS WHEN0000=>SEG7<=0111111 -显示0 WHFN"0"=>SFGi7<="00000; -显示1 WHEN"0010″=>SEG7<="1011011"; -l示2 WHEN"0011"=>SEG7<="10011l1": 显示3 WIEN"Ol00"=>SEG7<="1100110"; -示4 WHEN"0101"=>SEG7<="1lo1101"; WHEN"110"=>SEG7<"1111101 显示6 WHEN"Ol11"=>SEG7<="0001l1": -示7 WHEN"1000=>SEG7<="11111l -显示8 WHFN"1001"=>SEG7<="10111 -显示9 WHEN OTHERS=>SEG7<=0000000 其他情况下数码管熄灭 END CASE END PROCESS END ARCHITECTURE 3键值显示子程序( SET NUM.VHD) LIBRARY IEEE USE IEEE STD LOGIC 1164.ALL USE IEEE STD LOGIC UNSIGNED.ALL ENTITY SET NUM 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 O) SEG8: OUT STD LOGIC VECTOR(7 DOWNTO O)) END ENTITY ARCHITECTURE ONE OF SET NUM IS SUBTYPE TEN IS STD LOGIC VECTOR(3 DOWNTO O) SIGNAL BCD: TEN TYPE NUMBER] IS ARRAY(7 DOWNTO O)OF STD LOGIC VECTOR(3 DOWNTO 0) SIGNAL NUMBER: NUMBER1 SIGNAL KEYKEY1 CLK 1. DIALl,RE DIALI: STD LOGIC: SIGNAL COUNT: STD LOGIC VECTOR(3 DOWNTO O) SIGNAL COUNTI: STD LOGIC VECTOR(3 DOWNTO 0) SIGNAL COUNT2: STD LOGIC VECTOR(2 DOWNTO O) SIGNAL DINI: STD LOGIC VECTOR(9 DOWNTO O) 常熟理工学院课程设计报告 SIGNAL LOCK: SID LOGIC VECTOR(I DOWNTO 0) BEGIN PROCESS(CLK)IS BEGIN IF RISING EDGE(CLK)THEN COUNTK<=COUNTI+I END IF END PROCESS CLKI<=0 WHEN COUNT]<1100 ELSE 1 PROCESS(CLKI)IS BEGIN IF RISING EDGE(CLKD)THEN DINI(9 DOWNTO O)<-DIN(9 DOWNTO O DIALI<=DIAL. RE DIALIS=RE DIAL END F END PROCESS KEY<=(DINI(O)OR DINI(1)OR DINI(2)OR DINI(3)OR DINI(4)OR DINI(5)OR DIN6OR DINI(OR DINI(8)OR DINI(9) PROCESS(CLKI)IS BEGIN IF FALLING EDGE(CLKDTHEN IF COUNT2-"100" THEN IF CLEAR=OAND RE DIAL=O THEN KEYI<=KEY ELSIF CLEAR=T' AND RE DIAL=O' THEN KEY 1<=CLK ELSE KEYI<=RE DIALI END IF COUNT2<="000”; ELSE COUNT2<=COUNT2+1 END IF END IF. END PROCESS PROCESSODINIIS BEGIN IF DINI(6)=1THEN BCD<=0110 ELSIF DINI(1=1 THEN BCD<=0001 ELSIF DINI(2)=1 THEN BCD<=0010 ELSIF DINI 3)=1 THEN BCD<=0011 ELSIF DINI(4=1 THEN BCD<=0100 ELSIF DINI(5)=1 THEN BCD<=01012 常熟理工学院课程设计报告 ELSIF DINI(O)=I THEN BCD<=0000 ELSIF DINI(7)=1 THEN BCD<=0111 ELSIF DINI(8-1 THEN BCD<=1000 ELSIF DINI(9)=1THEN BCD<=1001 ELSE BCD<=0000 END IF END PROCESS KEYOUT<=KEY I PROCESS(KEYDIS BEGIN IF RISING EDGECKEYD)THEN IF CLEAR=O AND RE DIALI=O THEN 输入数字,实现数宇从低位向高位移动 NUMBER(O-NUMBER(6: NUMBER(O=NUMBER(5); NUMBEROS<-NUMBER(4); NUMBER(4-NUMBER); NUMB上R(3)<=NUMB上K(2); NUMBERO)<=NUMBER(1) NUMBER(I=NUMBER(O) NUMBER(O=BCD ELSIF CLEAR=1 AND RE DIAL1= O THEN-按下删除键,数字从高位向低位移动 NUMBER(O<-NUMBER(I NUMBER(I<=NUMBER(2); NUMBER(2)NUMBER3 NUMBERG=NUMBER(4); NUMBER(4)<=NUMBER(5); NUMBER(S<-NUMBER(6: NUMBER(6= NUMBER(7) NUMBER(7)"111"; ELSE -将已输入数字锁存 NUMBER(T-LOCK(I DOWNTO 28) NUMBER(6<=LOCK(27 DOWNTO 24) NUMBER(S<=LOCK(23 DOWNTO 20 NUMBER(4)<=LOCK(19 DOWNTO 16) NUMBERG<=LOCK(15 DOWNTO 12) NUMBER(2)=LOCK(lI DOWNTO 8) NUMBER()=LOCK( DOWNTO 4) NUMBER(O<-LOCK33 DOWNTO 0) END IF END F END PROCESS === PROCESS(CLK)IS BEGIN 常熟理工学院课程设计报告 IF RISING EDGE(CLK) THEN COUNT<=COUNT+ END IF. END PROCESS PROCESS(COUNT)IS BEGIN WHN"0 T<=NUMBER(7SFGR8<0NM2选,选择数码管 CASE COUNT IS WHEN0011->SET-NUMBER(6; SEG8<-00000010 WHEN"0101"=>SET<= NUMBER(5);SEG8<="00000"; WHENOlll*>SET<=NUMBER(4); SEG8<=00001000 WHEN"1001">SET<= NUMBER(3);SEG8="00010000 WHEN 1011->SET<NUMBER(2); SEG8<-00100000 WHEN"1101=>SET=NUMBER(D); SEG8=01000000 WHEN1111"=>SET<=NUMBER(4); SEG8<=10000000 WHEN OTHERS=>NULI END CASE END PROCESS; PROCESS( DIALDIS BEGIN 在重拨键以后,显小已拨号码 IF RISING EDGE(DIALD) THEN LOCK(31 DOWNTO 28)<=NUMBER(7 LOCK(27 DOWNTO 24)<=NUMBER(6) LOCK(23 DOWNTO 20<=NUMBER(5) LOCK(19 DOWNTO 16)<-=NUMBER(4); LOCK(15 DOWNTO 12-NUMBER); LOCK(II DOWNTO 8<=NUMBER(2) LOCK(7 DOWNTO 4<=NUMBER(1); LOCK(3 DOWNTO O<=NUMBER(O END IF END PROCESS: END ARCHITECTURE 9 【实例截图】
【核心代码】

标签:

实例下载地址

脉冲按键电话显示器VHDL

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 琵琶琴瑟四王炸 发表于: 2021-06-24 12:39 38
还以为是程序文件,没想到是文档。唉,有点失望。

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警