第一篇:课程设计数字电子闹钟
数 字 闹 钟 的 设 计
数字闹钟的设计与制作
一、设计任务与要求
设计并制作一个带有可定时起闹的数字钟
1.有“时”、“分”十进制显示,“秒”使用发光二极管闪烁表示
2.以24小时为一个计时周期
3.走时过程中能按预设的定时时间(精确到小时)启动闹钟,以发光二极管闪烁表示,启闹时间为3s~10s
二、实验仪器及主要器件
5V电源
1台 面包板
1块 74LS163
6片 74LS00
5片 74LS138
2片 CD4511
4片 LM555
1片 74LS123
1片 LED共阴极显示器
4片 电阻
若干 电容
3个 导线
15米
三、设计原理方案
系统构成
1、标准时间源
l)标准时间源即秒信号发生器)可采用LM555构成多谐振荡器,调整电阻可改变频率,使之产生1Hz的脉冲信号(即T=1S)
LM555管脚排列及电路
T=0.7(RA+2RB)C
T=1S,C=220uF
计算得RA+2RB≈6.5K
取RA=1.5K,RB=2.4K
2.计时部分:时计数单元一般为24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
模60计数器采用异步方式
如秒计数器:分成个位和十位,个位模十,十位模六。个位从0000计数到1001,利用置数端将个位从0000重新开始计数,同时将1001信号作为一个CP脉冲信号传给十位,让十位开始从0000开始计数。以此规律开始计数,直到十位计数到5,个位计数到9时,通过十位的置数端将十位清零,重新开始计数,并将此信号作为一个CP脉冲信号传给分计数器。
模24计数器电路
模24计数器采用同步方式, 使用两片74LS163芯片,cp脉冲均由分计数器提供.第一片制成模10计数器,将1001信号提取出来后给与清零端。第二片芯片制成模为3的计数器,原数据ABCD给予0000信号.将第一片芯片的0011信号与第二片芯片的0010信号提取出来给与第一片芯片的置数端与第二片芯片的清零端,上升沿过来之后,两片芯片同时清零
3、定时起闹部分
l)正点起闹,不要求分)使用2片74LS138,分别选出小时的十位和个位)小时十位为0~2,3-8译码器只使用前2个输入端,小时个位为0~9,3-8译码器只有3个输入端,会丢失几个时间点:8点、9点、18点、19点。)还应控制起闹时间的长短,用74LS123构成单稳态触发器
起闹部分框图
控制起闹时间长短:T=0.28RC(1+0.7k/R)采用2片74LS138,将控制十位的3-8译码器的A2端作为控制个位3-8译码器的最高位,这样就可以满足小时个位为0-9。控制十位的3-8译码器的A1,A0一起控制十位从0-2变化。
4、完整的闹钟电路图(ewb设计图)
电路安装要求
1.布局合理
2.导线横平竖直,且不要从集成块上跳线
3.导线紧贴面包板,连接可靠
4.交叉线尽可能少
调试方法:
(1)采用逐级调试的方法
1.确保秒信号正常
2.调试秒计数器
3.调试分计数器,可将秒信号作为分计数器的CP脉冲
4.调试小时计数器,可将秒信号作为小时计数器的CP脉冲
5.调试闹钟电路
(2)将秒信号发生电路中的电容换成比较小的电容,这样使得分信号的脉冲周期比较短
五、设计和调试过程中出现的问题及解决方法
1)将秒信号接入示波器,与标准信号对比,出现误差,但在允许范围之内。
2)插上电源后发现秒信号和分信号的信号紊乱,分信号和秒信号同步计数。于是我们对秒的模六十进行单脉冲及示波器的检测,在检查秒信号个位(模十计数器)时发现,14脚信号正确,而13,12,11脚信号紊乱。后进行接线检查,发现有线是虚接,再修改后,13脚信号恢复正常,而12,11脚依旧紊乱。因查不出原因,而后对分信号进行检查。由于分秒计数器所采用的模六十一致,而分信号正常,故排除模六十计数器设计有误。将分信号的器件替换控制秒信号的器件,秒信号依旧有误,故排出器件问题。最后进行检测面包板状况,出现了让人崩溃的状况,面包板上控制秒信号个位的163芯片2脚所在的一纵列5个孔全部与地相连。我们不得不改变布局,进行避让。修改后,分秒模六十计数器正常。
3)刚接通电源时,小时计数器十位显示7,后给予清零信号后显示恢复正常。将秒脉冲接到小时计数器的个位CP端,在进位时发现23:00时不能同时清零。对模二十四的设计进行分析发现采用的清零端为异步,后经过改造改成同步清零,清零正常。
4)在检测CD4511驱动电路的过程中发现数码管不能正常显示的状况,经检验发现主要是由于接触不良的问题,其中包括线的接触不良和芯片的接触不良,在实验过程中,数码管有几段二极管时隐时现,有时会消失。用5V电源对数码管进行检测,一端接地,另一端接触每一段二极管,发现二极管能正常显示的,在检测过程中发现有几根线有时能接通,有时不能接通,把接触不好的线重新接过后发现能正常显示了。其次是由于芯片接触不良的问题,当检查到线路完全正确,并且确保导线没有问题时,我们推测器件有问题,其解决方法为把CD4511的芯片拔出,根据面包板孔的的状况重新调整其引脚,使其正对于孔,再用力均匀地将芯片插入面包板中,此后发现能正常显示。
5)在检查分信号到小时信号的进位是否正常时发现有时显示正常,有时显示不稳定。一时找不到问题,经过讨论发现CP脉冲重叠造成显示不稳定。
6)在制作起闹部分电路的过程中,发现闹钟能完成基本功能,但无法在8,9,18,19点起闹。通过分析和设计,我们采用卡诺图化简将输入信号接到功能脚的方法,到达在特殊时间起闹的目的。
至此,数字闹钟的调试全部结束并达到要求。
六、心得体会
本次数字钟设计要求我们将理论付诸实践,在实践中进一步巩固理论知识,最终当我们看到自己设计好的数字闹钟时,我们激动万分。
首先,我们从没有将以前学的各种知识整合到一起,所以这种有点综合性的课设就要求我们在熟悉每个工作部分的同时,能把他们有机的结合起来。
第二,在模六十和模二十四的计数器的设计中,要求我们对各个芯片的各引脚的功能很熟悉。在这个过程中,我们进一步的熟悉的每个器件的用途和功能,尤其是4511和74LS123,这两种芯片之前我们都没有接触过。
第三,我们在设计的过程中使用了EWB软件,由于电路复杂,交叉线较多,所以就要求我们在连接过程中细心的完成接线,并巧妙的布局使得面包板上的线不交叉。
第四,当我们连接好线路以后,在调试的过程中我们借助于示波器,借助于低频信号发生器的单脉冲,一步步的排查错误,在此过程中更深一步的熟悉的了解了示波器和低频信号发生器的使用方法。
第五,在整个课设中要求我们有良好的心理状态,尤其是面对连线复杂的面包板。我们必须冷静分析问题,解决问题。
第六,本次课设是一个团体的活动,我们在这次课设中体会了团队精神。
最后,感谢老师给我们一次实践动手的机会,让我们得到了提升。我期待今后能有更多的机会参与这些课题的制作!
第二篇:EDA课程设计 数字时钟(闹钟)
课 程 设 计 说 明 书
题目: 闹钟
学院(系): 年级专业: 学 号: 学生姓名: 指导教师: 教师职称:
共 16 页
第 1 页
目 录
第1章 摘要…………………………………………………………………………………1 第2章 设计方案……………………………………………………………………………
2.1 VHDL简介…………………………………………………………………………… 2.2 设计思路…………………………………………………………………………… 第3章 模块介绍…………………………………………………………………………… 第4章 Verilog HDL设计源程序………………………………………………………… 第5章 波形仿真图………………………………………………………………………… 第6章 管脚锁定及硬件连线……………………………………………………………… 心得体会 ……………………………………………………………………………………17 参考文献 ……………………………………………………………………………………18
共 16 页
第 2 页
第一章 摘要
在当今社会,数字电路产品的应用在我们的实际生活中显得越来越重要,与我们的生活联系愈加紧密,例如计算机、仪表、电子钟等等,使我们的生活工作较以前的方式更加方便、完善,带来了很多的益处。
在此次EDA课程,我的设计课题是闹钟,使用VHDL语言进行编程完成。报告书主要由设计方案、模块介绍、设计源程序、仿真波形图和管脚锁定及硬件连线四部分组成。设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。
共 16 页
第 3 页
第二章 设计方案 §2.1 VHDL简介
数字电路主要是基于两个信号(我们可以简单的说是有电压和无电压),用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。
EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
利用EDA技术进行电子系统的设计,具有以下几个特点:① 用软件的方式设计硬件;② 用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③ 设计过程中可用有关软件进行各种仿真;④ 系统可现场编程,在线升级;⑤ 整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。因此,EDA技术是现代电子设计的发展趋势。
EDA技术伴随着计算机、集成电路、电子系统设计的发展,经历了计算机辅助设计(Computer Assist Design,简称CAD)、计算机辅助工程设计(Computer Assist Engineering Design,简称CAE)和电子设计自动化(Electronic Design Automation,简称EDA)三个发展阶段。
常用的硬件描述语言有VHDL、Verilog、ABEL。
EDA技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。前两个阶段的EDA产品都只是个别或部分的解决了电子产品设计中的工程问题;第三代EDA工具根据工程设计中的瓶
共 16 页
第 4 页
颈和矛盾对设计数据库实现了统一管理,并提出了并行设计环境概念,提供了独立于工艺和厂家的系统级的设计工具。EDA关键技术之一就是采用硬件描述语言对硬件电路进行描述,且具有系统级仿真和综合能力。目前应用比较广泛的硬件描述语言就是Verilog HDL。Verilog HDL简介
Verilog HDL是目前大规模集成电路设计中最具代表性、使用最广泛的硬件描述语言之一。具有如下特点:
(1)能够在不同的抽象层次上,如系统级、行为级、RTL级、门级和开关级,对设计系统进行精确而简练的描述。
(2)能够在每个抽象层次的描述上对设计进行仿真验证,及时发现及时发现可能存在的错误,缩短设计周期,并保存整个设计过程的正确性。
(3)由于代码描述与工艺过程实现无关,便于设计标准化,提高设计的可重用性。如国有C语言的编程基础经验,只需很短的时间就能学会和掌握Verilog HDL,因此,Verilog HDL可以作为学习HDL设计方法的入门和基础。
§2.2 设计思路
一、设计要求
1、设计简易的一分钟闹钟;
2、可手动输入定时时间(0~59s),如30s;
3、两个动态数码管上跟踪显示时间的变化:如30,29,28……到了指定时间蜂鸣器发出5s的提示音;
4、采用2个动态数码管显示时间;
5、用蜂鸣器发出提示音;
6、拨码开关设置定时时间。
二、设计思路
根据上述的设计要求,整个系统大致包括如下几个组成部分:它包括以下几个组成
共 16 页
第 5 页
部分:1)显示屏,由2个七段动态数码管组成,用于显示当前设置的闹钟时间并进行跟踪显示;2)6个拨码开关,用于输入闹钟时间;3)复位键,确定新的闹钟时间设置,或显示已设置的闹钟时间;4)蜂鸣器,在当前时钟时间与闹钟时间相同时,发出报警声。
共 16 页
第 6 页
第三章 模块介绍
一、计时模块
此模块共有6个拨码开关作为输入信号,当开关无输入时,都处于低电平状态,D5、D4、D3、D2、D1和D0是并行数据输入端,CRN是异步复位输入端,LDN是预置控制输入端。当开关有输入时,会产生一个六位的二进制输出信号num,此信号表示动作的开关序号,它是作为动态显示模块的输入信号。
二、数码显示模块
这个模块有两个输入信号和两个输出信号。其中一个是信号输入模块的输出num作为输入,另外一个是时钟输入端,作为扫描数码管的频率信号,采用1024HZ的中高频信号。输出信号为SS0、SS1、SS2,是动态数码管的片选段。
三、报警模块
报警模块共有两个输入信号ET和CLK1,一个输出信号COUT。当从信号输入模块检测到有开关输入时,ET信号已置1,CLK上升沿到来时,程序将COUT置1,蜂鸣器发出时间为10s的报警信号,时间到达后,跳出循环,蜂鸣器停止报警。
四、顶层模块
顶层模块的作用是将各个模块组合到一起,从而实现最终的功能。其输入即为各个模块的输入,一个时钟信号,还有6个拨码开关的输入,其输出为数码管显示和报警器。
共 16 页
第 7 页
第四章Verilog HDL设计源程序
一、计时模块
module counter(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,Q,OC);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN;output[5:0] Q;output OC;reg OC;reg[5:0] Q;reg[5:0] Q_TEMP;reg[3:0] NUM;always@(posedge CLK or negedge CRN)begin
if(~CRN)Q_TEMP=6'b000000;else if(~LDN)begin Q_TEMP={D5,D4,D3,D2,D1,D0};NUM=4'b0000;end else if(Q_TEMP<6'b111100&&Q_TEMP>6'b000000)begin if(NUM<4'b1000&&NUM>=4'b0000)NUM=NUM+1;else NUM=4'b0001;if(NUM==4'b1000)Q_TEMP=Q_TEMP-1;end
共 16 页
第 8 页
else Q_TEMP=6'b000000;end always begin
if(Q_TEMP==6'b000000&&LDN)OC=1'b1;else OC=1'b0;Q=Q_TEMP;end endmodule
二、数码显示模块
module showtime(A,Q,CLKM,SS0,SS1,SS2);input[5:0] A;input CLKM;output[6:0] Q;output SS0,SS1,SS2;reg[6:0] Q;reg SS0,SS1,SS2;reg M;reg[5:0] B;reg[5:0] C;always@(posedge CLKM)begin M=M+1;end always begin
共 16 页
第 9 页
if(A<='b001001)begin B=A;C=0;end else if(A>'b001001&&A<='b10011)begin B=A-10;C=1;end else if(A>'b10011&&A<='b11101)begin B=A-20;C=2;end else if(A>'b11101&&A<='b100111)begin B=A-30;C=3;end else if(A>'b100111&&A<='b110001)begin B=A-40;C=4;end else if(A>'b110001&&A<='b111011)
共 16 页
第 10 页
begin B=A-50;C=5;end else if(A=='b111100)begin B=0;C=6;end if(M=='b1)begin SS0=1;SS1=0;SS2=0;case(B)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;'b000111:Q='b0000111;'b001000:Q='b1111111;'b001001:Q='b1101111;default:Q='b0111111;endcase end
共 16 页
第 11 页
else if(M=='b0)begin SS0=0;SS1=0;SS2=0;case(C)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;default:Q='b0111111;endcase end end endmodule
三、报警模块
module speaker(CLK1,ET,COUT);input CLK1,ET;output COUT;reg COUT;reg[5:0] TEMP;always@(posedge CLK1)begin
if(~ET)TEMP=6'b000000;else if(TEMP<6'b101001&&TEMP>=6'b000000)TEMP=TEMP+1;
共 16 页
第 12 页
else TEMP=6'b101001;end always begin if(TEMP<6'b101001&&TEMP!=6'b000000)COUT=1'b1;else COUT=1'b0;end endmodule
四、顶层模块 module timer(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,COUT,LED,SS0,SS1,SS2,CLKM);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,CLKM;output[6:0] LED;output COUT,SS0,SS1,SS2;wire X6;wire[5:0] X;counter u1(.LDN(LDN),.D5(D5),.D4(D4),.D3(D3),.D2(D2),.D1(D1),.D0(D0),.CLK(CLK),.CRN(CRN),.Q(X[5:0]),.OC(X6));showtime u2(.A(X[5:0]),.Q(LED[6:0]),.CLKM(CLKM),.SS0(SS0),.SS1(SS1),.SS2(SS2));speaker u3(.CLK1(CLK1),.ET(X6),.COUT(COUT));endmodule
共 16 页
第 13 页
第五章 波形仿真图
一、计时模块波形仿真图
二、报警模块波形仿真图
三、顶层模块波形仿真图
共 16 页
第 14 页
第六章 管脚锁定及硬件连线
一、管脚锁定
CLK>chip=timer;Input Pin=75 CLKM>chip=timer:Input Pin=83 CLK1> chip=timer;Input Pin=85 COUT> chip=timer;Output Pin=38 CRN> chip=timer;Input Pin=39 DO> chip=timer;Input Pin=53 D1> chip=timer;Input Pin=47 D2> chip=timer;Input Pin=46 D3> chip=timer;Input Pin=45 D4> chip=timer;Input Pin=44 D5> chip=timer;Input Pin=41 LDN> chip=timer;Input Pin=40 LED0> chip=timer;Output Pin=173 LED1> chip=timer;Output Pin=174 LED2> chip=timer;Output Pin=175 LED3> chip=timer;Output Pin=176 LED4> chip=timer;Output Pin=177 LED5> chip=timer;Output Pin=179 LED6> chip=timer;Output Pin=187 SSO> chip=timer;Output Pin=191 SS1> chip=timer;Output Pin=192 SS2> chip=timer;Output Pin=193 引线说明:拨码开关使用数字开关组A,需外接引线。
共 16 页
第 15 页
心得体会
通过这次设计,初步对EDA有一个了解。
出于没有学习过这门课程,所以再课程设计开始时对于EDA就是一无所知。课程设计之初是做了一个简单的培训,关于软件和硬件的设计,算是入门训练吧。通过前两天的课程讲解,我对其有了初步的了解。之后就开始按照指导书中的例题就行练习,仿真,有进一步的掌握后就开始了自己的课程设计。由于我C++程序设计知识不扎实,所以导致这次软件设计困难重重,也让我明白了在这个领域知识的串联是非常普遍的,学好学扎实是我们必须要做到的要求。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力。在设计的过程中,可以说得是困难重重,但这毕竟第一次做,同时在设计的过程中发现了自己的不足之处。
在此还需要感谢郑兆兆老师和吕宏诗老师耐心的指导与帮助,使课设能够更加顺利的完成。
共 16 页
第 16 页
参考文献
1、阎石主编.《数字电子技术基础》(第五版).高等教等育出版社.2006.5,168-175页 ;
2、李国丽、朱维勇、何剑春主编 《EDA与数字系统设计》(第2版).机械工业出版社.2009.3,105-146页
共 16 页
第 17 页
第三篇:微机原理课程设计电子闹钟
电子钟设计
1任务要求
1.1显示位置:屏幕中央.1.2日期显示格式“时:分:秒.1.312/24时制可调.1.4在显示屏上显示提示语“CURRENT TIME IS:”和当前时间.2工作原理
1时钟起始时间的设置
先调用DOS操作系统模块9,在显示屏上显示提示语“TIME SYSTEM IS:”,输入时制12或24后,显示“CURRENT TIME IS:”,再调用DOS操作系统模块10,提示要输入时钟的起始时间,输入时间的格式是“时:分:秒”。输入的时间以字符串形式存放在已定义的存储器缓存区内,继而调用TRAN1转换子程序和MUL10乘10子程序,将存放在存储器缓存区内的ASCII字符转换为压缩BCD码,并将时、分、秒的值放在寄存器CH、DH、DL中。
2延时程序
调用延时TIME延时中断服务程序,累加到存放秒值的寄存器DL中,并进行十进制调整。在累加的过程中,不断地对时、分、秒值进行比较,秒不能等于60,分不能等于60,时不能等于24。秒等于限制值时,则使秒值为0分值加1;分等于限制值时,则使分值为0时值加1;时等于限制值时,则使时值为0;时、分、秒值都不超过限制值时,就转显示屏输出。
3时间显示
调用DOS操作系统模块9,可用来显示存储器内字符串。由于显示的字符必须为ASCII码,因为要调用TRAN2转换子程序将寄存器CH、DH、DL内压缩BCD码字符串转换成ASCII字符串,字符串最后以字符“$”结束,并按时、分、秒的顺序送存储器缓冲区内。调用DOS操作系统模块9,(DS:DX)应指向字符串首址。程序一旦进入运行,就将不间断地在显示屏显示时间,要想程序停止运行,可同时在键盘按下CTRL和BREAK二键。
4程序堆图 5程序清单
DATA SEGMENT BUFFER DB 10;设置输入字符串用缓冲区 DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;设置1CH中断
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模块,显示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模块,从键盘输入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”换行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回车“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模块,显示字符串,提示从键盘输入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模块,从键盘输入字符串到缓冲区
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;将输入的ASCII码转换为BCD码
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;将BCD码转换为压缩的BCD码
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“与60比较
JNE DISPY
;小于60S,转显示程序
MOV DL,0
;等于60S, ”秒“值为0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比较
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”时“值转换成ASCII码
NEXT1: CALL TRAN2
;将压缩BCD码转换成ASCII码
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值转换成ASCII码
CALL TRAN2
INC BX
MOV AL,'$'
;显示字符串结束码
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模块,显示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;将BCD码转换为压缩的BCD码
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII码转换成BCD码
;将压缩BCD码转换成ASCII码;调用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
调用BIOS,设置屏幕光标在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6设计时遇到的问题及解决方法
在课程设计中遇到的最大的困难是如何利用软、硬件配合的方式产生中断,对中断向量表的装载还比较模糊,对中断的初始化、具体设置、中断返回还不是很清楚,程序设计一度陷入停滞状态,不知如何是好.于是我又重新翻阅了我们的学习课本,也就是电子工业出版社的《微机原理与接口技术(基于16位机)》,重点研究了第9章《中断》,通过对这一章的学习,我终于对中断有了详细的认识,在设计程序时也容易了很多。
设中断服务程序入口地址为TIME,则相应的程序如下:
„„
KEEPIP DW 0
;设置内存缓冲区,用于暂存 KEEPCS DW 0
;DOS的中断矢量
„„
;在主程序的初始化部分,先取出DOS的中断矢量并加以保存,然后装入需要的中断矢量
MOV AH,35H
;取出DOS的中断矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中断矢量
MOV KEEPCS,ES
PUSH DS;保护DS
MOV DX,OFFSET TIME
;将中断矢量取代
MOV AX,SEG TIME
;DOS的中断矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;设置中断功能调用
INT 21H
POP DS
;恢复DS „„
AGAIN: PUSH CX
MOV CX,18
STI
;开中断 W:
CMP CX,0
JNE W
CLI „„
TIME
PROC
DEC CX
IRET TIME
ENDP „„
;在程序结尾处,用以下程序恢复DOS的中断矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及实现方法
7.112时制时显示AM或PM
„„
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP „„
7.2绿色显示时间
„„
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP „„
7.3在数字上下方各显示一行个数同小时数的”=“ „„
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP „„ 8心得体会
这是我第一次用汇编语言来设计一个小程序,历时一周终于完成,其间有不少感触。首先就是借鉴.鲁迅先生曾说过要”拿来“,对,在这次课程设计中,就要”拿来"不少子程序,比如将ASCII码转换成BCD码,将BCD码转换成压缩BCD码,将压缩BCD码转换成ASCII码等,这些子程序的设计是固定的,因此可以直接从指导资料中调用,至于设置光标的子程序,只需要修改几个参数就可以,这大大方便了我的设计,为我节省了很多的时间。还有就是指导老师提供的资料很重要.这次课程设计的大部分程序,都可以在李老师提供的资料中找到,这对我的程序设计很有帮助,从这些资料中,我可以看出这个时钟程序的基本流程,修改一些程序就可以实现这个时钟的基本功能,添加一些程序就可以实现这个时钟的附加功能,可以说,如果没有李老师提供的源程序,我将面临很大的困难。文章引用自:
第四篇:嵌入式电子闹钟时钟课程设计
#include
sbit rs=P2^5;//液晶位定义 sbit lcden=P2^7;sbit s1=P2^0;//时间功能切换按键 sbit s2=P2^1;//按键加 sbit s3=P2^3;//按键减
sbit s4=P2^4;//闹钟功能切换键 sbit rst=P1^5;//ds1302引脚定义 sbit io=P1^6;sbit sclk=P1^7;sbit beep=P3^0;//蜂鸣器
uchar num,count,shi,fen,miao,s1num,s2num, year,month,day,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2, day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk,ashi,afen;//参数定义
uchar code table[]=“20--”;//液晶固定显示 uchar code table1[]=“ : : 00:00”;/* uchar time_dat[7]={12,1,6,6,12,59,59};//年周月日时分秒 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};*/ void write_com(uchar com);//液晶写指令函数 void write_data(uchar date);//液晶写数据函数
void write_ds1302(uchar add,uchar dat);//ds1302芯片写指令函数 void set_rtc();//ds1302时间设置函数 void time_pros();//ds1302进制转换函数 void read_rtc();//ds1302读时间函数 void alarm();//闹钟函数
void delay(uint z)//延时函数 { uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void init()//初始化 { lcden=0;flag=0;flag1=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//液晶固定显示,第一行 for(num=0;num<14;num++){ write_data(table[num]);delay(5);}
write_com(0x80+0x40);//液晶显示第二行 for(num=0;num<20;num++){ write_data(table1[num]);delay(5);} }
void write_com(uchar com)//1602液晶写指令 { rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}
void write_data(uchar date)//1602液晶写写数据 { rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}
void write_sfm(uchar add,uchar date)//时分秒 { uchar shi3,ge;shi3=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi3);write_data(0x30+ge);}
void write_nyr(uchar ad,uchar date)//年月日 { uchar shi4,ge2;shi4=date/10;ge2=date%10;write_com(0x80+ad);write_data(0x30+shi4);write_data(0x30+ge2);}
void write_week(uchar wk)//星期按西方星期设置{ write_com(0x80+11);switch(wk){ case 1: write_data('S');delay(5);write_data('U');delay(5);write_data('N');break;
case 2: write_data('M');delay(5);write_data('O');delay(5);write_data('N');break;
case 3: write_data('T');
星期天为第一天 delay(5);write_data('U');delay(5);write_data('E');break;
case 4: write_data('W');delay(5);write_data('E');delay(5);write_data('D');break;
case 5: write_data('T');delay(5);write_data('H');delay(5);write_data('U');break;
case 6: write_data('F');delay(5);write_data('R');delay(5);write_data('T');break;
case 7: write_data('S');delay(5);write_data('A');delay(5);write_data('T');break;
} }
void keyscan()//{ if(s1==0){ delay(5);
按键函数 if(s1==0){ write_com(0x0f);s1num++;//记录按键次数 flag=1;flag1=1;while(!s1);
switch(s1num)//光标闪烁点定位 { case 1:write_com(0x80+0x40+6);//秒 break;
case 2:write_com(0x80+0x40+3);//分 break;
case 3:write_com(0x80+0x40+0);//时 break;
case 4:write_com(0x80+11);//星期 break;case 5:write_com(0x80+8);//日 break;
case 6:write_com(0x80+5);//月 break;
case 7:write_com(0x80+2);//年 break;
case 8:s1num=0;write_com(0x0c);//设置开显示光标不显示 关闭时间设置
set_rtc();flag=0;break;}
} }
if(s1num!=0)//按键加减 { if(s2==0)//加按键函数 { delay(10);if(s2==0){
while(!s2);switch(s1num)//根据功能键相应次数做出调节 { case 1: miao++;//秒加 if(miao==60)miao=0;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen++;// if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi++;// if(shi==24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week++;// if(week==8)week=1;write_week(week);write_com(0x80+11);break;
case 5: day++;// if(day==32)day=1;write_nyr(8,day);write_com(0x80+8);break;
case 6: month++;//分加 时加 星期加日加 月加
if(month==13)month=1;write_nyr(5,month);write_com(0x80+5);break;
case 7: year++;//年加 if(year==100)year=0;write_nyr(2,year);write_com(0x80+2);break;
}
}
}
if(s3==0)//减按键函数同上 { delay(10);if(s3==0){ while(!s3);switch(s1num)//根据功能键相应次数做出调节 { case 1: miao--;if(miao==-1)miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen--;if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi--;if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week--;if(week==-1)week=7;write_week(week);write_com(0x80+11);break;
case 5: day--;if(day==-1)day=31;write_nyr(8,day);write_com(0x80+8);break;
case 6: month--;if(month==-1)month=12;write_nyr(5,month);write_com(0x80+5);break;
case 7: year--;if(year==-1)year=99;write_nyr(2,year);write_com(0x80+2);break;
}
} }
}
if(s4==0)// { delay(5);
闹钟按键 if(s4==0){ write_com(0x0f);//光标闪烁 s2num++;//记录按键次数 flag=1;while(!s4);switch(s2num)//光标闪烁点定位 { case 1:write_com(0x80+0x40+13);//分 break;
case 2:write_com(0x80+0x40+10);//时 break;
case 3:write_com(0x0c);//关闭闹钟设置 flag=0;s2num=0;break;
}
} }
if(s2num!=0)//闹钟设置 { if(s2==0)//闹钟加 { delay(10);if(s2==0){ while(!s2);switch(s2num)//根据功能键相应次数做出调节 { case 1: afen++;if(afen==60)afen=0;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi++;if(ashi==24)ashi=0;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
if(s3==0)//闹钟减 { delay(10);if(s3==0){ while(!s3);switch(s2num)//根据功能键相应次数做出调节 { case 1: afen--;if(afen==-1)afen=59;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi--;if(ashi==-1)ashi=23;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
} }
void wirte_ds1302_byte(uchar dat)//ds1302字节写 { uchar i;for(i=0;i<8;i++){ sclk=0;io=dat&0x01;dat=dat>>1;sclk=1;} }
void write_ds1302(uchar add,uchar dat)//ds1302写函数 { rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);wirte_ds1302_byte(dat);rst=0;io=1;sclk=1;}
uchar read_ds1302(uchar add)//ds1302{ uchar i,value;rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);for(i=0;i<8;i++){ value=value>>1;sclk=0;if(io){ value=value|0x80;} sclk=1;} rst=0;_nop_();// 空操作 sclk=0;_nop_();
读函数 sclk=1;io=1;return value;}
void set_rtc()//ds1302时间设置 { write_ds1302(0x8e,0x00);//关写保护
year1=year/10;//转换为十六进制 year=year%10;year=year+year1*16;write_ds1302(0x8c,year);
week1=week/10;week=week%10;week=week+week1*16;write_ds1302(0x8a,week);
month1=month/10;month=month%10;month=month+month1*16;write_ds1302(0x88,month);
day1=day/10;day=day%10;day=day+day1*16;write_ds1302(0x86,day);
shi1=shi/10;shi=shi%10;shi=shi+shi1*16;write_ds1302(0x84,shi);
fen1=fen/10;fen=fen%10;fen=fen+fen1*16;write_ds1302(0x82,fen);
miao1=miao/10;miao=miao%10;miao=miao+miao1*16;write_ds1302(0x80,miao);
write_ds1302(0x8e,0x80);//开写保护 flag1=0;}
void read_rtc()//从ds1302中读时间 { year2=read_ds1302(0x8d);week2=read_ds1302(0x8b);month2=read_ds1302(0x89);day2=read_ds1302(0x87);shi2=read_ds1302(0x85);fen2=read_ds1302(0x83);miao2=read_ds1302(0x81);}
void time_pros()//进制 {
year5=year2/16;year2=year2%16;year2=year2+year5*10;
month5=month2/16;month2=month2%16;month2=month2+month5*10;
day5=day2/16;day2=day2%16;day2=day2+day5*10;
shi5=shi2/16;shi2=shi2%16;shi2=shi2+shi5*10;
fen5=fen2/16;fen2=fen2%16;fen2=fen2+fen5*10;
miao5=miao2/16;miao2=miao2%16;miao2=miao2+miao5*10;
从ds1302中读出的时间转换为十
}
void display()//显示函数 { write_sfm(6,miao2);write_com(0x80+0x40+6);
write_sfm(3,fen2);write_com(0x80+0x40+3);
write_sfm(0,shi2);write_com(0x80+0x40+0);
write_week(week2);write_com(0x80+11);
write_nyr(8,day2);write_com(0x80+8);
write_nyr(5,month2);write_com(0x80+5);
write_nyr(2,year2);write_com(0x80+2);
if((ashi==shi2)&&(afen==fen2)){ alarm();} }
void alarm()// 闹钟 { beep=0;delay(1000);beep=1;} void main()//主函数 { init();//初始化 while(1){ keyscan();//按键函数
if(flag==0){ keyscan();read_rtc();time_pros();display();}
} }
第五篇:数字电子时钟课程设计2
数字电子时钟课程设计
题目:
数字电子时钟课程设计
目录
一、设计任务及设计要求…………………………………………(3)
二、设计方案论证
…………………………..………….(3)1.总体方案及框图 2.各部分论证
三、单元电路设计…………………………………………………(4)1.振荡器 ………………………………………………………(4)2.秒、分、时计数器…………………………………………(5)
3.显示译码/驱动器和LED七段数码显示管……………….(6)
4.分频器……………………………………………………(7)5.报时电路…………………………………………………(9)
四、总体电路设计及原理………………………………………(13)
五、元器件明细表………………………………………………(10)
六、心得体会……………………………………………………(11)
七、参考文献……………………………………………………(11)
一、设计任务及设计要求 1.设计任务
数字电子钟的逻辑电路 2.设计要求
(1)由晶振电路产生1HZ的校准秒信号。
(2)设计一个有“时”、“分”、“秒”(23小时59分59秒)显示切且具有校时、校分、校秒的功。
(3)整点报时功能。要求整点差10秒开始每隔1秒鸣叫一次,共五次,每次持续时间为一秒,前五次为500赫兹的声音,最后依次为1000赫兹的声音。(4)用中小规模集成电路组成电子钟,并在实验箱上进行组装和调试。(5)划出框图和逻辑电路图,写出设计,实验总结报告。
二、设计方案论证
数字钟原理框图如图1所示,电路一般包括以下几个部分:振荡器、分频器、译码显示电路、时分秒计数器、校时电路、报时电路。
图一
对于各个部分而言
数字钟计时的标准信号应该是频率相当稳定的1HZ秒脉冲,所以要设置标准时间源。
数字钟计时周期是24小时,因此必须设置24小时计数器,他应由模为60的秒计数器和分计数器及模为24的时计数器组成,秒、分、时由七段数码管显示。
为使数字钟走时与标准时间一致,校时电路是必不可少的。设计中采用开关控制校时直接用秒脉冲先后对“时”“分”“秒”计数器进行校时操作。
能进行整点报时。在从59分50秒开始,每隔2秒钟发出一次低音“嘟”的信号,连续五次,最后一次要求最高音“嘀”的信号,此信号结束即达到正点。
三、单元电路设计 1.各独立功能部件的设计(1)、振荡器 振荡器是计时器的核心,其作用是产生一个标准频率的脉冲信号振荡频率的精度和 稳定度决定了数字钟的质量。第一种方 案采用石英晶体振荡器,如图二。使用 振荡频率为32768HZ的石英晶体和反 向器构成一个稳定性极好、精度较高 的时间信号源。改变电容C可以
图 二
石英晶体振荡器
振荡器的频率进行微调,再通过一个反相器,输出32768HZ的方波将此方波的频率进行15次二分频后,在输出端刚好可得到频率为1HZ的脉冲信号。
第二种方案如图三采用集成电路555定时器与RC组成的多谐振荡器。输出的脉冲频率为fS=1/[(R1+2R2)C1ln2]=1KHZ,周期T=1/fS=1ms。若参数选择:R1=R2=10K欧姆,C1=47uF时,可以得到秒脉冲信号。
图三 方波信号发生器
附555定时器的功能表 输
出 输
出
阀值输入(v11)触发输入(v12)复位(RD)输出(VO)发电管T × × 0 0 导通
<2/3VCC <1/3VCC 1 1 截止 >2/3VCC >1/3VCC 1 0 导通 <2/3VCC >1/3VCC 1 不变 不变
(2)秒、分、时计数器
U1到U6 六个74LS161构成数字钟的秒、分、时计数器。
U1、U2共同构成秒计数器,它由两个74LS161构成六--十进制的计数器,如图四。U1作为秒个位十进制计数器,它的复位输入RD、和置位输入LD都接低电平,秒信号脉冲作为计数脉冲输入到CP1端,输出端C控制U2秒十位计数器的计数脉冲输入。Q1、Q2、Q3、Q4作为秒个位的计时值送至秒个位七段显示译码/驱动器。
U2作为秒十位六进制计数器,它的计数脉冲输入受到秒个位U1的控制,其计数器使能端EP、ET与U1的输出端C相连接。当U2计数器计到0011,即清零信号到复位输入端时,Q1、Q2、Q3、Q4输出的都是零。Q1、Q2、Q3、Q4作为秒十位的计时值送至秒十位七段显示译码/驱动器。U3、U4分别构成分个位十进制和分十位六进制计数器,如图四。U3、U4与U1、U2的连接方法相似。当计数器输出为01011001状态,U3(U1)、U4(U2)的LD端同时为“0”,使计数器立即返回到00000000状态。这样就构成了六十进制计数器。
图四 六十进制计数器
U5、U6共同构成时计数器,它由两个74LS161构成六十进制的计数器
如图五。U5作为时十位计数器,它的复位输入RD、和置位输入LD都接低电平,时信号脉冲作为计数脉冲输入到CP1端,输出端C控制U6秒十位计数器的计数脉冲输入。Q1、Q2、Q3、Q4作为秒个位的计时值送至秒个位七段显示译码/驱动器。当计数器输出为00100100状态,U5、U6的LD端同时为“0”,使计数器立即返回到00000000状态。这样就构成了二十四进制计数器。
U12
图五
二十四进制计数器
(3)显示译码/驱动器和LED七段数码显示管
六个74LS248集成电路构成数字钟的七段数码显示管显示译码/驱动器。74LS248七段显示译码器输出高电平有效,将8421BCD码译成七段(a、b、c、d、e、f、g)输出,用以直接驱动LED七段数码显示对应的十进制数。74LS248的显示功能:
显示功能见功能表的上半部分。[DCBA]是二进制码输入,要正确的执行显示功能,有关的功能端必须接合适的逻辑电平,这些功能端的作用随后介绍。对于0~9输入,[DCBA]相当BCD8421码。当超过9以后,译码器仍然有字型输出,具体见图六。当[DCBA]=1111时,数码管熄灭。实验时要在笔划段电极串联电阻,以保护LED数码管。表1 中规模显示译码器74LS248的功能表 十进制
或功能 输
入
输
出
D
C
B
A
a
b
c
d
e
f
g 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 H H H H H H H H H H H H H H H H H ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´
´ L
L L
L L
L L
L L
H L
L L
H H
L H
H L
L
L
H
L
H L
H
H
L L
H
H
H H H H H H H H H H H H H H H H H
H
H
H
H
H
H
L
L
H
H
L
L
L
L
H
H
L
H
H
L
H
H
H
H
H
L
L
H
L
H
H
L
L
H
H
H
L
H
H
L
H
H
H
L
H
H
H
H
H
H
H
H
L
L
L
L
图六 74LS248显示字型与输入的对应关系
如图七,六个LED七段数码显示管利用不同发光段组合的方式显示不同数码,都采用+5V电源作为每段发光二极管的驱动电源。需要发光的段为高电平,不发光的段为低电平。设计中采用共阴极数码管,每段发光二极管的正向降压,随显示光的颜色有所不同,通常约2V~3V,点亮电流在5~10mA。六个LED七段数码显示管分别显示秒个位、十位;分个位、十位;时个位、十位的计数十进制数
图七 显示译码/驱动器和数码显示管(4)分频器
分频器电路是由三个74LS90构成,如图八。74LS90是异步十进制计数器,它由一个一位二进制计数器和一个异步五进制计数器组成。将QA与CP2相连,计数脉冲由CP1端输入,输出由QA~QD引出,即得到十进制计数器。只有在复位输入R0(1)= R0(2)=0和置位输入S9(1)= S9(2)=0时,才能够在计数脉冲(下降沿)作用下实现二—五—十进制加计算。因为要对输入的脉冲进行三次10分频,三片74LS90的复位输入R0(1)、R0(2)和置位输入S9(1)、S9(2)都接低电平。振荡器输出的方波脉冲计数器作为U1的CP1端的输入时钟脉冲,U1的QD端的输出脉冲作为U2的CPA端的输入时钟脉冲,U2的QD端的输出脉冲作为U3的CP1端的输入时钟脉冲,U3的QD端的输出脉冲fO=fS/103¬¬¬¬¬¬¬=1HZ,即为秒信号方波脉冲,成为秒、分、时计数器的计数脉冲和时间校准信号。
将JK触发器的J、K端都接在高电平,Qn+1=JQn+KQn=Qn,每输入一个时钟脉冲后,触发器翻转一次,触发器处于计数状态。经过触发器的二分频,Q端输出为500HZ的脉冲作为低音脉冲。
经过U1、U2计数器的二次十分频,输出的脉冲频率为10HZ,作为秒校时脉冲。
图八
分频器 附74LS90二—五—十进制计数器功能图 复位输入 置位输入 输出
R0(1)R0(2)S9(1)S9(2)QA QB QC QD H H L × L L L L H H × L L L L L × × H H H L L H L × L × 计数 L × × L 计数 × L L × 计数 × L × L 计数
JK触发器的功能表 J K Qn Qn+1 说明 0 0 0 0 输出状态不变 1
0 1 0 0 输出状态与J端状态相同
0 0 0 1 输出状态与K端状态相同
1 1 0 1 每输入一个脉冲输出状态改变一次
0
(五)报时电路
整点报时电路要求在每个整点发出音响,因此需要对每个整点进行时间译码,以其输出驱动音响控制电路。如图九。
若要在每一整点发出五低音、一高音报时,需要对59分50秒到59分59秒进行时间译码。QD4~QA4是分十位输出,QD3~QA3是分个位输出,QD2~QA2是秒十位输出,QD1~QA1秒个位输出。在59分时,A= QC4 QA4 QD3 QA3=1;在50秒时,B= QC2 QA2=1;秒个位为0、2、4、6、8秒时,QA1=0,C= QA1=1;因而F1=ABC= QC4QA4 QD3 QA3 QC2 QA2 QA1仅在59分50秒、52秒、54秒、56秒、58秒时等于1,故可以用F1作低音的控制信号。当计数器每计到59分59秒时,A= QC4 QA4 QD3QA3=1,D= QC2 QA2 QD1 QA1=1,此时F2=AD=1。把F2接至JK触发器控制端J端,CP端加秒脉冲,则再计1秒到达整点时F3=1,故可用F3作一次高音控制信号。
用F1控制5次低音、F3控制高音,经音响放大器放大,每当“分”和“秒”计数器累计到59分50、52、54、56、58秒发出频率为500HZ的五次低音,0分0秒时发出频率为1000HZ的一次高音,每次音响的时间均为一秒钟,实现了整点报时的功能。
图九
整点报时电路
四、原理图(见最后一页)
五、元器件明细表
序号 元器件名称 型号规格 数量(个)备注 U0 集成定时器 5G555定时器 1 构成多谐振荡器 U1~U6 同步加法计数器 74161 6 构成模加法计数器 U7~U9 异步十进制计数器 74LS90 3 构成分频器
U10 七端显示译码器 74LS248 6 分别显示秒、分、时的数字 U11~U12 与非门 多输入与非门 2 U13 J-K触发器
C1、C2 电容C1=C2=104pf R1 R2 电阻R1 =2K、R2=5.1K R、R` 电阻R=1k,R`=47 U14 U20 门器件 非门 1
U15~U19 门器件 与门 6 多输入与门 U21~U23 门器件 与非门 3 多输入与非门 U24 触发器 J-K触发器 1 U25 晶体三级管 U26 喇叭实现闹铃
六、设计体会
在整个课程设计完后,总的感觉是:有收获。以前上课都是上一些最基本的东西,而现在却可以将以前学的东西作出有实际价值的东西。在这个过程中,我的确学得到很多在书本上学不到的东西,如:如何利用现有的元件组装得到设计要求,如何找到错误的原因,如何利用计算机来画图等等。但也遇到了不少的挫折,有时遇到了一个错误怎么找也找不到原因所在,找了老半天结果却是芯片的管脚接错了,有时更是忘接电源了。在学习中的小问题在课堂上不可能犯,在动手的过程中却很有可能犯。特别是在接电路时,一不小心就会犯错,而且很不容易检查出来。但现在回过头来看,还是挺有成就感的。
七、参考文献
姚福安.电子电路设计与实践.山东科学技术出版社第一版.2002 杨志亮.电路原理图设计技术.西北工业大学出版社第一版.2003 阎石.数字电子技术基础..高等教育出版社第四版.1998 童诗白.模拟电子技术基础.高等教育出版社第三版.2001 康华光.电子技术基础.高等教育出版社.2002 苏止丽.数字电子电路实验.武汉理工大学.2003 陈明义.电子技术课程设计使用教程 中南大学出版社第一版.2002
回答者: 命途多舛0913-一
级
2008-1-5 21:54
数字电子时钟课程设计
题目: 数字电子时钟课程设计
目 录
一、设计任务及设计要求…………………………………………(3)
二、设计方案论证 …………………………..………….(3)
1.总体方案及框图
2.各部分论证
三、单元电路设计…………………………………………………(4)
1.振荡器 ………………………………………………………(4)
2.秒、分、时计数器…………………………………………(5)
3.显示译码/驱动器和LED七段数码显示管……………….(6)
4.分频器……………………………………………………(7)
5.报时电路…………………………………………………(9)
四、总体电路设计及原理………………………………………(13)
五、元器件明细表………………………………………………(10)
六、心得体会……………………………………………………(11)
七、参考文献……………………………………………………(11)
一、设计任务及设计要求
1.设计任务
数字电子钟的逻辑电路
2.设计要求
(1)由晶振电路产生1HZ的校准秒信号。
(2)设计一个有“时”、“分”、“秒”(23小时59分59秒)显示切且具有校时、校分、校秒的功。
(3)整点报时功能。要求整点差10秒开始每隔1秒鸣叫一次,共五次,每次持续时间为一秒,前五次为500赫兹的声音,最后依次为1000赫兹的声音。
(4)用中小规模集成电路组成电子钟,并在实验箱上进行组装和调试。
(5)划出框图和逻辑电路图,写出设计,实验总结报告。
二、设计方案论证
数字钟原理框图如图1所示,电路一般包括以下几个部分:振荡器、分频器、译码显示电路、时分秒计数器、校时电路、报时电路。
图一
对于各个部分而言
数字钟计时的标准信号应该是频率相当稳定的1HZ秒脉冲,所以要设置标准时间源。
数字钟计时周期是24小时,因此必须设置24小时计数器,他应由模为60的秒计数器和分计数器及模为24的时计数器组成,秒、分、时由七段数码管显示。
为使数字钟走时与标准时间一致,校时电路是必不可少的。设计中采用开关控制校时直接用秒脉冲先后对“时”“分”“秒”计数器进行校时操作。 能进行整点报时。在从59分50秒开始,每隔2秒钟发出一次低音“嘟”的信号,连续五次,最后一次要求最高音“嘀”的信号,此信号结束即达到正点。
三、单元电路设计
1.各独立功能部件的设计
(1)、振荡器
振荡器是计时器的核心,其作用是产生一个标准频率的脉冲信号振荡频率的精度和
稳定度决定了数字钟的质量。第一种方
案采用石英晶体振荡器,如图二。使用
振荡频率为32768HZ的石英晶体和反
向器构成一个稳定性极好、精度较高的时间信号源。改变电容C可以
图 二 石英晶体振荡器
振荡器的频率进行微调,再通过一个反相器,输出32768HZ的方波将此方波的频率进行15次二分频后,在输出端刚好可得到频率为1HZ的脉冲信号。
第二种方案如图三采用集成电路555定时器与RC组成的多谐振荡器。输出的脉冲频率为fS=1/[(R1+2R2)C1ln2]=1KHZ,周期T=1/fS=1ms。若参数选择:R1=R2=10K欧姆,C1=47uF时,可以得到秒脉冲信号。
图三 方波信号发生器
附555定时器的功能表
输 出 输 出
阀值输入(v11)触发输入(v12)复位(RD)输出(VO)发电管T × × 0 0 导通
<2/3VCC <1/3VCC 1 1 截止
>2/3VCC >1/3VCC 1 0 导通
<2/3VCC >1/3VCC 1 不变 不变
(2)秒、分、时计数器
U1到U6 六个74LS161构成数字钟的秒、分、时计数器。
U1、U2共同构成秒计数器,它由两个74LS161构成六--十进制的计数器,如图四。U1作为秒个位十进制计数器,它的复位输入RD、和置位输入LD都接低电平,秒信号脉冲作为计数脉冲输入到CP1端,输出端C控制U2秒十位计数器的计数脉冲输入。Q1、Q2、Q3、Q4作为秒个位的计时值送至秒个位七段显示译码/驱动器。
U2作为秒十位六进制计数器,它的计数脉冲输入受到秒个位U1的控制,其计数器使能端EP、ET与U1的输出端C相连接。当U2计数器计到0011,即清零信号到复位输入端时,Q1、Q2、Q3、Q4输出的都是零。Q1、Q2、Q3、Q4作为秒十位的计时值送至秒十位七段显示译码/驱动器。
U3、U4分别构成分个位十进制和分十位六进制计数器,如图四。U3、U4与U1、U2的连接方法相似。当计数器输出为01011001状态,U3(U1)、U4(U2)的LD端同时为“0”,使计数器立即返回到00000000状态。这样就构成了六十进制计数器。
图四 六十进制计数器
U5、U6共同构成时计数器,它由两个74LS161构成六十进制的计数器 如图五。U5作为时十位计数器,它的复位输入RD、和置位输入LD都接低电平,时信号脉冲作为计数脉冲输入到CP1端,输出端C控制U6秒十位计数器的计数脉冲输入。Q1、Q2、Q3、Q4作为秒个位的计时值送至秒个位七段显示译码/驱动器。当计数器输出为00100100状态,U5、U6的LD端同时为“0”,使计数器立即返回到00000000状态。这样就构成了二十四进制计数器。
U12 图五 二十四进制计数器
(3)显示译码/驱动器和LED七段数码显示管
六个74LS248集成电路构成数字钟的七段数码显示管显示译码/驱动器。74LS248七段显示译码器输出高电平有效,将8421BCD码译成七段(a、b、c、d、e、f、g)输出,用以直接驱动LED七段数码显示对应的十进制数。74LS248的显示功能:
显示功能见功能表的上半部分。[DCBA]是二进制码输入,要正确的执行显示功能,有关的功能端必须接合适的逻辑电平,这些功能端的作用随后介绍。对于0~9输入,[DCBA]相当BCD8421码。当超过9以后,译码器仍然有字型输出,具体见图六。当[DCBA]=1111时,数码管熄灭。实验时要在笔划段电极串联电阻,以保护LED数码管。
表1 中规模显示译码器74LS248的功能表
图六 74LS248显示字型与输入的对应关系
如图七,六个LED七段数码显示管利用不同发光段组合的方式显示不同数码,都采用+5V电源作为每段发光二极管的驱动电源。需要发光的段为高电平,不发光的段为低电平。设计中采用共阴极数码管,每段发光二极管的正向降压,随显示光的颜色有所不同,通常约2V~3V,点亮电流在5~10mA。六个LED七段数码显示管分别显示秒个位、十位;分个位、十位;时个位、十位的计数十进制数
图七 显示译码/驱动器和数码显示管
(4)分频器
分频器电路是由三个74LS90构成,如图八。74LS90是异步十进制计数器,它由一个一位二进制计数器和一个异步五进制计数器组成。将QA与CP2相连,计数脉冲由CP1端输入,输出由QA~QD引出,即得到十进制计数器。只有在复位输入R0(1)= R0(2)=0和置位输入S9(1)= S9(2)=0时,才能够在计数脉冲(下降沿)作用下实现二—五—十进制加计算。因为要对输入的脉冲进行三次10分频,三片74LS90的复位输入R0(1)、R0(2)和置位输入S9(1)、S9(2)都接低电平。振荡器输出的方波脉冲计数器作为U1的CP1端的输入时钟脉冲,U1的QD端的输出脉冲作为U2的CPA端的输入时钟脉冲,U2的QD端的输出脉冲作为U3的CP1端的输入时钟脉冲,U3的QD端的输出脉冲fO=fS/103¬¬¬¬¬¬¬=1HZ,即为秒信号方波脉冲,成为秒、分、时计数器的计数脉冲和时间校准信号。
将JK触发器的J、K端都接在高电平,Qn+1=JQn+KQn=Qn,每输入一个时钟脉冲后,触发器翻转一次,触发器处于计数状态。经过触发器的二分频,Q端输出为500HZ的脉冲作为低音脉冲。
经过U1、U2计数器的二次十分频,输出的脉冲频率为10HZ,作为秒校时脉冲。
图八 分频器
附74LS90二—五—十进制计数器功能图
复位输入 置位输入 输出 R0(1)R0(2)S9(1)S9(2)QA QB QC QD H H L × L L L L H H × L L L L L × × H H H L L H L × L × 计数
L × × L 计数
× L L × 计数
× L × L 计数
JK触发器的功能表
J K Qn Qn+1 说明
0 0 0 0 输出状态不变1
0 1 0 0 输出状态与J端状态相同0 0 0 1 输出状态与K端状态相同1 1 0 1 每输入一个脉冲输出状态改变一次0
(五)报时电路
整点报时电路要求在每个整点发出音响,因此需要对每个整点进行时间译码,以其输出驱动音响控制电路。如图九。
若要在每一整点发出五低音、一高音报时,需要对59分50秒到59分59秒进行时间译码。QD4~QA4是分十位输出,QD3~QA3是分个位输出,QD2~QA2是秒十位输出,QD1~QA1秒个位输出。在59分时,A= QC4 QA4 QD3 QA3=1;在50秒时,B= QC2 QA2=1;秒个位为0、2、4、6、8秒时,QA1=0,C= QA1=1;因而F1=ABC= QC4QA4 QD3 QA3 QC2 QA2 QA1仅在59分50秒、52秒、54秒、56秒、58秒时等于1,故可以用F1作低音的控制信号。
当计数器每计到59分59秒时,A= QC4 QA4 QD3QA3=1,D= QC2 QA2 QD1 QA1=1,此时F2=AD=1。把F2接至JK触发器控制端J端,CP端加秒脉冲,则再计1秒到达整点时F3=1,故可用F3作一次高音控制信号。
用F1控制5次低音、F3控制高音,经音响放大器放大,每当“分”和“秒”计数器累计到59分50、52、54、56、58秒发出频率为500HZ的五次低音,0分0秒时发出频率为1000HZ的一次高音,每次音响的时间均为一秒钟,实现了整点报时的功能。
图九 整点报时电路
四、原理图(见最后一页)
五、元器件明细表
序号 元器件名称 型号规格 数量(个)备注
U0 集成定时器 5G555定时器 1 构成多谐振荡器 U1~U6 同步加法计数器 74161 6 构成模加法计数器
U7~U9 异步十进制计数器 74LS90 3 构成分频器
U10 七端显示译码器 74LS248 6 分别显示秒、分、时的数字
U11~U12 与非门 多输入与非门 2 U13 J-K触发器 1
C1、C2 电容 2 C1=C2=104pf R1 R2 电阻 2 R1 =2K、R2=5.1K R、R` 电阻 2 R=1k,R`=47 U14 U20 门器件 非门 1
U15~U19 门器件 与门 6 多输入与门
U21~U23 门器件 与非门 3 多输入与非门
U24 触发器 J-K触发器 1 U25 晶体三级管 1 U26 喇叭 1 实现闹铃
六、设计体会
在整个课程设计完后,总的感觉是:有收获。以前上课都是上一些最基本的东西,而现在却可以将以前学的东西作出有实际价值的东西。在这个过程中,我的确学得到很多在书本上学不到的东西,如:如何利用现有的元件组装得到设计要求,如何找到错误的原因,如何利用计算机来画图等等。但也遇到了不少的挫折,有时遇到了一个错误怎么找也找不到原因所在,找了老半天结果却是芯片的管脚接错了,有时更是忘接电源了。在学习中的小问题在课堂上不可能犯,在动手的过程中却很有可能犯。特别是在接电路时,一不小心就会犯错,而且很不容易检查出来。但现在回过头来看,还是挺有成就感的。