您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页数字秒表

数字秒表

来源:华佗健康网
数字秒表的设计

一、 目的

1.熟悉简单的VHDL程序,掌握相关的EDA知识。2.了解数字秒表的设计原理。3.通过学习掌握程序设计思路及运用VHDL语言的控制

本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。在掌握所学的计算机组成与结构课程理论知识时,通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。

电子秒表在生活中的应用,它可广泛应用于对运动物体的速度、加速度的测量实验,还可用来验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场合.测定短时间间隔的仪表。有机械秒表和电子秒表两类。机械秒表与机械手表相仿,但具有制动装置,可精确至百分之一秒;电子秒表用微型电池作能源,电子元件测量显示,可精确至千分之一秒。广泛应用于科学研究、体育运动及国防等方面在当今非常注重工作效率的社会环境中,定时器能给我们的工作、生活以及娱乐带来很大的方便,充分利用定时器,能有效的加强我们的工作效率。

秒表的逻辑结构较简单,它主要由分频器、十进制计数器、6进制计数器、数据选择器、报警器和显示译码器等组成。在整个秒表中最关键的是如何获得一个精确的100HZ计时脉冲,除此之外,整个秒表还需有一个启动信号和一个归零信号,以便秒表能随意停止及启动。 秒有共有6个输出显示,分别为百分之一秒、十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之相对应,6个计数器的输出全都为BCD码输出,这样便与同显示译码器的连接。

二、 系统功能

硬件界面为两个4位的LED数码管,时间显示方式为6位同时显示,主要系统功能: 1、提供给计时器内部的时钟脉冲频率为100HZ计时脉冲;

2、计时器最低能精确显示到百分之一秒,最大显示到59分59.99秒;

3、设置起/停开关,即按一下此开关,启动计时器开始计时,再按一下计时停止。

三、 原理图(工作原理)

本设计共有主要有三个模块:分频模块、计时模块和显示模块。

分频模块:由于我们采购了市场上的晶振提供1 MHz的时钟信号,而我们秒表设计中要用到100 Hz的时钟作为基本时钟来产生0.01秒的精确度。所以分频的任务就是从1MHz时钟信号中产生出100 Hz的时钟信号作为计时模块的基本时钟。

计时模块:这部分事秒表的最重要的部分。我们知道,由0.01秒到1秒进位事100进制的,而由秒到分和由分到时的进制是60进制的,所以我们的秒表计时系统可以由一个100进制计数器和两个60进制计数器连接而成,即给100进制计数器提供100 Hz的时钟信号,让它产生0.01秒的精确度,即它每隔0.01秒计数一次,所以可以把其计数输出cq连接到数码管显示上,作为0.01秒和0.1秒的计时显示,而100进制计数器的进位输出carry_out是频率为1 Hz(即周期为1秒)的另一个新的时钟信号,可以将其连接到下一个60进制计数器的时钟输入端口上,作为秒的计数精确度产生时钟,其输出是每隔1秒加1的,因此要将其输出cq显示到数码管上,作为“秒”单位的显示。相同的,这个60进制计数器的进位

出carry_out也是一个周期为1分钟的新的时钟信号,将它作为下一个60进制计数器的时钟输入,该计数器的输出就事“分”的计数输出。 显示模块:该模块的功能是把三个计数器输出的八位标准逻辑矢量数据转化为能直接在八段数码管上显示的数据(类型)。由于三个输出数据用十进制数表示时,可能为个位数(0~9),也可能为十位数(10~99或59),而且三组数据可能不会同时显示在六位八段数码管上,因此我们需要用s=0、1、2、3、4、5(或selout=000001、000010、000100、001000、010000、100000)来控制第一至第六个数码管显示数据,用en=001、010、100来控制数码的十位数上的数字,后四位表示数据的个位数数字,把BCD码表示的数据的前四位显示到第六、第四、第二位数码管上,表示各位数据的十位上的数字,把后四位BCD码根据需要显示到第五、第三,第一位数码管显示0.01秒、秒和分位。将要显示的数据分别用用8位BCD码表示,则前四位代表数据管上,表示各位数据的个位上的数字。

四、 硬件设计

4.1 数码管显示部分

秒表的显示部分非常简单,对显示部分的要求不是很高,因此在设计时,选择简便的数码管显示即可。

本文采用两个四位LED数码管来进行显示计时时间。其中数码管的显示可分为两种:静态显示和动态显示。静态显示的段选和位选均单独连接,因此占用的I/O接口多,无法扩展多个数码管,在这种采用这种方式下必须要给LED恒定的电压,要求电压一直保持,所以一般在LED和单片机之间加锁存器,这种显示方式亮度高,编程较简单,结构清晰,管理也较简单,占用的CPU时间少。动态显示的基本原理在于分时轮流选通数码管的公共端,使得各数码管轮流导通。只要每个扫描频率超过人的眼睛视觉暂留频率24Hz以上,就可以达到点亮单个数码管,却能享有八个同时显示的是视觉效果,而且显示也不致闪烁抖动。动态驱动是将所有数码管的8个显示笔划\"a,b,c,d,e,f,g,dp\"的同名端连在一起,另外为每个数码管的公共端COM增加位选通控制电路,位选通由各自的I/O线控制。四位数码管引脚排布如图1所示:

图1 四位数码管引脚排布

4.2电源部分

图2 电源部分原理图

4.3晶体振荡

五、 软件设计

首先需要获得一个比较精确的计时基准信号,这里是周期为100Hz的计时脉冲。其次除了对每一个计时器需要设置清零信号输入外,还需要在六个计数器设置时钟始能信号,即计时允许信号,以便作为秒表的的计时起停开关因此数字秒表可由一个分频器、四个十进制计数器以及两个六进制计数器组成,如下图所示。

电路逻辑图

秒表设计的VHDL语言源代码

1MHz晶振经10000分频产生100Hz: library ieee;

use ieee.std_logic_11.all; entity f10000 is

port(clk:in std_logic;

q10000:out std_logic); end f10000;

architecture art of f10000 is

signal cnt:integer range 0 to 10#9999#;

begin

process(clk) begin

if clk'event and clk='1'then if cnt=10#9999# then cnt<=0;

else cnt<=cnt+1; end if; end if; end process; process(cnt) is begin

if cnt=10#9999# then q10000<='1'; else q10000<='0'; end if; end process;

end architecture art; 十进制计数器 library ieee;

use ieee.std_logic_11.all; use ieee.std_logic_unsigned.all; entity cnt10 is

port(clk:in std_logic; clr:in std_logic; en:in std_logic;

count10:out std_logic_vector(3 downto 0); carry_out:out std_logic); end entity cnt10;

architecture art of cnt10 is

signal scount10: std_logic_vector(3 downto 0); begin

process(clk,clr,en) is begin

if(clr='1') then scount10<=\"0000\"; else if clk'event and clk='1' then if(en='1') then

if scount10=\"1001\" then scount10<=\"0000\";

else scount10<=scount10+'1'; end if; end if; end if; end if;

end process;

process(scount10) is begin

if scount10=\"0000\" then carry_out<='1'; else carry_out<='0'; end if; end process;

count10<=scount10; end architecture art; 六进制计数器 library ieee;

use ieee.std_logic_11.all; use ieee.std_logic_unsigned.all; entity cnt6 is

port(clk:in std_logic; clr:in std_logic; en:in std_logic;

count6:out std_logic_vector(3 downto 0); carry_out:out std_logic); end entity cnt6;

architecture art of cnt6 is

signal scount6: std_logic_vector(3 downto 0); begin

process(clk,clr,en) is begin

if(clr='1') then scount6<=\"0000\"; else if clk'event and clk='1' then if(en='1') then

if scount6=\"0101\" then scount6<=\"0000\";

else scount6<=scount6+'1'; end if; end if; end if; end if; end process;

process(scount6) is begin

if scount6=\"0000\" then carry_out<='1'; else carry_out<='0'; end if; end process;

count6<=scount6; end architecture art; 开始/停止程序 library ieee;

use ieee.std_logic_11.all; use ieee.std_logic_unsigned.all; entity key is

port( clk,k :in std_logic ; en :out std_logic); end key;

architecture one of key is type my_state is(s0,s1,s2,s3); signal state: my_state; begin

process(clk) begin

if clk'event and clk='1' then case state is

when s0=>if k='1' then state<=s0; else state<=s1; end if;

when s1=>if k='0' then state<=s1; else state<=s2; end if;

when s2=>if k='1' then state<=s2; else state<=s3; end if;

when s3=>if k='0' then state<=s3; else state<=s0; end if;

when others=>null; end case; end if; end process; process(clk) begin

if clk'event and clk='1' then case state is

when s0=>en<='0'; when s1=>en<='1'; when s2=>en<='1'; when s3=>en<='0'; when others=>en<='0'; end case;

end if; end process; END one; 数码管位选 library ieee;

use ieee.std_logic_11.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity seltime1 is

port(clk:in std_logic;

s_10ms:in std_logic_vector(3 downto 0); s_100ms:in std_logic_vector(3 downto 0); s_1s:in std_logic_vector(3 downto 0); s_10s:in std_logic_vector(3 downto 0); s_1min:in std_logic_vector(3 downto 0); s_10min:in std_logic_vector(3 downto 0); sel:out bit_vector(5 downto 0);

daout:out std_logic_vector(3 downto 0)); end seltime1;

architecture fun of seltime1 is signal sum:integer range 0 to 5; begin

process(clk) begin

if(clk'event and clk='1')then if(sum>5)then sum<=0; else

sum<=sum+1; end if; end if; case sum is

when 0=>sel<=\"000001\";daout<=s_10ms; when 1=>sel<=\"000010\";daout<=s_100ms; when 2=>sel<=\"000100\";daout<=s_1s; when 3=>sel<=\"001000\";daout<=s_10s; when 4=>sel<=\"010000\";daout<=s_1min; when 5=>sel<=\"100000\";daout<=s_10min; when others=>null; end case; end process; end fun;

数码管显示部分 library ieee;

use ieee.std_logic_11.all; entity dec7s is

port(dain:in std_logic_vector(3 downto 0); dec7s:out bit_vector(6 downto 0)); end dec7s;

architecture one of dec7s is begin

process(dain) begin

case dain is

when\"0000\"=>dec7s<=\"1000000\"; when\"0001\"=>dec7s<=\"1111001\"; when\"0010\"=>dec7s<=\"0100100\"; when\"0011\"=>dec7s<=\"0011000\"; when\"0100\"=>dec7s<=\"0011001\"; when\"0101\"=>dec7s<=\"0010010\"; when\"0110\"=>dec7s<=\"0000010\"; when\"0111\"=>dec7s<=\"1111000\"; when\"1000\"=>dec7s<=\"0000000\"; when\"1001\"=>dec7s<=\"0010000\"; when others=>null; end case; end process; end one;

六、 功能测试

10000分频仿真

十进制计数器仿真

六进制计数器仿真

数据选择器仿真

数码管显示仿真

七、 小结

开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。在编程时,我充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。

本次课程设计是我到目前为止觉得受益匪浅也是收获最大的一次实习。身为电信专业的学生,设计是我们将来必需具备的技能。而这次课程设计恰恰给我们提供了一个应用自己所学知识去勇于创新和实践的平台。从通过理论设计,到仿真软件仿真,再到确定具体方案,再到安装实际电路,最后到调试电路、成型。整个过程都需要我充分利用所学的知识进行思考、借鉴。可以说,本次课程设计是针对前面所学的知识进行的一次比较综合的检验。总的来说,这次课程设计虽然很累,但却是苦中有乐,非常充实。在这次实习中,正确的思路是很重要的,只有你的设计思路是正确的,那你的设计才有可能成功。 因此我们在设计前必须做好充分的准备,认真查找详细的资料,为我们设计的成功打下坚实的基础,所以跑图书馆和上网查资料成为了我每天的必修课。 本次课程设计不仅培养了我们的科学严谨的学习态度,使我们认识到不管做任何事都要

付出一定的努力,才会有大的收获。相信这次课程设计过后,我们的理论水平和实践动手能力都会有一个质的飞跃,也为今后的实践课程及毕业设计打下了坚实的基础。要做好本次的课程设计,熟练地掌握课本上的理论知识是前提。这样才能对试验中出现的问题进行一定的分析和解决。

当然能完成本次设计,更离不开老师辛勤地指导,老师能在百忙中来指导我,每当我遇到了棘手的问题,老师总能给我最好的建议,教我改进得方法,不厌其烦地指出我在设计中存在的问题和错误,使我能更好地完成设计。正是老师不厌其烦的指导和每天下午的讲解,让我的设计思路越发清晰,明朗,清除了应该从哪些方面着手,工作。终于有了这次课程设计作品的诞生,兴奋之余也开始对今后的学习奋斗目标有了比较明确的规划,感谢老师让我顺利完成了这次的课程设计,虽然整个过程很辛苦,却是苦中有乐!

在这次设计中,在胡老师的指导下才能很好的完成任务,在此,非常感谢刘老师的指导和同学的帮助。

八、实物图

参考文献

[1] EDA技术及应用(第二版) 谭会生 张昌凡编著 西安电子科技大学出版社 [2]曹昕燕等编著.EDA技术实验与课程设计.北京:清华大学出版社.2006 [3]江国强编著.可编程逻辑器件实验.北京:电子工业出版社.2005

我们按照程序输入没有实现,说是写的程序太大了,输不进去,强悍的你可以改一改。。。

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

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

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

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