数字电子时钟程序与仿真

合集下载

基于Proteus的单片机控制电子时钟电路设计与仿真

基于Proteus的单片机控制电子时钟电路设计与仿真
从节省单片机芯片I/O口和降低能耗的角度出发,本数字电子钟数码管显示选择采用方案二。
3.3
1.电源电路
本数字电子钟设计所需电源电压为直流、电压值大小为5V的电压源。从硬件实物设计简易程度与经费方面考虑,用两节电压值为2.5V干电池与电路电压源引脚相连接即可达到硬件设计要求。即本数字电子钟设计用两节电压值大小2.55V干电池做硬件电路电压源。
由于只需要实现显示时间简单的功能,两个单片机就能很好的实现该功能。我们优先考虑单片机的成本所以选择方案一。
3.2
3
数码管是一种把多个LED显示段集成在一起的显示设备.有两种类型,一种是共阳型,一种是共阴型.共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商.阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP是小数点位段。而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。数码管显示方法可分为静态显示和动态显示两种。静态显示就是数码管的8段输入及其公共端电平一直有效。动态显示的原理是,各个数码管的相同段连接在一起,共同占用8位段引管线;每位数码管的阳极连在一起组成公共端。利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
方案二:AT89S52是一个低消耗,高性能CMOS8为单片机,片内含4kBytes ISP的可反复撰写1000次的Flash只读程序存储器。主要性能有:与MCS-51单片机产品兼容、全静态操作:0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程。

数字钟的设计与仿真-完整演示、功能强大

数字钟的设计与仿真-完整演示、功能强大

闹钟
计时
开关群
五、原理图的设计
2、计时原理
五、原理图的设计 2.1 秒信号的产生 由555 定时器 得到1Hz 的脉冲,功能主要是产生标准秒脉冲信 号和提供功能扩展电路所需要 的信号。 555计时器构成的多谐振荡器的工作原理:
它由分压器、比较器、基本R—S 触发器和放电三极管等部分组成。
五、原理图的设计
2.3 译码电路设计之星期的显示 关于星期的显示,本小组采用指示灯亮灭来指示星期。
五、原理图的设计
2.3 译码电路设计 星期显示的译码电路直接由基本门电路组成:
五、原理图的设计 2.4 整点报时功能原理
蜂 鸣 器
判断是 否 是否 为55秒 前50秒 后
五、原理图的设计
555计时器的内部结构图
A

A

五、原理图的设计
多谢振荡器的模拟电路图
五、原理图的设计
2.2 计数器模块原理 在数字钟的控制电路中,分和秒的控制都是一样的,都是由 一个十进制计数 器和一个六进制计数器串联而成的,在电路的设 计中我采用的是统一的器件 74LS161N 的反馈置数法来实现十进制 功能和六进制功能,根据74LS161 的结构 把输出端的0101 (十进 制为5)用一个与非门74LS00 引到Load 端便可置0,这 样就实现了 六进制计数。同样,在输出端的1001 (十进制为9)用一个与非门 74LS00 引到Load 端便可置0,这样就实现了十进制计数。在分和秒 的进位时, 用秒计数器的Load 端接分计数器的CLK控制时钟脉冲, 脉冲在上升沿来时计数 器开始计数。时计数器可由两个十进制计 数器串接并通过反馈接成二十四制计数器。
三、设计结果
我小组设计的数字钟已达到设计要求。可完成基本的计时功 能。 并设计有拓展项目:闹钟功能,计时部分添加星期的显示。

基于Multisim10电子数字钟的设计与仿真教材

基于Multisim10电子数字钟的设计与仿真教材

电子技术综合设计报告设计课题:电子数字钟的设计与仿真专业班级:电子信息工程学生姓名:指导教师:设计时间:电子数字钟的设计与仿真设计者指导教师摘要数字钟能经振荡器、计数器、译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来,并且需要校正电路使其准确工作,还可以有定时和报时功能。

研究数字钟及扩大其应用,有着非常现实的意义。

本文在Multisim基础上设计的数字钟,是由数字集成电路构成、用数码管显示。

关键词数字钟振荡器计数器译码显示仿真引言数字钟是一种用数字电路技术实现时、分、秒计时的装置,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播。

而且与传统的机械钟相比,它具有走时准确、显示直观、无机械传动、无需人的经常调整等优点。

数字钟的设计涉及到模拟电子与数字电子技术,其中绝大部分是数字部分、逻辑门电路、数字逻辑表达式、计算真值表与逻辑函数间的关系、编码器、译码器显示等基本原理。

现在主要用各种芯片实现其功能,更加方便和准确。

Multisim 8作为一种高效的设计与仿真平台。

其强大的虚拟仪器库和软件仿真功能,为电路设计提供了先进的设计理念和方法。

1 设计任务与要求1.1设计+5V稳压电源;1.2用LED管显示时、分、秒;1.3具有校时功能;1.4具有整点报时功能;1.5具有闹钟功能;1.6应用Multisim仿真软件对电路进行关键元器件参数的选择、主要功能特性的仿真与电路特性分析。

2 方案设计与论证该设计主要由以下几部分组成:震荡器、秒计数器、分计数器、时计数器、BCD-七段显示译码/驱动器、LED七段显示数码管、时间校准电路[3]。

数字钟数字显示部分,采用译码与二极管串联电路,将译码器、七段数码管连接起来,组成十进制数码显示电路,即时钟显示。

要完成显示需要6个数码管,八段的数码管需要译码器械才能显示,然后要实现时、分、秒的计时需要60进制计数器和24进制计数器,在在仿真软件中发生信号可以用函数发生器仿真,频率可以随意调整。

数字时钟的Multisim设计与仿真

数字时钟的Multisim设计与仿真

数字电子技术课程设计学院:信息工程学院班级:电气二班姓名:刘君宇张迪王应博数字时钟的Multisim设计和仿真一、设计和仿真要求学习综合数字电子电路的设计、实现?基础调研?应用设计、逻辑设计、电路设计?用Multisim软件验证电路设计?分析电路功能是否符合预期,进行必要的调试修改?撰写Project报告,提交Multisim?24???????显示精通过对软件Multisim的学习和使用,进一步加深了对数字电路的认识。

在仿真过程中遇到许多困难,但通过自己的努力和同学的帮助都一一克服了。

首先,连接电路图过程中,数码管不能显示,后经图形放大后才发现是电路断路了。

其次,布局的时候因元件比较多,整体布局比较困难,因子电路不如原电路直观,最后在不断努力下,终于不用子电路布好整个电路。

调试时有的器件在理论上可行,但在实际运行中就无法看到效果,所以得换不少器件,有时无法找出错误便更换器件重新接线以使电路正常运行。

在整个设计中,计数器的接线比较困难,反复修改了多次,在认真学习其用法后采用归零法和置数法设计出60进制和24进制的计数器。

同时,在最后仿真时,预置的频率一开始用的是1hz,结果仿真结果反应很慢,后把频率加大,这才在短时间内就能看到全部结果。

总之,通过这次对数字时钟的设计与仿真,为以后的电路设计打下良好的基础,一些经验和教训,将成为宝贵的学习财富。

数字电子技术基础感想(分工:完成24小时计时功能)本学期我们学习了数字电子技术基础这门课程,通过一学期的学习,我学习到了cmos门电路,ttl门电路,编码器,译码器,触发器和时序电路等数电专业的知识。

上学期接触过模拟电路的知识,在学习数电后,感受到了两门课很多相同又不同的地方。

老师在学期末给我们布置了一个作业,设计数字电路实现时钟功能的作业。

这次作业结合了大部分本学期所学习的知识,综合性极强。

我们在设计中应用了自动校时,并实现了闹钟的功能。

在扩展功能里,我们的时钟可以显示星期,可以整点报时,闹钟功能实现了彩铃响铃。

基于Proteus的数字电子钟的设计与仿真

基于Proteus的数字电子钟的设计与仿真

基于Proteus的数字电子钟的设计与仿真一、设计目的与要求 (1)二、设计内容与方案制定 (1)三、芯片简介 (1)1、AT89C52 (1)2、AT24C02 (2)四、设计步骤 (3)1、硬件电路设计 (3)1.1.硬件电路组成框图 (3)1.2.各单元电路及工作原理 (3)1.3.绘制原理图 (5)1.4.元件清单列表 (6)2、程序设计 (7)2.1程序流程 (7)2.2主程序 (9)2.2.源程序 (10)五、调试与仿真 (22)六、心得体会 (23)七、参考文献 (23)一、设计目的与要求设计目的:通过课程设计,培养学生运用已学知识解决实际问题的能力、查阅资料的能力、自学能力和独立分析问题、解决问题的能力和能通过独立思考。

设计要求:设计一个时、分可调的数字电子钟、断电后将数据保存,开启后时间将从断电后时间继续行走。

二、设计内容与方案制定具有校时功能,按键控制电路其中时键、分键六个键分别控制时、分时间的调整。

按下小时数实现对小时数加减,按下分钟数实现对分钟数进行加减,并设置有复位键,启始键。

以AT89C51单片机进行实现秒、分、时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。

通过AT24C02分别写入时、分、秒数据在断电后实现保存,在下次通电后将数据读出保持为断电前数据。

三、芯片简介1、AT89C52AT89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系2、AT24C02AT24C02支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传件为接收器。

数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。

主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,由于A0、A1和A2可以组成000~111八种情况,即通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上,通过进行不同的配置进行选择器件。

程序实例13:电子时钟VHDL程序与仿真

程序实例13:电子时钟VHDL程序与仿真

电子时钟VHDL程序与仿真1. 10进制计数器设计与仿真(1)10进制计数器VHDL程序--文件名:counter10.vhd。

--功能:10进制计数器,有进位C--最后修改日期:2004.3.20library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter10 isPort ( clk : in std_logic;reset : in std_logic;din : in std_logic_vector(3 downto 0);dout : out std_logic_vector(3 downto 0);c:out std_logic);end counter10;architecture Behavioral of counter10 issignal count : std_logic_vector(3 downto 0);begindout <= count;process(clk,reset,din)beginif reset='0'thencount <= din ;c<='0';elsif rising_edge(clk) thenif count = "1001" thencount <= "0000";c<='1';elsecount <= count+1;c<='0';end if;end if;end process;end Behavioral;(2)10进制计数器仿真2. 6进制计数器设计与仿真(1)6进制计数器VHDL程序--文件名:counter6.vhd。

数字钟系统电路的设计方案与仿真分析

数字钟系统电路的设计方案与仿真分析

数字钟系统电路的设计方案与仿真分析
在电子技术实验教学中,构建学生的电路设计理念,提高学生的电路设计能力,是教学的根本目的和核心内容。

数字钟电路的设计和仿真,涉及模拟电子技术、数字电子技术等多方面知识,能够体现实验者的理论功底和设计水平,是电子设计和仿真教学的典型案例。

文中采用了555 定时器电路、计数电路、译码电路、显示电路和时钟校正电路,来实现该电路。

1 系统设计方案
数字钟由振荡器、分频器、计时电路、译码显示电路等组成。

振荡器是数字钟的核心,提供一定频率的方波信号;分频器的作用是进行频率变换,产生频率为1 Hz 的秒信号,作为是整个系统的时基信号; 计时电路是将时基信号进行计数;译码显示电路的作用是显示时、分、秒时间;校正电路用来对时、分进行校对调整。

其总体结构图,如图1 所示。

2 子系统的实现
2.1 振荡器
本系统的振荡器采用由555 定时器与RC 组成的多谐振荡器来实现,如图2 所示即为产生1 kHz 时钟信号的电路图。

此多谐振荡器虽然产生的脉冲误差较大,但设计方案快捷、易于实现、受电源电压和温度变化的影响很小。

2.2 分频器
由于振荡器产生的频率高,要得到标准的秒信号,就需要对所得到的信号进行分频。

在此电路中,分频器的功能主要有两个:1)产生标准脉冲信号;2)提供电路工作需要的信号,比如扩展电路需要的信号。

通常实现分频器的电路是计数器电路,选择74LS160 十进制计数器来完成上述功能[5]。

如图3 所示,555 定时器产生1 kHz 的信号,经过3 次1/10 分频后得到1 Hz 的脉冲信号,为秒个位提供标准秒脉冲信号。

数字钟的设计与仿真

数字钟的设计与仿真

综合实践(论文)题目数字钟学院通信与电子工程学院专业班级学生姓名学生学号指导教师摘要:本次设计主要是利用数字电路实验箱上的74LS160、555定时器、74LS00与七段显示译码器设计简易数字钟,实现准确计时,以数字形式显示时、分、秒的时间和校时功能。

由于采用纯数字硬件设计制作,与传统机械表相比,它具有走时准、显示直观、无机械传动装置等特点。

它的小时周期为12,分和秒的周期为60。

关键字:数字时钟时计数器分计数器秒计数器校时器目录摘要: (I)第1章绪论 (1)1.1 设计要求 (1)1.2 设计任务 (1)第2章总体框图 (2)2.1 总体框图 (2)2.2 设计思路及模块功能 (2)第3章选择器件 (3)3.1 74LS160(本实验需要6片) (4)3.2 74LS04(本实验需要1片) (6)3.3 74LS00(本实验需要2片) (7)3.4 74LS20(本实验需要1个) (8)3.5 LED(本实验需要6个) (9)3.6 三极管8099(本实验需要1个) (11)3.7 小灯泡(本实验需要1个) (11)第4章功能模块 (13)4.1 秒脉冲发生器 (13)4.2 计数译码显示 (13)4.3 整点报时电路 (17)第 5章总体设计电路图 (19)结论 (21)参考文献 (22)附录 (23)第1章绪论1.1 设计要求能进行正常的时,分,秒计时功能,分别由6个数码管显示24h,60min,60s.Sb键进行校时:按下Sh键时,时计数器一秒速度递增,并按24循环,记满23后再回00.Sm键进行校分:按下Sm键时,分计时器以秒速度递增,并按60计数循环,记满59后再回00,但不能向“时”进位。

Sc键进行秒清零:按下Sc键时,可对秒清零。

扬声器整点报时:当计时器达59'51、59'53、59'55及59'57时,鸣叫声频率为500Hz;到达59'59是为最后一声整点报时,频率为1k Hz。

数字时钟的Multisim设计与仿真

数字时钟的Multisim设计与仿真

电子电路Multisim设计和仿真学院:专业和班级:姓名:学号:数字时钟的Multisim设计和仿真一、设计和仿真要求学习综合数字电子电路的设计、实现和调试1.设计一个24或12小时制的数字时钟。

2. 要求:计时、显示精确到秒;有校时功能。

采用中小规模集成电路设计。

3.发挥:增加闹钟功能。

二、总体设计和电路框图1. 设计思路1).由秒时钟信号发生器、计时电路和校时电路构成电路。

2).秒时钟信号发生器可由555定时器构成。

3).计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。

4).校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。

2. 电路框图图1. 数字钟电路框图三、子模块具体设计1. 由555定时器构成的1Hz秒时钟信号发生器。

由下面的电路图产生1Hz的脉冲信号作为总电路的初输入时钟脉冲。

图2. 时钟信号发生电路2.分、秒计时电路及显示部分在数字钟的控制电路中,分和秒的控制都是一样的,都是由一个十进制计数器和一个六进制计数器串联而成的,在电路的设计中我采用的是统一的器件74LS160D的反馈置数法来实现十进制功能和六进制功能,根据74LS160D的结构把输出端的0110(十进制为6)用一个与非门74LS00引到CLR端便可置0,这样就实现了六进制计数。

由两片十进制同步加法计数器74LS160级联产生,采用的是异步清零法。

显示部分用的是七段数码管和两片译码器74LS48D。

图3. 分秒计时电路3. 时计时电路及显示部分由两片十进制同步加法计数器74LS160级联产生,采用的是同步置数法,u1输出端为0011(十进制为3)与u2输出端0010(十进制为2)经过与非门接两片的置数端。

显示部分用的是七段数码管和两片译码器74LS48D。

图6. 整体电路图五、仿真结果1. 1hz脉冲产生电路仿真振荡器可由晶振组成,也可以由555与RC组成的多谐振荡器。

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告

电子设计自动化(EDA)—数字时钟LED数码管显示二、实验内容和实验目的1. 6个数码管动态扫描显示驱动2. 按键模式选择(时\分\秒)与闹钟(时\分)调整控制,3. 用硬件描述语言(或混合原理图)设计时、分、秒计数器模块、闹钟模块、按键控制状态机模块、动态扫描显示驱动模块、顶层模块。

要求使用实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒;要求模式按键和调整按键信号都取自经过防抖处理后的按键跳线插孔。

实验目的: 1)学会看硬件原理图, 2)掌握FPGA硬件开发的基本技能3)培养EDA综合分析、综合设计的能力三、实验步骤、实现方法(或设计思想)及实验结果主要设备: 1)PC机, 2)硬件实验箱, 3)Quartus II软件开发平台。

1.打开Quartus II , 连接实验箱上的相关硬件资源, 如下图1所示。

2.建立新文件, 选择文本类型或原理图类型。

3. 编写程序。

4.编译5. 仿真, 加载程序到芯片, 观察硬件输出结果(数码管显示)6.结果正确则完成。

若结果不正确, 则修改程序, 再编译, 直到正确。

模24计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count24 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count24;ARCHITECTURE arc OF count24 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,en)BEGINhh<=a;hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0010" AND b="0011") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;IF(a="0010" AND b="0010") THENcout<='1';ELSE cout<='0';END IF;END IF;END IF;END PROCESS;END arc;模60计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count60 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count60;ARCHITECTURE arc OF count60 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL sout:STD_LOGIC;BEGINPROCESS(clk)BEGINhh<=a; hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0101" AND b="1001") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;END IF;END IF;END PROCESS;sout<='1' WHEN a="0101" AND b="1001" ELSE '0';cout<=sout AND en;END arc;4-7显示译码模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY segment4to7 ISPORT(s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g:OUT STD_LOGIC);END segment4to7;ARCHITECTURE arc OF segment4to7 IS SIGNAL y:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINa<= y(6);b<= y(5);c<= y(4);d<= y(3);e<= y(2); f<= y(1);g<= y(0);PROCESS(s)BEGINCASE s ISWHEN "0000"=>y<="1111110"; WHEN "0001"=>y<="0110000"; WHEN "0010"=>y<="1101101"; WHEN "0011"=>y<="1111001"; WHEN "0100"=>y<="0110011"; WHEN "0101"=>y<="1011011"; WHEN "0110"=>y<="1011111"; WHEN "0111"=>y<="1110000"; WHEN "1000"=>y<="1111111"; WHEN "1001"=>y<="1111011"; WHEN OTHERS=>y<="0000000"; END CASE;END PROCESS;END arc;带闹钟控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mode_adjust_with_alarm ISPORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END mode_adjust_with_alarm;ARCHITECTURE arc OF mode_adjust_with_alarm ISTYPE mystate IS (s0,s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS (c_state)BEGINCASE c_state ISWHEN s0=> next_state <= s1; clkh<=clk1hz; clkm<=clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="000";WHEN s1=> next_state <= s2; clkh<=adjust; clkm<= '0'; clks<='0';enh<='1'; enm<='0';enha<='0'; clkh_a<= '0';clkm_a<= '0'; mode_ss <="001";WHEN s2=> next_state <= s3; clkh<= '0'; clkm<=adjust; clks <= '0';enh<='0';enm<='1';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="010";WHEN s3=> next_state <= s4; clkh<= '0'; clkm<= '0'; clks<=adjust;enh<='0'; enm<='0';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="011";WHEN s4=> next_state <= s5; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0';enm<='0';enha<='1'; clkh_a<=adjust; clkm_a<= '0'; mode_ss <="100";WHEN s5=> next_state <= s0; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<=adjust; mode_ss <="101";END CASE;END PROCESS;PROCESS (mode)BEGINIF (mode'EVENT AND mode='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;扫描模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END scan;ARCHITECTURE arc OF scan ISTYPE mystate IS (s0, s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS ( c_state )BEGINCASE c_state ISWHEN s0=> next_state <=s1; ss<="010";WHEN s1=> next_state <=s2; ss<="011";WHEN s2=> next_state <=s3; ss<="100";WHEN s3=> next_state <=s4; ss<="101";WHEN s4=> next_state <=s5; ss<="110";WHEN s5=> next_state <=s0; ss<="111";END CASE;END PROCESS;PROCESS (clk256hz)BEGINIF (clk256hz'EVENT AND clk256hz='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;复用模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END mux;ARCHITECTURE arc OF mux ISSIGNAL a,hhtmp,hltmp,mhtmp,mltmp,shtmp,sltmp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(mode_ss)BEGINCASE mode_ss ISWHEN "000"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "001"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "010"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "011"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "100"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN "101"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN OTHERS=>hhtmp<="0000";hltmp<="0000";mhtmp<="0000";mltmp<="0000";shtmp<="0000";sltmp<="0000"; END CASE;END PROCESS;PROCESS(ss)BEGINCASE ss ISWHEN "010"=> a <=hhtmp;WHEN "011"=> a <=hltmp;WHEN "100"=> a <=mhtmp;WHEN "101"=> a <=mltmp;WHEN "110"=> a <=shtmp;WHEN "111"=> a <=sltmp;WHEN OTHERS => a <="0000";END CASE;y<=a;END PROCESS;alarm<='1' WHEN ((hh=hha)AND(hl=hla)AND(mh=mha)AND(ml=mla)) ELSE '0';END arc;闪烁模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY blink_control ISPORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END blink_control;ARCHITECTURE arc OF blink_control ISBEGINPROCESS (ss,mode_ss)BEGINIF(ss="010" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="110" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="111" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="010" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="101") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="101") THEN blink_en<='1';ELSE blink_en<='0';END IF;END PROCESS;END arc;Top文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY design3 ISPORT (mode,adjust,clk1hz,clk2hz,clk256hz,clk1khz:IN STD_LOGIC;alarm,a,b,c,d,e,f,g:OUT STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END design3;ARCHITECTURE arc OF design3 ISCOMPONENT mode_adjust_with_alarm PORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT scan PORT (clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT segment4to7 PORT (s: IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g: OUT STD_LOGIC);END COMPONENT;COMPONENT mux PORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END COMPONENT;COMPONENT blink_control PORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END COMPONENT;COMPONENT count24 PORT (clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT count60 PORT (clk ,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNALclkh,enh,clkm,enm,clks,clkh_a,clkm_a,coutm,couts,coutm_en,couts_en,cout,vcc,coutma_en,coutma,alarm1,bli nk_en,blink_tmp,enha: STD_LOGIC;SIGNAL mode_ss,ss1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,y,i:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINvcc<='1';coutm_en <= enh OR coutm;couts_en <= enm OR couts;coutma_en<= enha OR coutma;blink_tmp<=blink_en and clk2hz;i(3)<=y(3) OR blink_tmp;i(2)<=y(2) OR blink_tmp;i(1)<=y(1) OR blink_tmp;i(0)<=y(0) OR blink_tmp;ss<=ss1;alarm<=alarm1 AND clk1khz;u1:mode_adjust_with_alarmPORT MAP( adjust,mode,clk1hz,clkh,enh,clkm,enm,clks,enha,clkh_a,clkm_a,mode_ss);u2:count24 PORT MAP(clkh,coutm_en,cout,hh,hl);u3:count60 PORT MAP(clkm,couts_en,coutm,mh,ml);u4:count60 PORT MAP(clks,vcc,couts,sh,sl);u5:count24 PORT MAP(clkh_a,coutma_en,cout,hha,hla);u6:count60 PORT MAP(clkm_a,vcc,coutma,mha,mla);u7:mux PORT MAP(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,ss1,mode_ss,y,alarm1);u8:scan PORT MAP(clk256hz,ss1);u9:blink_control PORT MAP(ss1,mode_ss,blink_en);u10:segment4to7 PORT MAP(i,a,b,c,d,e,f,g);END arc;实验结果:数字钟包括正常的时分秒计时, 实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒。

基于proteus的数字电子钟的仿真设计

基于proteus的数字电子钟的仿真设计

基于p r o t e u s的数字电子钟的仿真设计文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]课程论文题目:基于Proteus的数字电子钟的设计与仿真课程名称:单片机系统设计与Proteus仿真学生姓名:马珂学生学号: 23系别:电子工程学院专业:通信工程年级: 13级任课教师:徐锋电子工程学院2015年5月目录24六、4基于Proteus的数字电子钟的设计与仿真一、设计目的与要求设计目的:通过课程设计,培养学生运用已学知识解决实际问题的能力、查阅资料的能力、自学能力和独立分析问题、解决问题的能力和能通过独立思考。

设计要求:设计一个时、分可调的数字电子钟、开机显示“9-58-00”。

二、设计内容与方案制定具有校时功能,按键控制电路其中时键、分键两个键分别控制时、分时间的调整。

按分键分加1;按时键时加1。

以AT89C51单片机进行实现秒、分、时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。

三、设计步骤1、硬件电路设计.硬件电路组成框图.各单元电路及工作原理(1)晶振电路单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。

本系统中AT89C51单片机采用内部时钟方式。

采用外接晶体和电容组成的并联谐振回路。

其电路图如下:(2)键盘控制电路键盘可实现对时间的校对,用两个按键来实现。

按时键来调节小时的时间,按分键来调节分针的时间。

其电路连接图如下:(3)显示电路LED显示器是现在最常用的显示器之一发光二极管(LED)分段式显示器由7条线段围成8字型,每一段包含一个发光二极管。

外加正向电压时二极管导通,发出清晰的光。

只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。

显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,采用动态显示方式显示时间,其硬件连接方式如下图所示。

.绘制原理图其计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。

数字电子时钟程序与仿真

数字电子时钟程序与仿真

数字电子时钟程序【闹铃(持续5s),整点报时(几点报几下,每两下之间隔间2s,每声持续2s)】程序:#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int〃此表为LED的字模,共阴数码管0-9 -uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; 〃段码控制/*定义并初始化变量*/sbit key1=P3A0;sbit key2=P3A1;sbit key3=P3A2;sbit key4=P3A3;sbit buzz=P1A3;uchar mstcnt=0;〃定时器计数,定时50ms,mstcnt 满20,秒加 1uchar seconde1=0;uchar bjcs;uchar minite1=0;uchar hour1=7;uchar seconde2=0;uchar minite2=0;uchar hour2=8;uchar temp1=0;uchar temp2=0;uchar count1,flag,temp;/*函数声明*/void delay(uint z); //延时子程序void time_pro(); 〃时间处理子程序void display(uchar hour,uchar minite,uchar seconde);湿示子程序void keyscan( ); //键盘扫描子程序void zhengdian();void dinshi();void delay(uint z){uint x,y;for(x=0;x<z;x++) for(y=0;y<110;y++);void time_pro(void) /* 时间处理子程序*/(if(seconde1==60)(seconde1=0;minite1++;if(minite1==60)(minite1=0;hour1++;if(hour1==24)hour1=0;} _void display(uchar hour,uchar minite,uchar seconde) /* 显示子程序*/ ( uchar h1,h2,m1,m2,s1,s2;s2=seconde/10;s1=seconde%10;m2=minite/10;m1=minite%10;h2=hour/10;h1=hour%10;P2=0XFE; 〃1111 1110if(temp1==1) //功能选项,通过点提醒来调节相应位的时间P0=dispcode[s1]|0x80; //点提醒elseP0=dispcode[s1];//秒个位delay(1);P2=0XFD;//1111 1101P0=dispcode[s2];//秒十位delay(1);P2=0XFB; //1111 1011 P0=dispcode[10];〃间隔符- delay(1);P2=0XF7; 〃1111 0111 if(temp1==2)// P0=dispcode[m1]|0x80; elseP0=dispcode[m1];〃分个位delay(1);P2=0XEF; //1110 1111P0=dispcode[m2];//^+fe delay(1);P2=0XDF; 〃1101 1111P0=dispcode[10];〃间隔符- delay(1);P2=0XBF; //1011 1111 if(temp1==3)P0=dispcode[h1]|0x80;//时个位elseP0=dispcode[h1]; delay(1);P2=0X7F; //0111 1111P0=dispcode[h2];//时十位delay(1);void keyscan(void) /*键盘扫描子程序*/ (if(key1==0)(delay(10);if(key1==0)//TR0=0;temp1++;if(temp1==4){temp1=0;TR0=1;)while(!key1)switch(temp2){case 0:display(hour1,minite1,seconde1);break;case 1:display(hour2,minite2,seconde2);break;if(key2==0) {delay(10);if(key2==0)if(temp2==0) 〃闹钟选择键{//TR0=0; switch(templ){ case 1:seconde1++;if(seconde1==60)seconde1=0;break; case2:minite1++;if(minite1==60)minite1=0;break;case 3:hour1++;if(hour1==24)hour1=0;break; } while(!key2) display(hour1,minite1,seconde1);} if(temp2==1){ TR0=1;switch(temp1){ case 1:seconde2++;if(seconde2==60)seconde2=0;break; case2:minite2++;if(minite2==60)minite2=0;break;case 3:hour2++;if(hour2==24)hour2=0;break; } while(!key2) display(hour2,minite2,seconde2);}}}if(key3==0){delay(10);if(key3==0) {if(temp2==0){ //TR0=0;switch(temp1){ case 1:if(seconde1==0)seconde1=60;seconde1--;break; case2:if(minite1==0)minite1=60;minite1--;break;case 3:if(hour1==0)hour1=24;hour1--;break; } while(!key3)display(hour1,minite1,seconde1);} if(temp2==1){ TR0=1;switch(templ) {case 1:if(seconde2==0)seconde2=60;seconde2--;break; case2:if(minite2==0)minite2=60;minite2--;break; case3:if(hour2==0)hour2=24;hour2--;break;}while(!key3) display(hour2,minite2,seconde2);}}}if(key4==0){delay(10);if(key4==0) {temp1=0;temp2++;if(temp2==2) temp2=0; while(!key4) switch(temp2) {case 0:display(hour1,minite1,seconde1);break; case1:display(hour2,minite2,seconde2);break;}}}switch(temp2){case 0:display(hour1,minite1,seconde1);break; case1:display(hour2,minite2,seconde2);break;}} void dinshi() /*定时闹钟*/{uint i;if(hour1==hour2&&minite1==minite2&&(seconde1>=seconde2&&seconde1<seconde2 +5)) { for(i=0;i<200;i++) { buzz=1;) buzz=0;}}/*整点报警*//*void zhengdian (void) { uint k;if((seconde1 == 0)&&(minite1 ==0)){for(bjcs = 0; bjcs<hour1; bjcs++){for(k=0;k<150;k++){buzz=0;delay(20);}buzz=1;delay(20);}}} */void zhengdian (void){if(seconde1==0&&minite1==0){ temp=hour1;flag=1; //标记buzz=1;}}/*主函数*/void main(void){TMOD=0x11; 〃time0为定时器,方式1TH0=0x3c; 〃预置计数初值,50msTL0=0xb0;TH1=(65535-50000)/256;TL1=(65535-50000)%256;EA=1; 〃总中断开ET0=1; 〃允许定时器0中断TR0=1;ET1=1;TR1=1;buzz=0; 〃开启定时器0while (1)(keyscan(); 〃按键扫描dinshi(); 〃定时闹钟〃 zhengdian(); 〃整点报时switch(temp2) 〃显示时间{case 0:display(hour1,minite1,seconde1);break; case1:display(hour2,minite2,seconde2);break;}} void timer0(void) interrupt 1 〃定时器0 方式1, 50ms 中断一次{TH0=0x3c; 〃手动加载计数脉冲次数TL0=0xb0;// TMOD=0x11;mstcnt++;zhengdian(); 〃用于计算时间,每隔50ms加1if(mstcnt==20) //mstcnt 满20 即为一秒{seconde1++; //秒+1time_pro( ); //时间处理mstcnt=0; 〃对计数单元的清零,重新开始计} void timer1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(flag==1){count1++;if(count1<=40)buzz=1;if(40<count1&&count1<80)buzz=0; if(count1==80){count1=0;temp--; // 时间减一}if(temp==0)flag=0;仿真图:。

数字电子钟设计与仿真

数字电子钟设计与仿真

数字电子钟的设计与仿真摘要:本文介绍了一种数字电子钟的设计与仿真。

数字电子钟的设计涉及到模拟电子技术与数字电子技术。

其中,绝大部分是数字部分:逻辑门电路、数字逻辑表达式、计算真值表与逻辑函数间的关系、编码器、译码器显示等基本原理。

是典型的时序逻辑电路,包含了计数器、二进制数、八进制数、十六进制、二十四进制、十进制数的概念。

关键词:数字电子钟;振荡器;计数器;时序逻辑电路;校正;报时中图分类号:tp311.521数字电子钟概述数字电子钟的逻辑框图1-1所示。

它由555集成芯片构成的振荡电路、分频器、计数器、显示器组成。

555集成芯片构成的振荡电路产生信号经过分频器作为秒脉冲,秒脉冲送入计数器,计数结果通过“日”、“时”、“分”、“秒”译码器显示时间。

图1-1数字电子钟的逻辑框图工作原理:振荡器产生的稳定的高频脉冲信号,作为数字钟的时间表基准,它将时标信号送到分频器,再经过分频器输出标准秒脉冲,即将时标信号分成每秒一次的方波信号。

秒信号送入计数器进行计数,秒计数计满60后向分。

2单元模块2.1电源模块。

电源电路如图2-1所示,220v交流电经变压器变为9v交流电,后经整流(全波整流)、滤波(470μf电容)、稳压(w7805)输出+5v直流电。

图2-1给出了电源电路。

在变压器次级交流电压为正半周时,即a为正b为负时,二极管、导通,、截至。

电流流过的路径是:从a点出发,经二极管、负载,再经回到b点。

如图2-1实线所示。

若忽略二极管的正向压降,可以认为上的电压≈。

当为负半周,即a为负b为正时,二极管、导通,、截至。

图2-1稳压源电路电流的通路是从b点出发,经、负载回到a点。

如图2-1中虚线所示。

若忽略二极管的正向压降 =- 。

从图上看出,无论的正、负半周如何变换,流经的电流方向始终不变,即由c→d。

四只二极管中对应桥臂上的两只为一组,两组轮流导通。

在负载上,即可得到全波脉冲的直流电压和电流。

因为这种整流属于全波整流类型。

基于proteus的数字电子钟的仿真设计

基于proteus的数字电子钟的仿真设计

基于p r o t e u s的数字电子钟的仿真设计文件编码(008-TTIG-UTITD-GKBTT-PUUTI-WYTUI-8256)课程论文题目:基于Proteus的数字电子钟的设计与仿真课程名称:单片机系统设计与Proteus仿真学生姓名:马珂学生学号: 23系别:电子工程学院专业:通信工程年级: 13级任课教师:徐锋电子工程学院2015年5月目录24六、4基于Proteus的数字电子钟的设计与仿真一、设计目的与要求设计目的:通过课程设计,培养学生运用已学知识解决实际问题的能力、查阅资料的能力、自学能力和独立分析问题、解决问题的能力和能通过独立思考。

设计要求:设计一个时、分可调的数字电子钟、开机显示“9-58-00”。

二、设计内容与方案制定具有校时功能,按键控制电路其中时键、分键两个键分别控制时、分时间的调整。

按分键分加1;按时键时加1。

以AT89C51单片机进行实现秒、分、时上的正常显示和进位,其中显示功能由单片机控制共阴极数码管来实现,数码管进行动态显示。

三、设计步骤1、硬件电路设计.硬件电路组成框图.各单元电路及工作原理(1)晶振电路单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。

本系统中AT89C51单片机采用内部时钟方式。

采用外接晶体和电容组成的并联谐振回路。

其电路图如下:(2)键盘控制电路键盘可实现对时间的校对,用两个按键来实现。

按时键来调节小时的时间,按分键来调节分针的时间。

其电路连接图如下:(3)显示电路LED显示器是现在最常用的显示器之一发光二极管(LED)分段式显示器由7条线段围成8字型,每一段包含一个发光二极管。

外加正向电压时二极管导通,发出清晰的光。

只要按规律控制各发光段亮、灭,就可以显示各种字形或符号。

显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,采用动态显示方式显示时间,其硬件连接方式如下图所示。

.绘制原理图其计时周期为24小时,显示满刻度为23时59分59秒,另外还有校时功能。

基于Multisim的数字时钟的设计及仿真方案说明书

基于Multisim的数字时钟的设计及仿真方案说明书

数字时钟具有“秒”、“分”、“时”的十进制数字显示,能够随时校正分钟和小时,当时钟到整点时能够进行整点报时,还能够进行定时设置。

其涉及的电路由6部分组成。

(1)能产生“秒脉冲”、“分脉冲”和“时脉冲”的脉冲产生和分频电路;(2)对“秒脉冲”、“分脉冲”和“时脉冲”计数的计数电路;(3)时间显示电路;(4)校时电路;(5)报时电路;(6)定时输入电路和时间比较电路。

由脉冲发生器产生信号通过分频电路分别产生小时计数、分计数、秒计数。

当秒计数满60后,分钟加1;当分满60后,时加1;当时计数器计满24时后,又开始下一个循环技术。

同时,可以根据需要随时进行校时。

把定时信号和显示信号通过比较电路确定能否产生定时报警信号。

显示信号通过整点译码电路产生整点报警信号。

数字时钟设计与开发以及仿真分析:系统具有“时”、“分”、“秒”的十进制数字显示,因此,应有计数电路分别对“秒脉冲”、“分脉冲”和“时脉冲”计数;同时应有时间显示电路,显示当前时间;还应有脉冲产生和分频电路,产生“秒脉冲”、“分脉冲”和“时脉冲”[5]。

系统具有校时功能,因此,应有校时电路,设定数字时钟的当前值。

系统具有整点报时功能,因此,应有译码电路将整点时间识别出来,同时应有报时电路。

系统具有定时功能,因此,应有定时输入电路和时间比较电路。

综上考虑,可如图2.1所示设计数字时钟的电路原理结构图。

图2.1 数字时钟的电路原理结构图如图2.1所示,数字时钟电路有3个开关,它们的功能如下。

(1)S1:S1为瞬态开关,手动输入计数脉冲。

(2)S2:校时/定时/校时选择电路输入选择开关,当开关切换到上触点,为定时输入;当开关切换到中间触点,为校时输入;当开关切换到下触点,为校时选择电路输入。

(3)S3:为计时/校时选择开关,当开关切换到右边触点时,数字时钟为计时状态;当开关切换到左边触点时,数字时钟为校时状态。

左边两个计数器(小时计数、分计数)接收手动输入脉冲,为定时功能设定定时时间。

基于VHDL的数字钟设计及其仿真

基于VHDL的数字钟设计及其仿真

基于VHDL的数字钟设计及其仿真结构化设计元件例化配置原理图一引言所谓数字钟是指利用电子电路构成的计时器,相对机械钟而言,数字钟能达到准确计时,同时能对该种进行调整。

当然,在此基础上还能够实现整点报时,定时报闹等功能。

设计过程采用系统设计的方法,先分析任务得到系统要求,然后进行总体设计,划分子系统,然后进行详细设计,决定各个功能子系统的VHDL程序,最后进行调试仿真。

通过此次设计,对基于VHDL的结构化描述有深刻理解,为今后的集成电路设计打下坚实的基础。

二设计任务和要求对于时钟,最基本的要求应具有时分秒的计数功能。

对于秒必须满足每满60s,分要记一个数,并且秒重新从零计起;对于分必须满足60min,小时要记一个数,并且分重新从零计起,对于时满24后也应重新从零计起。

此外当数字中走慢或走快时,还应能予以调整。

所以要求设计的数字中电路应具有以下功能:1.具有十分秒计数功能,并进行十进制数字显示。

2.能分别进行时分的手动校正。

三工作原理时钟信号的频率有振荡器产生,由于技术最小单位为1s,所以时钟信号经分频器后输出频率为1Hz的秒脉冲elk ;而校准信号的频率应高于1Hz,若取0.5,则时钟信号经另一个分频器后输出频率为2Hz的校准信号脉冲clk1。

当无校准信号作用,即校分信号xf、校时信号xs为高电平,整个电路处于正常计数的工作状态时分秒计数器采用同步计数方式其时钟脉冲端均接有分频器输出的时钟信号elk.。

en为使能端,高电平有效。

三个计数器的复位端elr置入数据控制端Id都接高电平,故其置入端d[7…0]失效,且各计数器输出端分别接译码显示电路。

当有校准信号时,不妨假设只有校分信号,即xf=O、xf=1,则在二选一数据选择器的控制下,分计数器的en端将始终接高电平,即分计数器将独立于秒计数器自行独立计数,但其结果仍影响到时计数器,因为此时没有校时信号。

同理,当只有校时信号或同时具有校时、校分信号,情况同上述分析一样。

数字电子时钟课程设计仿真图加程序

数字电子时钟课程设计仿真图加程序

电子技术课程设计——数字时钟齐齐哈尔大学通信与电子工程学院通信 093:导教师:2011年6月20日数字时钟的设计一、选题依据现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中段,用于一秒的定义,通过计数方式进行满六十秒进一分钟,满六十分钟小时进一,满二十四小时清零。

从而达到计时的功能。

数字式电子时钟用集成电路计时时,译码代替机械转动,用LED显示屏代替指针显示时间,减少了计时误差。

这种表具有时分秒现实时间的功能。

还可以进行时和分的校准,闹钟更能。

二、设计要求及技术指标1.设计要求:数字钟的功能要求:用八位LED数码管显示时、分、秒,以 24小时计时方式运行,使用按键开关可实现时分调整功能2.技术指标:使用AT89C51单片机芯片控制电路,省去了很多复杂的线路,使得电路简明易懂,同时使用C语言程序来控制整个时钟显示,使得编程更容易。

(1)Proteus 7.7(2)Keil.uVision3三、电路结构及其工作原理1.电路的结构框图:图1 数字电子时钟框图2.电路的原理图:图2数字电子时钟电路原理图3.电路工作原理:电路由4部分组成:核心控制部分、显示部分、闹铃电路、调节电路。

本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。

时、分、秒的计数结果经过数据处理可直接送显示器显示。

当计时发生误差的时候可以用校时电路进行校正。

设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。

四、电路主要元件简介AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

AT89C2051是一种带2K 字节闪存可编程可擦除只读存储器的单片机。

eda数字钟程序及波形仿真图

eda数字钟程序及波形仿真图

部件一:60进制程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK60 ISPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END CLOCK60;ARCHITECTURE ARTCLOCK60 OF CLOCK60 ISBEGINCO<='1'WHEN(QH="0101" AND QL="1001" AND CI='1')ELSE'0';----进位输出PROCESS(CLK,NRESET)BEGINIF(NRESET='0')THEN -----异步复位QH<="0000";QL<="0000";ELSIF(CLK'EVENT AND CLK='1')THEN------同步置数IF(LOAD='1')THENQH<=D(7 DOWNTO 4);QL<=D(3 DOWNTO 0);ELSIF(CI='1')THENIF(QL=9)THENQL<="0000";IF(QH=5)THENQH<="0000";ELSEQH<=QH+1;END IF;ELSEQL<=QL+1;END IF;END IF;END IF;END PROCESS;END ARTCLOCK60;60进制波形图如下:部件二:24进制程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK24 ISPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END CLOCK24;ARCHITECTURE ARTCLOCK24 OF CLOCK24 ISBEGINCO<='1'WHEN(QH="0101" AND QL="1001" AND CI='1')ELSE'0';----进位输出PROCESS(CLK,NRESET)BEGINIF(NRESET='0')THEN -----异步复位QH<="0000";QL<="0000";ELSIF(CLK'EVENT AND CLK='1')THEN------同步置数IF(LOAD='1')THENQH<=D(7 DOWNTO 4);QL<=D(3 DOWNTO 0);ELSIF(CI='1')THENIF(QL=9 or (QH=2 AND QL=3))THENQL<="0000";IF(QH=2)THENQH<="0000";ELSEQH<=QH+1;END IF;ELSEQL<=QL+1;END IF;END IF;END IF;END PROCESS;END ARTCLOCK24;24进制的波形图如下:数字钟的全部程序如下:LIBRARY IEEE; ---秒信号USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK60s ISPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END CLOCK60s;ARCHITECTURE ARTCLOCK60s OF CLOCK60s ISBEGINCO<='1'WHEN(QH="0101" AND QL="1001" AND CI='1')ELSE'0'; --进位输出PROCESS(CLK,NRESET)BEGINIF(NRESET='0')THEN ---异步复位QH<="0000";QL<="0000";ELSIF(CLK'EVENT AND CLK='1')THEN --同步置数IF(LOAD='1')THENQH<=D(7 DOWNTO 4);QL<=D(3 DOWNTO 0);ELSIF(CI='1')THENIF(QL=9)THENQL<="0000";IF(QH=5)THENQH<="0000";ELSEQH<=QH+1;END IF;ELSEQL<=QL+1;END IF;END IF;END IF;END PROCESS;END ARTCLOCK60s;LIBRARY IEEE; ---分信号USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK60m ISPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END CLOCK60m;ARCHITECTURE ARTCLOCK60m OF CLOCK60m ISBEGINCO<='1'WHEN(QH="0101" AND QL="1001" AND CI='1')ELSE'0'; --进位输出PROCESS(CLK,NRESET)BEGINIF(NRESET='0')THEN --异步复位QH<="0000";QL<="0000";ELSIF(CLK'EVENT AND CLK='1')THEN ---同步置数IF(LOAD='1')THENQH<=D(7 DOWNTO 4);QL<=D(3 DOWNTO 0);ELSIF(CI='1')THENIF(QL=9)THENQL<="0000";IF(QH=5)THENQH<="0000";ELSEEND IF;ELSEQL<=QL+1;END IF;END IF;END IF;END PROCESS;END ARTCLOCK60m;LIBRARY IEEE; ---时信号USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CLOCK24 ISPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; --进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END CLOCK24;ARCHITECTURE ARTCLOCK24 OF CLOCK24 ISBEGINCO<='1'WHEN(QH="0101" AND QL="1001" AND CI='1')ELSE'0'; ---进位输出PROCESS(CLK,NRESET)BEGINIF(NRESET='0')THEN ---异步复位QH<="0000";QL<="0000";ELSIF(CLK'EVENT AND CLK='1')THEN ---同步置数IF(LOAD='1')THENQH<=D(7 DOWNTO 4);QL<=D(3 DOWNTO 0);ELSIF(CI='1')THENIF(QL=9 or (QH=2 AND QL=3))THENQL<="0000";IF(QH=2)THENQH<="0000";ELSEQH<=QH+1;END IF;ELSEEND IF;END IF;END IF;END PROCESS;END ARTCLOCK24;LIBRARY IEEE; ---时信号USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hour ISPORT( CLK: IN STD_LOGIC; ---时钟信号NRESETS: IN STD_LOGIC; ---复位端LOADS: IN STD_LOGIC; ---置数端NRESETM: IN STD_LOGIC; ---复位端LOADM: IN STD_LOGIC; ---置数端NRESETH: IN STD_LOGIC; ---复位端LOADH: IN STD_LOGIC; ---置数端DS: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端DM: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端DH: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH1: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL1: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QH2: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL2: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QH3: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL3: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END hour;ARCHITECTURE ART OF hour ISCOMPONENT CLOCK60SPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT CLOCK60MPORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; ---始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT CLOCK24PORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端LOAD: IN STD_LOGIC; ---置数端D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端CI:IN STD_LOGIC; --始能端CO: OUT STD_LOGIC; ---进位脉冲QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNAL Z1,Z2:STD_LOGIC;BEGINU1: CLOCK60S PORT MAP(CLK,NRESETS,LOADS,DS,CI,Z1,QH1,QL1);U2: CLOCK60M PORT MAP(CLK,NRESETM,LOADM,DM,Z1,Z2,QH2,QL2);U3: CLOCK24 PORT MAP(CLK,NRESETH,LOADH,DH,Z2,CO,QH3,QL3);END ARCHITECTURE ART;电子钟全部引脚显示波形:00:00:59波形显示如下:00:59:59波形图如下,进位后为01:00:00 23:59:59波形图如下:调时间波形如下:用置位端进行调时,调到02:51:15波形如下:经验证,以上设计完全符合题目要求!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电子时钟程序【闹铃(持续5s),整点报时(几点报几下,每两下之间隔间2s,每声持续2s)】程序:#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int//此表为LED 的字模, 共阴数码管0-9 -uchar code dispcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制/*定义并初始化变量*/sbit key1=P3^0;sbit key2=P3^1;sbit key3=P3^2;sbit key4=P3^3;sbit buzz=P1^3;uchar mstcnt=0;//定时器计数,定时50ms,mstcnt满20,秒加1uchar seconde1=0;uchar bjcs;uchar minite1=0;uchar hour1=7;uchar seconde2=0;uchar minite2=0;uchar hour2=8;uchar temp1=0;uchar temp2=0;uchar count1,flag,temp;/*函数声明*/void delay(uint z); //延时子程序void time_pro( ); //时间处理子程序void display(uchar hour,uchar minite,uchar seconde); //显示子程序void keyscan( ); //键盘扫描子程序void zhengdian();void dinshi();void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void time_pro(void) /*时间处理子程序*/{if(seconde1==60){seconde1=0;minite1++;if(minite1==60){minite1=0;hour1++;if(hour1==24){hour1=0;}}}}void display(uchar hour,uchar minite,uchar seconde) /*显示子程序*/ {uchar h1,h2,m1,m2,s1,s2;s2=seconde/10;s1=seconde%10;m2=minite/10;m1=minite%10;h2=hour/10;h1=hour%10;P2=0XFE; //1111 1110if(temp1==1) //功能选项,通过点提醒来调节相应位的时间P0=dispcode[s1]|0x80; //点提醒elseP0=dispcode[s1];//秒个位delay(1);P2=0XFD;//1111 1101P0=dispcode[s2];//秒十位delay(1);P2=0XFB; //1111 1011P0=dispcode[10];//间隔符-delay(1);P2=0XF7; //1111 0111if(temp1==2)//P0=dispcode[m1]|0x80;elseP0=dispcode[m1];//分个位delay(1);P2=0XEF; //1110 1111P0=dispcode[m2];//分十位delay(1);P2=0XDF; //1101 1111P0=dispcode[10];//间隔符-delay(1);P2=0XBF; //1011 1111if(temp1==3)P0=dispcode[h1]|0x80;//时个位elseP0=dispcode[h1];delay(1);P2=0X7F; //0111 1111P0=dispcode[h2];//时十位delay(1);}void keyscan(void) /*键盘扫描子程序*/{if(key1==0){delay(10);if(key1==0){//TR0=0;temp1++;if(temp1==4){temp1=0;TR0=1;}while(!key1)switch(temp2){case 0:display(hour1,minite1,seconde1);break;case 1:display(hour2,minite2,seconde2);break;}}}if(key2==0){delay(10);if(key2==0){if(temp2==0) //闹钟选择键{//TR0=0;switch(temp1){case 1:seconde1++;if(seconde1==60)seconde1=0;break;case 2:minite1++;if(minite1==60)minite1=0;break;case 3:hour1++;if(hour1==24)hour1=0;break;}while(!key2)display(hour1,minite1,seconde1);}if(temp2==1){ TR0=1;switch(temp1){case 1:seconde2++;if(seconde2==60)seconde2=0;break;case 2:minite2++;if(minite2==60)minite2=0;break;case 3:hour2++;if(hour2==24)hour2=0;break;}while(!key2)display(hour2,minite2,seconde2);}}}if(key3==0){delay(10);if(key3==0){if(temp2==0){ //TR0=0;switch(temp1){case 1:if(seconde1==0)seconde1=60;seconde1--;break;case 2:if(minite1==0)minite1=60;minite1--;break;case 3:if(hour1==0)hour1=24;hour1--;break;}while(!key3)display(hour1,minite1,seconde1);}if(temp2==1){ TR0=1;switch(temp1){case 1:if(seconde2==0)seconde2=60;seconde2--;break;case 2:if(minite2==0)minite2=60;minite2--;break;case 3:if(hour2==0)hour2=24;hour2--;break;}while(!key3)display(hour2,minite2,seconde2);}}}if(key4==0){delay(10);if(key4==0){temp1=0;temp2++;if(temp2==2)temp2=0;while(!key4)switch(temp2){case 0:display(hour1,minite1,seconde1);break;case 1:display(hour2,minite2,seconde2);break;}}}switch(temp2){case 0:display(hour1,minite1,seconde1);break;case 1:display(hour2,minite2,seconde2);break;}}void dinshi() /*定时闹钟*/{uint i;if(hour1==hour2&&minite1==minite2&&(seconde1>=seconde2&&seconde1<seconde2 +5)){for(i=0;i<200;i++){buzz=1;buzz=0;}} /*整点报警*/ /*void zhengdian (void){ uint k;if((seconde1 == 0)&&(minite1 ==0)){for(bjcs = 0; bjcs<hour1; bjcs++){for(k=0;k<150;k++){buzz=0;delay(20);}buzz=1;delay(20);}}} */void zhengdian (void){if(seconde1==0&&minite1==0){ temp=hour1;flag=1; //标记buzz=1;}}/*主函数*/void main(void){TMOD=0x11; //time0为定时器,方式1TH0=0x3c; //预置计数初值,50msTL0=0xb0;TH1=(65535-50000)/256;TL1=(65535-50000)%256;EA=1; //总中断开ET0=1; //允许定时器0中断TR0=1;ET1=1;TR1=1;buzz=0; //开启定时器0{keyscan(); //按键扫描dinshi(); //定时闹钟// zhengdian(); //整点报时switch(temp2) //显示时间{case 0:display(hour1,minite1,seconde1);break;case 1:display(hour2,minite2,seconde2);break;}}}void timer0(void) interrupt 1 //定时器0方式1,50ms中断一次{TH0=0x3c; //手动加载计数脉冲次数TL0=0xb0;// TMOD=0x11;mstcnt++;zhengdian(); //用于计算时间,每隔50ms加1if(mstcnt==20) //mstcnt满20即为一秒{seconde1++; //秒+1time_pro( ); //时间处理mstcnt=0; //对计数单元的清零,重新开始计}}void timer1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(flag==1){count1++;if(count1<=40)buzz=1;if(40<count1&&count1<80)buzz=0;if(count1==80){count1=0;temp--; // 时间减一}if(temp==0)flag=0;}仿真图:。

相关文档
最新文档