资源描述
东 北 石 油 大 学
课 程 设 计
课 程 EDA技术课程设计
题 目 闹钟系统设计
院 系 电子科学学院
专业班级 电子信息工程
学生姓名 许鹤强
学生学号 090901140323
指导教师
2013年 3 月8日
东北石油大学课程设计任务书
课程 EDA技术课程设计
题目 闹钟系统的设计
专业 电子信息工程 姓名 许鹤强 学号 090901140323
主要内容、基本要求、主要参考资料等
主要内容:
设计并制作一个带闹钟功能的24小时计时器。它包括以下几个组成部分:
1、显示屏,由4 个七段数码管组成,用于显示当前时间(时:分)或设置的闹钟时间;
2、数字键,实现‘0’—‘9’的输入,用于输入新的时间或新的闹钟时间;
3、TIME(时间)键,用于确定新的时间设置;
4、ALARM(闹钟)键,用于确定新的闹钟时间设置,或显示已设置的闹钟时间;
5、扬声器,在当前时钟时间与闹钟时间相同时,发出蜂鸣声
基本要求:
1、计时功能:这是本计时器设计的基本功能,每隔一分钟计时一次,并在显示屏上显示当前时间。
2、闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声。
3、设置新的计时器时间:用户用数字键输入新的时间,然后按"TIME"键确认。在输入过程中,输入数字在显示屏上从右到左依次显示。例如,用户要设置新的时间12:34,则按顺序输入“1”,“2”,“3”,“4”,与之对应,显示屏上依次显示的信息为:“1”,“12”,“123”,“1234"。如果用户在输入任意几个数字后较长时间内,例如5 s,没有按任何键,则计时器恢复到正常的计时显示状态。
主要参考资料:
[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.
[2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.
[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.
完成期限 2013.3.8
指导教师
专业负责人
2013年 3月4日
一、设计思想
1.基本原理
数字闹钟电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计时,当计时到23时59分59秒时,再来一个计数脉冲,则计数器清零,重新开始计时。秒计数器的计数时钟CLK为1Hz的标准信号。当数字闹钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6个数码管来动态显示。数字闹钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信号md1、md2控制数字钟的工作状态,即控制数字钟,使其分别工作于正常计时,调整分、时和设定闹钟分、时5个状态。当数字闹钟处于计时状态时,3个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字闹钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于闹钟定时状态时,可以设定小时和分;当计时到所设定的时刻时,speak将会被赋予时钟信号,持续1分钟。
设定按键
时钟1Hz
按键UPDN
功能切换寄存器
时钟10Hz
时钟计数寄存器
闹钟设定寄存器
闹钟控制电路
模式切换数据选择
蜂鸣器
扫描技术字符译码
扫描时钟320Hz
数码显示
2.设计框图
二、 设计步骤和调试过程
YES
ALARM_BUTTON LEDW[2..0]
TIME_BUTTON SEG7[7..0]
CLK SOUND_ALARM
RESET
CLOCK
1、总体设计电路
计时器的外部端口
根据该数字闹钟的设计要求,我们可得到其外部端口如图所示。各个输入/输出端口的作用如下:
(1)CLK为外部时钟信号,RESET为复位信号。
(2)当YES为高电平时(YES=‘1’),表示用户选择了某个预置数字。
(3)当ALARM_BUTTON为高电平时,表示用户按下ALARM键。
(4)当TIME_BUTTON为高电平时,表示用户按下TIME键。
(5)SEG7是数据动态扫描显示的公共八段数码显示管驱动端,而LEDW则是数码管的位选择端,它经过外接的3—8译码器译码后接数码管的公共端COM。
(6)SOUND_ALARM用于控制扬声器发声,当SOUND_ALARM = ‘1’时,扬声器发出蜂鸣,表示到了设定的闹钟时间。
2、模块设计和相应模块程序
1) 秒计数模块SECOND
60进制,带有进位和清零功能的,输入为1Hz脉冲和低电平有效的清零信号CLR,输出秒个位、时位及进位信号CO。
2) 分计数模块MINUTE
60进制,带有进位和置数功能的,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个位、时位及进位信号CO。
3) 时计数模块HOUR
24进制,输入为1Hz脉冲和高电平有效的使能信号EN,输出分个位、时位。
4) 扫描模块SELTIME
输入为秒(含个/十位)、分、时、扫描时钟CLK1K,输出为D和显示控制信号SEL。
5) 整点报时功能模块ALERT
输入为分/秒信号,输出为高频声控Q1K和Q500。
6) 译码显示功能模块DISPLAY
输入为D,输出为Q
秒模块程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity SECOND is
port(clk,clr:in std_logic;
sec1,sec0:out std_logic_vector(3 downto 0);
co:out std_logic);
end SECOND;
architecture SEC of SECOND is
begin
process(clk,clr)
variable cnt1,cnt0:std_logic_vector(3 downto 0);
Begin
if clr='1' then
cnt1:="0000";
cnt0:="0000";
elsif clk'event and clk='1' then
if cnt1="0101" and cnt0="1000" then
co<='1';
cnt0:="1001";
elsif cnt0<"1001" then
cnt0:=cnt0+1;
else
cnt0:="0000";
if cnt1<"0101" then
cnt1:=cnt1+1;
else
cnt1:="0000";
co<='0';
end if;
end if;
end if;
sec1<=cnt1;
sec0<=cnt0;
end process;
end SEC;
分模块程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity MINUTE is
port(clk,en:in std_logic;
min1,min0:out std_logic_vector(3 downto 0);
co:out std_logic);
end MINUTE;
architecture MIN of MINUTE is
begin
process(clk,en)
variable cnt1,cnt0:std_logic_vector(3 downto 0);
begin
if clk'event and clk='1' then
if en='1' then
if cnt1="0101" and cnt0="1000" then
co<='1';
cnt0:="1001";
elsif cnt0<"1001" then
cnt0:=cnt0+1;
else
cnt0:="0000";
if cnt1<"0101" then
cnt1:=cnt1+1;
else
cnt1:="0000";
co<='0';
end if;
end if;
end if;
end if;
min1<=cnt1;
min0<=cnt0;
end process;
end MIN;
时模块程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity HOUR is
port(clk,en:in std_logic;
h1,h0:out std_logic_vector(3 downto 0));
end HOUR;
architecture hour_arc of HOUR is
begin
process(clk)
variable cnt1,cnt0:std_logic_vector(3 downto 0);
begin
if clk'event and clk='1' then
if en='1' then
if cnt1="0010" and cnt0="0011" then
cnt1:="0000";
cnt0:="0000";
elsif cnt0>="1001" then
cnt1:=cnt1+1;
cnt0:="0000";
else
cnt0:=cnt0+1;
end if;
end if;
end if;
h1<=cnt1;
h0<=cnt0;
end process;
end hour_arc;
扫描模块程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity SELTIME is
port(
clk:in std_logic;
sec1,sec0,min1,min0,h1,h0:in std_logic_vector(3 downto 0);
daout:out std_logic_vector(3 downto 0);
sel:out std_logic_vector(2 downto 0));
end SELTIME;
architecture fun of SELTIME is
signal count:std_logic_vector(2 downto 0);
begin
sel<=count;
process(clk)
begin
if(clk'event and clk='1') then
if(count>="101") then
count<="000";
else
count<=count+1;
end if;
end if;
case count is
when"000"=>daout<= sec0;
when"001"=>daout<= sec1;
when"010"=>daout<= min0;
when"011"=>daout<= min1;
when"100"=>daout<=h0;
when others =>daout<=h1;
end case;
end process;
end fun;
显示模块程序:
library ieee;
use ieee.std_logic_1164.all;
entity DISPLAY is
port(d:in std_logic_vector(3 downto 0);
q:out std_logic_vector(6 downto 0));
end DISPLAY;
architecture disp_are of DISPLAY is
begin
process(d)
begin
case d is
when"0000" =>q<="0111111";
when"0001" =>q<="0000110";
when"0010" =>q<="1011011";
when"0011" =>q<="1001111";
when"0100" =>q<="1100110";
when"0101" =>q<="1101101";
when"0110" =>q<="1111101";
when"0111" =>q<="0100111";
when"1000" =>q<="1111111";
when others =>q<="1101111";
end case;
end process;
end disp_are;
定时闹钟模块程序:
library ieee;
use ieee.std_logic_1164.all;
entity ALERT is
port(m1,m0,s1,s0:in std_logic_vector(3 downto 0);
clk:in std_logic;
q500,qlk:out std_logic);
end ALERT;
architecture sss_arc of ALERT is
begin
process(clk)
begin
if clk'event and clk='1' then
if m1="0101" and m0="1001" and s1="0101" then
if s0="0001" or s0="0011" or s0="0101" or s0="0111" then
q500<='1';
else
q500<='0';
end if;
end if;
if m1="0101" and m0="1001" and s1="0101" and s0="1001" then
qlk<='1';
else
qlk<='0';
end if;
end if;
end process;
end sss_arc;
3、仿真及仿真结果
秒模块仿真波形
分模块仿真波形
时模块仿真波形
扫描模块仿真波形
显示模块仿真波形
定时闹钟模块仿真波形
4、实验调试结果
为验证所设计程序是否正确,将程序下载进行硬件测试。在QuartusⅡ开发环境中进行管脚锁定,连接好数码管驱动电路,然后将目标文件下载到器件中。最终可以看到时、分、秒正常显示。
三、结论及心得体会
本次课程设计的完成令我受益匪浅,通过对数字闹钟的设计,让我学会了初步掌握了简单课程设计的分析方法。最重要的是增强了动手能力和根据自己所学需要查阅资料的能力,以及自己分析和解决问题的能力,整个制作的过程中,它促进了同学之间的相互沟通,也让我在自己的专业知识的学习过程中,更多的,更好的学习一门知识,用于以后的实践应用中,做这个数字钟的设计中包含了很多不同功能的程序,让我在其中学到了一些程序的中的思路,特别一步一步去把错误的程序改正确是一种很有成就感的事,这样让我学到了更多的知识,同时使我对所学知识有了更新的认识和更大的兴趣。
参考资料
[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.
[2] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.
[3] 侯继红, 李向东主编.EDA实用技术教程. 北京:中国电力出版社,2004.
10
东北石油大学课程设计成绩评价表
课程名称
EDA技术课程设计
题目名称
闹钟系统设计
学生姓名
许鹤强
学号
090901140323
指导教师姓名
职称
序号
评价项目
指 标
满分
评分
1
工作量、工作态度和出勤率
按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。
20
2
课程设计质量
课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。
45
3
创新
工作中有创新意识,对前人工作有一些改进或有一定应用价值。
5
4
答辩
能正确回答指导教师所提出的问题。
30
总分
评语:
指导教师: 2013年 3 月 11 日
展开阅读全文