数字时钟完整版..
- 格式:doc
- 大小:1.17 MB
- 文档页数:36
数电设计数字钟基于Q U A R T U SHEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】大连理工大学本科实验报告题目:数电课设——多功能数字钟课程名称:数字电路课程设计学院(系):电信学部专业:电子与通信工程班级:学生姓名: ***************学号:***************完成日期:成绩:2010 年 12 月 17 日题目:多功能数字时钟一.设计要求1)具有‘时’、‘分’、‘秒’的十进制数字显示(小时从00~23)2)具有手动校时校分功能3)具有整点报时功能,从59分50秒起,每隔2秒钟提示一次4)具有秒表显示、计时功能(精确至百分之一秒),可一键清零5)具有手动定时,及闹钟功能,LED灯持续提醒一分钟6)具有倒计时功能,可手动设定倒计时范围,倒计时停止时有灯光提示,可一键清零二.设计分析及系统方案设计1. 数字钟的基本功能部分,包括时、分、秒的显示,手动调时,以及整点报时部分。
基本模块是由振荡器、分频器、计数器、译码器、显示器等几部分组成。
利用DE2硬件中提供的50MHZ晶振,经过分频得到周期为1s的时钟脉冲。
将该信号送入计数器进行计算,并把累加结果以“时”“分”“秒”的形式通过译码器由数码管显示出来。
进入手动调时功能时,通过按键改变控制计数器的时钟周期,使用的时钟脉冲进行调时计数(KEY1调秒,LOAD2调分,LOAD3调时),并通过译码器由七位数码从59分50秒开始,数字钟进入整点报时功能。
每隔两秒提示一次。
(本设计中以两个LED灯代替蜂鸣器,进行报时)2. 多功能数字钟的秒表功能部分,计时范围从00分秒至59分秒。
可由输入信号(RST1)异步清零,并由按键(EN1)控制计时开始与停止。
将DE2硬件中的50MHZ晶振经过分频获得周期为秒的时钟脉冲,将信号送入计数器进行计算,并把累计结果通过译码器由七位数码管显示。
摘要数字钟是一个对1Hz频率进行计数的电路.振荡器产生的时钟旌旗灯号经由火频器形成秒脉冲旌旗灯号,秒脉冲旌旗灯号输入计数器进行计数,显示出时光.秒计数器电路计满60后触发分计数器电路,分计数器电路计满60后触发时计数器电路,当计满24小时后重零开端计数.一般由振荡器.分频器.计数器.译码器.数码显示器等几部分构成.振荡电路:重要用来产生时光尺度旌旗灯号.石英晶体振荡器可以进步时光旌旗灯号的稳固度.分频器:振荡器产生的尺度旌旗灯号频率很高,要得到“秒”旌旗灯号,需必定级数的分频器进行分频.计数器:有了“秒”旌旗灯号,则可以依据60秒为1分,24小时为1天的进制,分离设定“时”.“分”.“秒”的计数器,分离为60进制,60进制,24进制计数器,并输出一分,一小时,一天的进位旌旗灯号.译码显示:将“时”“分”“秒”显示出来.将计数器输入状况,输入到译码器,产生驱动数码显示器旌旗灯号,呈现出对应的进位数字字型.症结词数字钟振荡计数校订目次2.1计划比较42.2计划选择63单元模块设计73.3.1按键一:光标的移位与闪耀123.3.2按键二:时光的上翻让时光得到修正143.3.3 按键三:肯定154 体系调试155 体系功效和指标参数155.1 体系功效166 设计总结和领会17申谢18参考文献18附录数字电子钟电路总图19数字电子钟是一个用数字电路实现的时,分,秒计时的装配,与机械式时钟比拟具有更高的精确性.本次的数字电子钟的设计道理就是一种典范的数字电路,个中还包含了一些组合逻辑电路和时序电路.本次的数字电子钟的设计重要目标是为了让我们更好的控制数字电子钟的道理,从而控制逻辑电路的一些典范应用,学会本身制造电子钟.经由过程对数字电子钟得设计进一步的懂得各类中小范围集成电路的感化和适用办法.我们此次设计的数字电子钟是以24小时为一个时光周期,显示的满刻度是23时59分59秒,在六位7段共阴极的数码管上精确显示其响应的时,分,秒.并设置了三个时光的按键,分离控制时光的移位闪耀,时光的上翻修正,时光的确认.便利认为控制和设置时光.同时为了包管计时的稳固性和计时的精确性我们采取了用32.768K 的晶体振荡器来产生时钟旌旗灯号,来供给表针时光的基准旌旗灯号.数字电子钟的整体设计道理框图如图一所示:秒,然后主动清零从00时00分00秒开端从新计时,别的还加进了按键部分的操纵,便利人们对时光的控制,设置,调剂.秒旌旗灯号产生器是全部体系的时基旌旗灯号,它直接决议了计时体系的精度,在此次设计中采取的是石英晶体振荡器加分频器来实现.将得到的尺度旌旗灯号1HZ送入秒计数器中,秒计数器采取的是60进制的计数器,每累计都60秒得时刻就会发出一个分脉冲旌旗灯号,该旌旗灯号将作为分计数器的时钟脉冲,分计数器也是采取的60进制的计数器,每累计到60分钟,发出一个时脉冲旌旗灯号,该旌旗灯号将被作为时脉冲时钟脉冲,式计数器采取的24进制的计数器,如许就可以实现一天24小时的累计.2.1 计划比较计划一:555构成的多谢振荡器如图二因为f=1.43(R1+2R2)C1,我们可以经由过程调剂R1,R2,C1的值,转变其输出的频率.计划二:晶体振荡器分频电路石英晶体振荡电路1,采取频率fs=32768HZ的石英晶体图三D1,D2是反向器,D1用于振荡,D2用于缓冲整形.Rf为反馈电电阻(10—100M),反馈电阻的感化为COMS反相器供给偏置,使其工作在放大状况.电容C1,C2与晶体配合构成pi型收集,完成对振荡器频率的控制,并供给须要的180度相移,最后输出fs=32768HZ.图三2,多级分频电路1HZ将32768HZ脉冲旌旗灯号输入到CD4060(如图四:CD4060的引脚图介绍)构成的脉冲振荡的14位二进制计数器,所以从最后一级Q14输出的脉冲旌旗灯号频率为:32768/16384=2HZ.再经由二次分频,得到最后的1HZ 的尺度旌旗灯号脉冲,即秒脉冲.如图五,就是所得到最后的脉冲旌旗灯号.图四:CD4060引脚图图五:1HZ的旌旗灯号产生的波形2.2 计划选择1,采取555多谢振荡器长处:555内部的比较器敏锐度较高,并且采取差分电路情势,它的振荡频率受电源电压和温度变更的影响很小.缺陷:要精确的输出1HZ的脉冲,对电容和电阻的数值精度请求很高,所以输出脉冲既不敷精确也不敷稳固.2,采取晶体振荡分频电路长处:因为晶体的阻抗频率响应可知,它的选频特征异常好,有一个极为稳固的串联谐振频率fs,且等效品德因数Q很高.只有频率为fs的旌旗灯号最轻易经由过程,且其他频率的旌旗灯号均会被晶体所衰减.3,比较的成果因为振荡器是数字钟的焦点,振荡器的稳固度及频率的精度决议了数字钟计时的精确程度.为了达到设计请求,获得更高的计时精度,我们在设计中选用了计划二即用晶体振荡器构成振荡电路.一般来说振荡器的频率越高,计时精度就越高.如图六图六3单元模块设计时光计数电路的设计将分频器产生的尺度基旌旗灯号即秒旌旗灯号经由秒计数器,分计数器,时计数器,分离得到“秒”个位,十位,“分”个位,十位以及“时”个位,十位的计时输出旌旗灯号,然后送至译码显示电路,以便实现用数码管显示时,分,秒的请求.在设计中“秒”和“分”的计数器应当为六十进制的计数器,而“时”计数器应当为二十四进制的计数器.在设计中采取的10进制的计数器74LS160来实现时光的计数单元的计数功效.74LS160的芯片引脚图如图七所示:图七:74LS160引脚图P0,P1,P2,P3---计数器的输入端QO,Q1,Q2,Q3—计数器的输出端CEP,CET---计数器的计数端CP---计数器的触发端TC---计数器的进位端R---计数器的清零端PE----计数器的置数端74LS160计数器是同步计数,异步清零表1是74LS160的逻辑表:计数器部分计数的道理图八:图八:计数器的道理图此图为“秒”计数器部分,用两片74LS160来构成60进制的计数器,因为160本身就是10进制的计数器,故在“秒”个位当主动的加到10时就会主动清零,同时向“秒”十位的计数器的进位,在这片160当“秒”十位和个位分离显示到“5”和“9”时向下一级的“分”计数器进位.同应当“分”的十位和个位分离显示“5”和“9”时向“时”计数器进位.当“时”计数器的十位和个位分离显示“2”和“4”时用反馈清零的办法将其清零.其“分”计数器,“时”计数器的道理图同“秒”计数器的道理图大致雷同.设计中“时”,“分”,“秒”的显示是选择共阴极的七段数码管显示的.共阴极七段数码管译码显示电路是将计数器输出的8421BCD码译成数码显示所须要的高下电平,其引脚如图九.在译码显示电路中采取的是CD4511-7段译码驱动器,其芯片的引脚如图十.译码器的A,B,C,D分离与十进制的计数器的四个输出端相连接a,b,c,d,e,f,g即为驱动七段数码管的旌旗灯号.其依据A,B,C,D所得的计数旌旗灯号,数码管就显示出相对应的字型.图九:共阴极七段数码管的引脚图图十:CD4511的引脚图个中A,B,C,D---BCD码得输入端a,b,c,d,e,f,g—译码的输出端,输出为“1”有用,用来驱动共阴极LED数码管.LT—测试输入端,LT=“0”时,译码输出全为“1”BI—消隐输入端,BI=“0”时,译码输出全为“0”LE—锁定器,LE=“1”时译码器处于锁定(保持)状况,译码器输出保持在LE=0时的数值,LE=0为正常译码其译码的显示电路如图十一所示:图十一:译码器的驱动显示电路三个按键的电路本次设计还用到了按键部分,设计顶用到了三个按键,其功效分离是移位并闪耀,时光的上翻,时光的肯定.设置这三个按键的目标其主如果为了人们能很好的控制和调剂时光.便利人们对时光的调剂.按键部分主如果采取各类逻辑门与计数芯片,译码芯片的有理联合来实现各个按键的功效的.如图十二图十二:三个按键按键一:光标的移位与闪耀认为部分:下之后计数器停滞计数即在这里给“秒”计数器输入的无效的旌旗灯号脉冲,此时数码管保持先前记下的时光不在走动.采取计数器160和译码器138的联合.给计数器160送一个初始数1即此时D3D2D1D0=0001.将计数器的Q2Q1Q0分离与138的输入端CBA相连接.且在138输出端的Y0接一个反相器包管在正常的情形下计数器能正常的计数.将输出端得Y0,Y1,Y2,Y3进行与运算,并将输出的值与产生的旌旗灯号脉冲进行与运算.在未按下按键的时刻则不会影响到脉冲的正常输入,计数器的正常计数.个中74LS138的引脚图如图十三:图十三:74LS138引脚图A2,A1,A0—译码器的3位二进制输入端Y0,Y1,Y2,Y3,Y4,Y5,Y6.,Y7—译码器的8个输出旌旗灯号,并且输出的均为低电平有用.S3,S2,S1—译码器的三个使能端,当S1=1,且S2=0,S3=0时,译码器处于正常的工作状况.闪耀部分:因为要使光标移位,须要断定认为在了那只数码管上,所以想到使数码管闪耀的办法,产生显著的视觉后果从而精确的断定须要转变那只数码管的时光值.斟酌到译码器CD4511的一个使能端BI,当BI 为高电平的时刻会产生消隐的现象.故在使数码管闪耀的这一功效,选择从译码器查找办法.数码管的闪耀与高下脉冲相连.当按键一被按下之后,译码器138的输出端Y1,Y2,Y3的值不竭的变更且有且只有一个为有用的点平0.当它们分离与旌旗灯号脉冲进行或运算后输出的的成果取决与旌旗灯号脉冲,当脉冲为高点平的时刻则数码管就熄灭,当脉冲输出的是低电平的时刻数码管就点亮.如斯的亮灭亮灭…….从而达到视觉上的数码管的闪耀功效.按键一电路如图十四,十五,十六图十四:计数器与138的联合图十五:与运算产生kk控制旌旗灯号脉冲图十六:光标的闪耀按键二:时光的上翻让时光得到修正按键二的功效主如果修正时光.在这里让时光上翻转变即当按键二被按下一次对应闪耀的数码管的值就加一次,一向到所得的值是我们本身想要的值为止.按键二必须在按键一被按下之后才有用.故当按键一被按下后译码器Y1,Y2,Y3有且有一个输出的是有用的低电平,按键二被按下后也会得到一个有用的低电平.将Y1,Y2,Y3分离与按键二得到的低电平进行或运算,并在得到的成果后面加一个反相器,如许就只有当输出的值均为0时才干得到1,如许就可以得到三个旌旗灯号clk1,clk2,clk3.同时要使计数器加数,只要给响应的计数器输入有用的正脉冲就可以了.故在设计中将得到的三个旌旗灯号对应的与计数器的脉冲输入相连接.如图十七:图十七:产生有用的信按键三:肯定按键三的功效就是肯定键即恢复正常有用的脉冲旌旗灯号,让计数器正常的计数,译码器正常的译码,数码管正常的显示时光.使按键部分的那些功效都消掉.当按键三被按下后即立时得到一个低电平的旌旗灯号.将按键三得到的旌旗灯号与计数器的清零端相连接,即可控制其的可否正常工作.从而让输出的kk为高电平,如许在kk与产生的旌旗灯号脉冲进行与运算的时刻就取决于产生的脉冲旌旗灯号.如许产生的脉冲旌旗灯号又恢复成为有用的脉冲旌旗灯号,使计数器正常的计数工作.4 体系调试单个元件的调试数码管共阴,共阳的检测:在proteus的仿真软件中将数码管的的a,b,c,d,e,f,g的随意率性一段或者几段置于高电平,数码管剩下的另一管脚置于低电平,假如数码管发亮且输出的字符是对应输入的字符的,那么此数码管为共阴数码管.假如数码管不亮,没有反响则解释数码管是共阳的数码管.时钟电路的调试将晶体振荡器电路产生的旌旗灯号脉冲经由过程proteus软件进行仿真.1,将仿真的示波器记到晶体振荡电路的波形的输出端,在示波器上显示出波形旌旗灯号的频率为32768HZ.2,再将仿真的示波器接到经由CD4060分频器后的输出端,得到的输出波形旌旗灯号的频率为2HZ.3,最后将仿真里面的示波器接到二分频器后的输出端得到的旌旗灯号波形的频率为1HZ即为全部设计须要的尺度基旌旗灯号.计数电路的调试在秒计数器上参加一个尺度的1HZ脉冲旌旗灯号,在proteus仿真软件长进行计数器的精确计数的调试.这部分重要调试的是“秒”计数器,“分”计数器的60进制得到调试,当“秒”或“分”的计数达到“59”时,“秒”或者“分”可以或许精确的清零并向前一计数器进位.其数码管的显示如图十八:图十八:时光的精确显示5 体系功效和指标参数5.1 体系功效该电路重要实现了时光的精确计数,在设计中将计数器74LS160与译码器CD4511,计数器74LS160和译码器74LS138,分频器与晶体振荡电路有用的分散在了一路,得到比较精确的时光显示.此外,加上三个按键的设置,便利了人们随时对时光的调剂,从而更好的控制时光.1.基旌旗灯号的频率1HZ2.电路供电+5v3设计总结和领会本次课程设计经由为期2周的不懈尽力,今朝根本达到了预期的请求,可以或许精确的以一秒为周期的在数码管上显示时光,并且三个按键也能精确的实现它们各自的功效,让人们能很好的调节时光.在设计中所采取的各个芯片都在运行很好的实现了它们各安闲设计中的功效感化.全部设计的道理简略,靠得住机能高,成本低,功效很轻易实现,并且实现的后果也异常的优越.因为此次设计是在放假时代自力完成的,所以在各模块之间的连接上,以及某些参数的肯定上可能还消失必定的问题.但经由过程此次设计,收成也颇多.总体上来说此次设计电路道理其实不难,但是在设计进程固然许多器械本身明确该那么做,但是在真正的应用中倒是其实是无从下手,碰到的许多小问题比本身想象中的要庞杂得许多,让本身疑惑是不是斟酌错了或者是走错了偏向.在设计中,许多芯片的功效是本身不是很熟习的,不合芯片之间的连接更是让本身觉得生疏.比方,在晶体振荡电路中产生的32768HZ的旌旗灯号与分频器CD4511的链接,分频的道理对当时设计本身来说是很隐约的,但是经由过程讯问同窗和先生后让本身对分频的道理有了懂得,并且还从许多的办法中选择了32768HZ的晶体振荡器和CD4511分频器来产生尺度的基旌旗灯号.在计数器的选择上,固然本身对这部分比较熟习,但是当真正的接触它时,才知道许多的器械不是本身想象中的那样轻易,许多的小错误就让本身觉得寸步难行.经由过程不竭的查阅材料懂得选择了十进制的74LS160实现了精确的计数功效.在按键部分,这是全部设计让我受益最多的部分,按键部分是本身在设计最后才做的部分,刚开端真的是无从下手,感到斟酌的器械许多,并且许多的器械本身又不会.在先生和同窗的帮忙下才让本身有了一个比较清楚的思绪,在设计中将计数器74LS160和译码器74LS138有机的联合来实现了三个按键的根本功效.经由过程此次的设计让本身熟习了许多器械,学会了许多器械,进修了本身已经学过的器械,也进修了本身没有接触过的器械.对计数器74LS160,译码器74LS138,CD4511,分频器CD4060都有了一个很清楚的熟习.同时不单对此次设计中应用到的芯片本身有了懂得,对其他得芯片如:74LS190,74LS161,触发器等也有懂得和熟习,对设计中的芯片的其他功效也有所懂得,如:计数器在必定的时刻也可以做为分频器应用等.此次为期两周的课程设计,让我对各类电路有所懂得,也让我懂得了关于数字时钟的道理和设计理念.经由过程本身的亲手实践,才让我熟习到本身的缺少.所以说,坐而言不如立而行,对于这些电路和连接照样须要本身亲手的现实操纵才会真正的懂得和控制,才会有深入的印象.致谢在这里我起首要感激我们这组的指导先生林竟力先生对我们的设计进程中的仔细指导.在设计和论文写作进程中,得到了先生的指导和点拨,使得我的理论和实践操纵才能都得到了进步.同时也要感激我们这和我一路合作的组员以及在我设计进程中碰到问题就教的同窗,他们的虚心帮忙和提示也是让我的设计能顺遂的完成的重要原因之一.【参考文献】[1] 康华光.[2]康华光.附录数字电子钟电路总图数字电子钟的总电路图。
可编辑修改精选全文完整版数字时钟设计一、题目分析1、功能介绍1)具有时、分、秒计数显示功能,以24小时循环计时。
2)时钟计数显示时有LED灯的花样显示。
3)具有调节小时、分钟及清零的功能。
4)具有整点报时功能。
2、总体方框图3、性能指标及功能设计1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。
2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。
我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。
3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。
可以根据我们自己任意时间的复位。
4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。
产生“滴答.滴答”的报警声音。
5)LED灯在时钟显示时有花样显示信号产生。
即根据进位情况,LED不停的闪烁,从而产生“花样”信号。
二、选择方案1、方案选择方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。
方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。
采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。
显示:小时采用24进制,而分钟和秒均60进制。
终上所述,考虑到试验时的简单性,故我选择了方案二。
三、细化框图根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:四、编写程序、仿真和分析1、秒计数器1)VHDL 语言描述程序见附录 2)秒计数器的仿真波形图3)波形分析数字时钟控制单元 时调整 分调整使能端信号 CLK 信号时显示 分显示 秒显示24进制 60进制 60进制LED 显示整点报花样显利用60进制计数器完成00到59的循环计数功能,当秒计数至59时,再来一个时钟脉冲则产生进位输出,即enmin=1;reset作为复位信号低电平有效,即高电平时正常循环计数,低电平清零。
#include<Windows.h>#include<string.h>#include<mmsystem.h>#include<wingdi.h>#include"resource.h"#include<math.h>#include<commdlg.h>#pragma comment(lib,"WinLib.lib")#pragma comment(lib,"WINMM.LIB")//导入声音用void SetDlgMenuID(UINT nMainDlgID,UINT nCalendarDlgID,UINT nMenuID); void SetButtonID(UINT nCalendarID,UINT nExitID,UINT nBiaoPan1,UINT nBiaoPan2,UINT nBiaoPan3);INT_PTR ShowMainDlg();/**********************************************************API函数参考:GetLocalTime: 获得当前时间(公历:年、月、日、周)MoveToEx: 移动划线的起点LineTo: 绘制到某一点SetTextColor: 设置要绘制的文字颜色TextOut: 绘制文字SetBkMode: 设置背景显示模式wsprintf: 整数转换为字符串,宽字符,用Unicode码GetClientRect: 获取窗口大小GetDC: 获取内存设备SetTimer: 设置定时器FillRect: 填充矩形CreateSolidBrush: 创建刷子RGB: 设置RGB颜色CreateFont:创建一种有特殊性的字体结构体类型参考:SYSTEMTIME: 描述时间类型,包括年月日、时分秒、周**********************************************************/HINSTANCE g_hInst;//保存操作系统传递进来的"应用程序实例句柄"//Windows程序入口函数int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){g_hInst = hInstance;SetDlgMenuID(IDD_DLG_CLOCK,IDD_DLG_CALENDAR,IDR_MENU);SetButtonID(ID_CALENDAR,ID_EXIT,ID_BIAO1,ID_BIAO2,ID_BIAO3);ShowMainDlg(IDD_DLG_CLOCK);}typedef struct _stDateTime{int nYear;int nMonth;int nDay;}stDateTime;//定义表格,存储年-2099年的农历信息:每年的大小月、闰月信息、春节所在的公历日期unsigned int LunarCalendarTable[199] ={0x04AE53,0x0A5748,0x5526BD,0x0D2650,0x0D9544,0x46AAB9,0x056A4D, 0x09AD42,0x24AEB6,0x04AE4A,/*1901-1910*/0x6A4DBE,0x0A4D52,0x0D2546,0x5D52BA,0x0B544E,0x0D6A43,0x296D37, 0x095B4B,0x749BC1,0x049754,/*1911-1920*/0x0A4B48,0x5B25BC,0x06A550,0x06D445,0x4ADAB8,0x02B64D,0x095742, 0x2497B7,0x04974A,0x664B3E,/*1921-1930*/0x0D4A51,0x0EA546,0x56D4BA,0x05AD4E,0x02B644,0x393738,0x092E4B, 0x7C96BF,0x0C9553,0x0D4A48,/*1931-1940*/0x6DA53B,0x0B554F,0x056A45,0x4AADB9,0x025D4D,0x092D42,0x2C95B6, 0x0A954A,0x7B4ABD,0x06CA51,/*1941-1950*/0x0B5546,0x555ABB,0x04DA4E,0x0A5B43,0x352BB8,0x052B4C,0x8A953F, 0x0E9552,0x06AA48,0x6AD53C,/*1951-1960*/0x0AB54F,0x04B645,0x4A5739,0x0A574D,0x052642,0x3E9335,0x0D9549, 0x75AABE,0x056A51,0x096D46,/*1961-1970*/0x54AEBB,0x04AD4F,0x0A4D43,0x4D26B7,0x0D254B,0x8D52BF,0x0B5452, 0x0B6A47,0x696D3C,0x095B50,/*1971-1980*/0x049B45,0x4A4BB9,0x0A4B4D,0xAB25C2,0x06A554,0x06D449,0x6ADA3D, 0x0AB651,0x093746,0x5497BB,/*1981-1990*/0x04974F,0x064B44,0x36A537,0x0EA54A,0x86B2BF,0x05AC53,0x0AB647, 0x5936BC,0x092E50,0x0C9645,/*1991-2000*/0x4D4AB8,0x0D4A4C,0x0DA541,0x25AAB6,0x056A49,0x7AADBD,0x025D52, 0x092D47,0x5C95BA,0x0A954E,/*2001-2010*/0x0B4A43,0x4B5537,0x0AD54A,0x955ABF,0x04BA53,0x0A5B48,0x652BBC, 0x052B50,0x0A9345,0x474AB9,/*2011-2020*/0x06AA4C,0x0AD541,0x24DAB6,0x04B64A,0x69573D,0x0A4E51,0x0D2646, 0x5E933A,0x0D534D,0x05AA43,/*2021-2030*/0x36B537,0x096D4B,0xB4AEBF,0x04AD53,0x0A4D48,0x6D25BC,0x0D254F, 0x0D5244,0x5DAA38,0x0B5A4C,/*2031-2040*/0x056D41,0x24ADB6,0x049B4A,0x7A4BBE,0x0A4B51,0x0AA546,0x5B52BA, 0x06D24E,0x0ADA42,0x355B37,/*2041-2050*/0x09374B,0x8497C1,0x049753,0x064B48,0x66A53C,0x0EA54F,0x06B244, 0x4AB638,0x0AAE4C,0x092E42,/*2051-2060*/0x3C9735,0x0C9649,0x7D4ABD,0x0D4A51,0x0DA545,0x55AABA,0x056A4E, 0x0A6D43,0x452EB7,0x052D4B,/*2061-2070*/0x8A95BF,0x0A9553,0x0B4A47,0x6B553B,0x0AD54F,0x055A45,0x4A5D38, 0x0A5B4C,0x052B42,0x3A93B6,/*2071-2080*/0x069349,0x7729BD,0x06AA51,0x0AD546,0x54DABA,0x04B64E,0x0A5743, 0x452738,0x0D264A,0x8E933E,/*2081-2090*/0x0D5252,0x0DAA47,0x66B53B,0x056D4F,0x04AE45,0x4A4EB9,0x0A4D4C, 0x0D1541,0x2D92B5 /*2091-2099*/};char* TianGanDizhi[60]={"甲子", "乙丑","丙寅","丁卯","戊辰","已巳","庚午","辛未","壬申","癸酉","甲戌","乙亥","丙子","丁丑","戊寅","已卯","庚辰","辛巳","壬午","癸未","甲申","乙酉","丙戌","丁亥","戊子","已丑","庚寅","辛卯","壬辰","癸巳","甲午","乙未","丙申","丁酉","戊戌","已亥","庚子","辛丑","壬寅","癸卯","甲辰","乙巳","丙午","丁未","戊申","已酉","庚戌","辛亥","壬子","癸丑","甲寅","乙卯","丙辰","丁巳","戊午","已未","庚申","辛酉","壬戌","癸亥"char *ChDayTable[] ={"*","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};char *ChMonthTable[] = {"*","正","二","三","四","五","六","七","八","九","十","十一","腊"};//定义表格,存储每月日离元旦的天数(不考虑瑞年)unsigned int MonthAdd[12] ={0,31,59,90,120,151,181,212,243,273,304,334};//定义用户要显示的年、月、日unsigned int nCurrentYear=0; //button控制年unsigned int nCurrentMonth=0;//月unsigned int nCurrentDay=0; //日UINT LiteSongs = 0; //判断是否听歌UINT Total=0; //我自定义的变量,当月的总天数UINT PreTotal=0; //自定义的当月的前一月的总天数UINT BUTTON6=0;UINT BUTTON4=0;int k=0;int m=0;//TCHAR Hours[255];SYSTEMTIME BellTime;UINT Inthour=0;//判断某年是否为公历瑞年int IsLeapYear(WORD iYear) //学生需要修改此函数,已经修改{if(((iYear%4==0)&&!(iYear%100==0))||(iYear%400==0))return 1;elsereturn 0;}//公历日期转农历日期的函数void SunToLunar(const stDateTime* pSunDay,stDateTime* pLunarDay) {int i=0;int SunDiff=0;int SpringDiff=0;int nSpringYear=pSunDay->nYear;int nSpringMonth=1;int nSpringDay=0;//计算当前公历日离当年元旦的天数SunDiff = MonthAdd[pSunDay->nMonth-1] + pSunDay->nDay - 1;if(IsLeapYear(pSunDay->nYear) && (pSunDay->nMonth > 2) )//若是瑞年且大于月,天数再加SunDiff++;//计算春节所在公历日离元旦的天数:通过查表,计算当年的春节所在的公历日期,if(((LunarCalendarTable[pSunDay->nYear - 1901] & 0x60)>>5)==1)//若春节在公历月SpringDiff=(LunarCalendarTable[pSunDay->nYear-1901]&0x1F)-1;else//若春节在公历月SpringDiff=(LunarCalendarTable[pSunDay->nYear-1901]&0x1F)-1+31;//SunDiff和SpringDiff的差就是当前公历日离春节的天数if(SunDiff>=SpringDiff)//公历日在春节后{int x = SunDiff - SpringDiff;int bLunar = (LunarCalendarTable[nSpringYear - 1901] & 0xF00000)>>20;//闰月月份i=0;nSpringMonth=1;for(;;){int a = (LunarCalendarTable[pSunDay->nYear-1901] & (0x80000>>i));//计算大小月if(a==0)a=29;elsea=30;if(x<a)break;x =x - a;i++;nSpringMonth++;}nSpringDay =x+1;//如果有闰月if(nSpringMonth>bLunar && bLunar>0)nSpringMonth--;}else//公历日在春节前{int x = SpringDiff-SunDiff;int nShift=0;int bLunar = (LunarCalendarTable[nSpringYear - 1901] & 0xF00000)>>20;//闰月月份i=0;nSpringYear--;//需要上一年的农历信息nSpringMonth=12;//从最后一个月开始计算if (bLunar == 0)//如果没有润月nShift = 0x100;elsenShift = 0x80;for(;;){int a = (LunarCalendarTable[nSpringYear-1901] & (nShift<<i));//计算大小月if(a==0)a=29;elsea=30;if(x<a){x = a-x;break;}x =x - a;i++;nSpringMonth--;}nSpringDay =x+1;if(nSpringMonth<bLunar && bLunar>0)nSpringMonth++;}pLunarDay->nYear = nSpringYear;pLunarDay->nMonth= nSpringMonth;pLunarDay->nDay = nSpringDay;}//根据公历日期获得星期int GetDayOfWeek(const stDateTime* pSunDay){//根据泰勒公式//nWeek = [nYear1÷] - 2*nYear1 + nYear2 + [nYear2÷] + [26(nMonth+1)÷] + nDay - 1int nWeek=0;int nYear1=pSunDay->nYear/100;//年的前两位数字int nYear2=pSunDay->nYear%100;//年的后两位数字int nDay=pSunDay->nDay; //公立日int nMonth=pSunDay->nMonth;//公立月数,所求的月份如果是月或月,//则应视为上一年的月或月,//也就是公式中nMonth的取值范围是从到而不是从到if(nMonth==1 || nMonth==2){nMonth=12+nMonth;nYear1=(pSunDay->nYear-1)/100;//年的前两位数字nYear2=(pSunDay->nYear-1)%100;//年的后两位数字}nWeek = nYear1/4 - 2*nYear1 + nYear2 + nYear2/4 + (26*(nMonth+1))/10 + nDay - 1;if(nWeek < 0)nWeek = ((nWeek)%7+7);// 有问题吗?nWeek可能小于零,循环加elsenWeek = (nWeek)%7;return nWeek;}//根据公立年得到农历干支年char* GetGanZhi(int nYear){int i=(nYear-1984)%60;return TianGanDizhi[i];}//日历绘制函数,学生自己实现该函数void DrawCalendar(HDC hDC,int nWidth,int nHeight){//获得日历的背景色stDateTime SunDay,LunarDay; //存储当时年月日SYSTEMTIME DateTime; //系统时间RECT rc;HBRUSH hBrush;HFONT hFont;TCHAR RILI[255]; //日历的标题TCHAR GraTime[255]; //表格日期UINT xOrg=50; //x起始坐标UINT yOrg=50; //y起始坐标UINT xRight=nWidth-45; //X的右端不包括UINT yBottom = nHeight-30; //Y的底部UINT i=0,biaoGe=0; //日历表格用TCHAR *WeekDay[] = {"日","一","二","三","四","五","六"};TCHAR *ShuXiang[]= {"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};UINT Week=0;//列数UINT Hang=0;//行数TCHAR Str[255];//农历和公历年月字符UINT week=0;UINT hangkuan=0,liekuan=0;UINT First=0;UINT xLeft=0;UINT yRigth=0;UINT ShengXiao=0;UINT BeiJing=0;HBITMAP hBkmap;//得到图片HDC hdc;//绘制日历的矩形背景(改变皮肤)hdc = CreateCompatibleDC(hDC);switch (nCurrentMonth%12){case 0:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/yiyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 1:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/eryue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 2:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/sanyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) ;break;case 3:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/siyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 4:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/wuyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 5:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/liuyue.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE) ;break;case 6:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/qi.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 7:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/ba.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 8:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/jiu.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 9:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/shi.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 10:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/shiyi.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 11:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/beijing/shier.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;}SelectObject(hdc,hBkmap);BitBlt(hDC,0,0,nWidth,nHeight,hdc,0,0,SRCCOPY);SetRect (&rc,xOrg+65,yOrg,xRight-65,yOrg+25);hBrush=CreateSolidBrush(RGB(230,0,150));FillRect(hDC,&rc,hBrush);SetRect (&rc,xOrg,yOrg,xOrg+65,yOrg+25);hBrush=CreateSolidBrush(RGB(0,255,255));FillRect(hDC,&rc,hBrush);SetRect (&rc,xRight-65,yOrg,xRight,yOrg+25);hBrush=CreateSolidBrush(RGB(0,255,255));FillRect(hDC,&rc,hBrush);//绘制星期背景色MoveToEx(hDC,xOrg,yOrg,NULL);LineTo(hDC,xRight,yOrg);MoveToEx(hDC,xOrg,yOrg,NULL);LineTo(hDC,xOrg,yBottom);MoveToEx(hDC,xRight,yOrg,NULL);LineTo(hDC,xRight,yBottom);MoveToEx(hDC,xOrg,yBottom,NULL);LineTo(hDC,xRight,yBottom);//星期标题框MoveToEx(hDC,xOrg,yOrg+25,NULL);LineTo(hDC,xRight,yOrg+25);//行biaoGe = yBottom-yOrg-25;//只是日历的高度biaoGe = biaoGe/6;//高度分为六块hangkuan=biaoGe;for(i=0;i<5;i++)//画五行{MoveToEx(hDC,xOrg,yOrg+25+biaoGe*(i+1),NULL);LineTo(hDC,xRight,yOrg+25+biaoGe*(i+1));}//列biaoGe = xRight-xOrg;//只是日历的宽度biaoGe = biaoGe/7;//要七列liekuan=biaoGe;for(i=0;i<6;i++)//画七列{MoveToEx(hDC,xOrg+biaoGe*(i+1),yOrg,NULL);LineTo(hDC,xOrg+biaoGe*(i+1),yBottom);}//绘制‘星期’标题框内的文字SetTextColor(hDC,RGB(255,0,0));TextOut(hDC,xOrg+20,yOrg+6,WeekDay[0],strlen(WeekDay[0]));//星期日的//绘制“属相”的文字SetTextColor(hDC,RGB(0,100,255));switch((nCurrentYear-4)%12)//jisuan{case 0:TextOut(hDC,xOrg-35,yOrg,ShuXiang[0],strlen(ShuXiang[0]));break;case 1:TextOut(hDC,xOrg-35,yOrg,ShuXiang[1],strlen(ShuXiang[1]));break;case 2:TextOut(hDC,xOrg-35,yOrg,ShuXiang[2],strlen(ShuXiang[2]));break;case 3:TextOut(hDC,xOrg-35,yOrg,ShuXiang[3],strlen(ShuXiang[3]));break;case 4:TextOut(hDC,xOrg-35,yOrg,ShuXiang[4],strlen(ShuXiang[4]));break;case 5:TextOut(hDC,xOrg-35,yOrg,ShuXiang[5],strlen(ShuXiang[5]));break;case 6:TextOut(hDC,xOrg-35,yOrg,ShuXiang[6],strlen(ShuXiang[6]));break;case 7:TextOut(hDC,xOrg-35,yOrg,ShuXiang[7],strlen(ShuXiang[7]));break;case 8:TextOut(hDC,xOrg-35,yOrg,ShuXiang[8],strlen(ShuXiang[8]));break;case 9:TextOut(hDC,xOrg-35,yOrg,ShuXiang[9],strlen(ShuXiang[9]));break;case 10:TextOut(hDC,xOrg-35,yOrg,ShuXiang[10],strlen(ShuXiang[10]));break;case 11:TextOut(hDC,xOrg-35,yOrg,ShuXiang[11],strlen(ShuXiang[11]));break;}SetTextColor(hDC,RGB(0,0,0));for(i=1;i<6;i++)//星期一到六{TextOut(hDC,xOrg+20+biaoGe*i,yOrg+6,WeekDay[i],strlen(WeekDay[i ]));}SetTextColor(hDC,RGB(255,0,0));TextOut(hDC,xOrg+20+biaoGe*6,yOrg+6,WeekDay[6],strlen(WeekDay[6 ]));//以下代码是公历显示if(nCurrentYear==0)//如果当前日期还没有被设定{GetLocalTime(&DateTime);nCurrentYear = DateTime.wYear;nCurrentMonth= DateTime.wMonth;nCurrentDay =DateTime.wDay;}SunDay.nYear = nCurrentYear;SunDay.nMonth = nCurrentMonth;SunDay.nDay = nCurrentDay;SunToLunar(&SunDay,&LunarDay);//得到农历TextOut(hDC,80,28,ChMonthTable[LunarDay.nMonth],strlen(ChMonthTable[LunarDay.nMonth]));//农历显示TextOut(hDC,110,28,"月",strlen("月"));SunDay.nDay = 1;wsprintf(GraTime,"%.4d年%.2d月%.2d日",nCurrentYear,nCurrentMonth,nCurrentDay);//现在时间TextOut(hDC,50,10,GraTime,strlen(GraTime));//标题的时间//十二生肖图片hdc = CreateCompatibleDC(hDC);switch((nCurrentYear-4)%12){case 0:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/0.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 1:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 2:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/2.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 3:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/3.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 4:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/4.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 5:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/5.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 6:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/6.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 7:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/7.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 8:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/8.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 9:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/9.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 10:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/10.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;case 11:hBkmap = (HBITMAP)LoadImage(g_hInst,"../image/shengxiao/11.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);break;}SelectObject(hdc,hBkmap);BitBlt(hDC,7,20,150,150,hdc,0,0,SRCCOPY);//该月的总天数if(SunDay.nMonth==12){//PreTotal=30;Total=31;elseTotal=MonthAdd[SunDay.nMonth]-MonthAdd[SunDay.nMonth-1];if(IsLeapYear(SunDay.nYear)&&SunDay.nMonth==2){Total++;}//前一月的总天数if(SunDay.nMonth==1)PreTotal=31;else if(SunDay.nMonth==3){PreTotal=28;if(IsLeapYear(SunDay.nYear))PreTotal++;}else if(SunDay.nMonth==12)PreTotal=30;elsePreTotal=MonthAdd[SunDay.nMonth-1]-MonthAdd[SunDay.nMonth-2];First=GetDayOfWeek(&SunDay); //该月的第一天是星期几for(i=1;i<=Total;i++){SunDay.nYear = nCurrentYear;SunDay.nMonth = nCurrentMonth;SunDay.nDay=i; //从一号开始week=GetDayOfWeek(&SunDay);//得到该月第i号是星期几 SunToLunar(&SunDay,&LunarDay);//得到农历Week=week%7; //从第Week列开始Hang=((First+i-1)-(First+i-1)%7)/7; //从第Hang行开始xLeft=xOrg+15+(Week)*liekuan;yRigth=yOrg+40+(Hang)*hangkuan;if(DateTime.wYear==SunDay.nYear&&DateTime.wMonth==SunDay.nMonth &&DateTime.wDay==i)//显示今天{SetRect (&rc,xOrg+(Week)*liekuan,yOrg+25+(Hang)*hangkuan,xOrg+(Week)*liekuan+liekuan,yOrg+25+(Hang)*hangkuan+hangkuan) ;hBrush=CreateSolidBrush(RGB(0,255,255));FillRect(hDC,&rc,hBrush);}if(nCurrentYear==SunDay.nYear&&nCurrentMonth==SunDay.nMonth&&nC urrentDay==i)//动态显示每一天{SetRect (&rc,xOrg+(Week)*liekuan,yOrg+25+(Hang)*hangkuan,xOrg+(Week)*liekuan+liekuan,yOrg+25+(Hang)*hangkuan+hangkuan) ;hBrush=CreateSolidBrush(RGB(255,255,0));FillRect(hDC,&rc,hBrush);}SetTextColor(hDC,RGB(0,0,255));//节日颜色if(SunDay.nMonth==1&&SunDay.nDay==1){TextOut(hDC,xLeft,yRigth,"元旦",strlen("元旦"));//显示公历}else if(SunDay.nMonth==2&&SunDay.nDay==14){TextOut(hDC,xLeft,yRigth,"情人节",strlen("情人节"));}else if(SunDay.nMonth==5&&SunDay.nDay==1){TextOut(hDC,xLeft,yRigth,"劳动节",strlen("劳动节"));else if(SunDay.nMonth==5&&SunDay.nDay==4){TextOut(hDC,xLeft,yRigth,"青年节",strlen("青年节"));}else if(SunDay.nMonth==9&&SunDay.nDay==10){TextOut(hDC,xLeft,yRigth,"教师节",strlen("教师节"));}else if(SunDay.nMonth==10&&SunDay.nDay==1){TextOut(hDC,xLeft,yRigth,"国庆节",strlen("国庆节"));}else if(SunDay.nMonth==11&&SunDay.nDay==11){TextOut(hDC,xLeft,yRigth,"光棍节",strlen("光棍节"));}else if(SunDay.nMonth==11&&SunDay.nDay==24){TextOut(hDC,xLeft,yRigth,"感恩节",strlen("感恩节"));}else if(SunDay.nMonth==12&&SunDay.nDay==25){TextOut(hDC,xLeft,yRigth,"圣诞节",strlen("圣诞节"));}else{wsprintf(Str,"%i",i);SetTextColor(hDC,RGB(0,0,255));TextOut(hDC,xLeft,yRigth,Str,strlen(Str));//显示公历}//显示农历SetTextColor(hDC,RGB(0,0,255));//节日颜色if(LunarDay.nMonth==1&&LunarDay.nDay==1){TextOut(hDC,xLeft,yRigth+15,"春节",strlen("春节"));//农历显示else if(LunarDay.nMonth==1&&LunarDay.nDay==15){TextOut(hDC,xLeft,yRigth+15,"元宵节",strlen("元宵节"));//农历显示}else if(LunarDay.nMonth==5&&LunarDay.nDay==5){TextOut(hDC,xLeft,yRigth+15,"端午节",strlen("端午节"));//农历显示}else if(LunarDay.nMonth==9&&LunarDay.nDay==15){TextOut(hDC,xLeft,yRigth+15,"中秋节",strlen("中秋节"));//农历显示}else if(LunarDay.nMonth==9&&LunarDay.nDay==9){TextOut(hDC,xLeft,yRigth+15,"重阳节",strlen("重阳节"));//农历显示}else{SetTextColor(hDC,RGB(255,255,0));if(LunarDay.nDay==1)//月初改为月名{TextOut(hDC,xLeft,yRigth+15,ChMonthTable[LunarDay.nMonth],strlen(ChMonthTable[LunarDay.nMonth]));TextOut(hDC,xLeft+20,yRigth+15,"月",strlen("月"));}elseTextOut(hDC,xLeft,yRigth+15,ChDayTable[LunarDay.nDay],strlen(ChDayTable[LunarDay.nDay]));//农历显示}}//forhFont=CreateFont(44,20,0,100,FW_NORMAL,TRUE,0,0,ANSI_CHARSET,OU T_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_MODERN, "华文新魏"); //字体输出格式SelectObject(hDC,hFont);SetTextColor(hDC,RGB(50,50,255));wsprintf(RILI,"My>>万年历>> ");TextOut(hDC,200,10,RILI,10);}//事件函数:点击日历界面上各个按钮后被调用,学员自己实现该函数//注意:该函数调用完后,系统自动调用DrawCalendar函数// 因此,可以理解为,该函数和DrawCalendar函数是联动的void CalendarButtonEvent(UINT nID,HWND hDlg) //学生需要修改此函数{TCHAR Hours[255];int temp1;switch (nID){case IDC_BTN_YEARUP://点击了"年↑"按钮nCurrentYear++;break;case IDC_BTN_YEARDOWN:nCurrentYear--;break;case IDC_BTN_MONTHUP:{nCurrentMonth++;if(nCurrentMonth>12){nCurrentYear+=1;nCurrentMonth=1;}}break;case IDC_BTN_MONTHDOWN:{if(nCurrentMonth==1){nCurrentYear--;nCurrentMonth=12;}elsenCurrentMonth--;}break;case IDC_BTN_TODAY://GetDlgItemText(hDlg,IDC_BELL,Hours,sizeof(Hours));//nCurrentYear = atoi(Hours);nCurrentYear=0;break;case IDC_BUTTON_Day1://动态显示显示每一天{nCurrentDay++;if(nCurrentDay>Total){nCurrentDay=1;nCurrentMonth++;if(nCurrentMonth>12){nCurrentYear+=1;nCurrentMonth=1;}}}break;case IDC_BUTTON_Day2://动态显示显示每一天{nCurrentDay--;if(nCurrentDay<=0)nCurrentDay=PreTotal;nCurrentMonth--;if(nCurrentMonth==0){nCurrentYear--;nCurrentMonth=12;}}}break;case IDC_PLAYSONG:k++;{switch ( k%3){case 0:mciSendString("stop ../image/sound/b.mp3","",0,NULL); mciSendString("play ../image/sound/a.mp3","",0,NULL);break;case 1:mciSendString("stop ../image/sound/a.mp3","",0,NULL); mciSendString("play ../image/sound/y.mp3","",0,NULL);break;case 2:mciSendString("stop ../image/sound/y.mp3","",0,NULL); mciSendString("play ../image/sound/b.mp3","",0,NULL);break;}}break;case IDC_BUTTON6:m++;{switch ( m%3){case 0:mciSendString("pause ../image/sound/a.mp3","",0,NULL);break;case 1:mciSendString("pause ../image/sound/y.mp3","",0,NULL);break;case 2:mciSendString("pause ../image/sound/b.mp3","",0,NULL);break;}}break;case IDC_BUTTON_BELL:GetDlgItemText(hDlg,IDC_EDIT_YEAR,Hours,sizeof(Hours));temp1 = atoi(Hours);nCurrentYear = temp1;nCurrentMonth = 1;break;}}//该函数每.5秒被调用一次,时钟界面上的文字绘制,学生自己实现该函数void DrawClockText(HDC hDC){ //TCHAR year[255];//获得本地年月日时间stDateTime DateTime;stDateTime DateTime1,DateTime2; //得到公历农历日期 TCHAR HTime[255]; //存储时分秒TCHAR YTime[255]; //存储年TCHAR MTime[255]; //存储月TCHAR DTime[255];TCHAR TGAN[255]; //获得天干地支SYSTEMTIME LocTime; //定义当地时间RECT rec;HBRUSH hBrush;HFONT hfon;GetClientRect(hDC,&rec) ; //得到背影区域SetRect (&rec,33,52,94,65) ; //设置这块区域hBrush = CreateSolidBrush( RGB(0,0,222)); //建立画刷颜色FillRect(hDC,&rec,hBrush);SetBkMode(hDC,TRANSPARENT); //设置背景涂画,以备下次调用//获取星期和时间(时分秒)SetTextColor(hDC,RGB(111,208,252)); //字体颜色GetLocalTime(&LocTime);wsprintf(HTime,"%.2d:%.2d:%.2d",LocTime.wHour,LocTime.wMinute,L ocTime.wSecond);SetTextColor(hDC,RGB(235,255,0));SetBkMode(hDC,3);TextOut(hDC,35,50,HTime,8) ;//获得星期GetLocalTime(&LocTime);if(LocTime.wHour==Inthour)mciSendString("play ../image/sound/12.mp3","",0,NULL);//整点报时if(LocTime.wSecond==0&&LocTime.wMinute==0){switch(LocTime.wHour){case 6:mciSendString("play ../image/sound/06.mp3","",0,NULL);break;case 7:mciSendString("play ../image/sound/07.mp3","",0,NULL);break;case 8:mciSendString("play ../image/sound/08.mp3","",0,NULL);break;case 9:mciSendString("play ../image/sound/09.mp3","",0,NULL);break;case 10:mciSendString("play ../image/sound/10.mp3","",0,NULL);break;case 11:mciSendString("play ../image/sound/11.mp3","",0,NULL);break;case 12:mciSendString("play ../image/sound/12.mp3","",0,NULL);break;case 13:mciSendString("play ../image/sound/13.mp3","",0,NULL);break;case 14:mciSendString("play ../image/sound/14.mp3","",0,NULL);break;case 15:mciSendString("play ../image/sound/15.mp3","",0,NULL);break;case 16:mciSendString("play ../image/sound/16.mp3","",0,NULL);break;}}DateTime.nYear = LocTime.wYear ;DateTime.nMonth = LocTime.wMonth ;DateTime.nDay = LocTime.wDay ;SetTextColor(hDC,RGB(255,255,0));//字体颜色switch(GetDayOfWeek(&DateTime)){case 1:TextOut(hDC,41,69,"星期一",6) ;break;case 2:TextOut(hDC,41,69,"星期二",6) ;break;case 3:TextOut(hDC,41,69,"星期三",6) ;break;case 4:TextOut(hDC,41,69,"星期四",6) ;break;case 5:TextOut(hDC,41,69,"星期五",6) ;break;case 6:TextOut(hDC,41,69,"星期六",6) ;break;case 7:TextOut(hDC,41,69,"星期日",6) ;break;default:break;}//得到天干GetLocalTime(&LocTime);wsprintf(TGAN,GetGanZhi(LocTime.wYear));SetTextColor(hDC,RGB(250,100,100)); //字体颜色TextOut(hDC,48,89,TGAN,4);//获得农历的年月日GetLocalTime(&LocTime);DateTime1.nYear = LocTime.wYear ;DateTime1.nMonth = LocTime.wMonth ;DateTime1.nDay = LocTime.wDay ;SetTextColor(hDC,RGB(255,255,0));SunToLunar(&DateTime1,&DateTime2);//调用农历函数TextOut(hDC,70,35,ChDayTable[DateTime2.nDay],4);if(DateTime2.nMonth<11){TextOut(hDC,31,35,ChMonthTable[DateTime2.nMonth],2);TextOut(hDC,52,35,"月",2);}else{TextOut(hDC,31,35,ChMonthTable[DateTime2.nMonth],4);TextOut(hDC,52,35,"月",2);}//获得年GetLocalTime(&LocTime);hfon=CreateFont(13,0,380,67,FW_NORMAL,FALSE,0,0,ANSI_CHARSET,OU T_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, ("Arial")); //字体输出格式SelectObject(hDC,hfon);wsprintf(YTime,"%.4d",LocTime.wYear);SetTextColor(hDC,RGB(255,255,0)); //字体颜色TextOut(hDC,25,25,YTime,4);//得到月hfon=CreateFont(13,0,3400,67,FW_NORMAL,FALSE,0,0,ANSI_CHARSET,O UT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS, ("Arial")); //字体输出格式SelectObject(hDC,hfon);wsprintf(MTime,"%.2d",LocTime.wMonth);SetTextColor(hDC,RGB(255,255,0)); //字体颜色TextOut(hDC,68,8,MTime,2);//得到日。
第一章数字钟的工作原理第一节介绍20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品跟新换代的节奏也越来越快。
数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,节省了电能。
因此在许多电子设备中被广泛使用。
数字钟是一种典型的数字电路,包括了组合逻辑电路和时序电路。
通过设计加深对刚刚学习了的数字电子技术的认识。
本次设计以数字电子为主,分别对一秒信号源、秒计时显示、分计时显示、小时计时显示、整点报时及校时电路进行设计,然后将它们组合来完成时、分、秒的显示并且具有整点报时和走时校时的功能。
并通过本场设计加深对数字电子技术的理解以及更熟练是有计数器、触发起和各种逻辑门电路的能力。
电路主要使用集成计数器,例如74LS160、CD4518、译码集成电路,例如CD4511、LED数码管及各种门电路和基本的触发器等,电路使用5号电池供电,很合适在日常生活中使用。
第二节设计方案论证方案一:采用小规模集成电路实现采用集成逻辑电路设计具有能实现,时分秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。
方案二:EDA技术实现采用EDA作为主控制外围电路进行电压,时钟控制键盘和LED控制,此方案逻辑电路复杂,且灵活性较低,不利于各种功能的扩展,在对电路进行检测比较困难。
方案三:单片机编程实现在按键较少的情况下,采用独立式4个按键,经软件设计指定的I/O 口,送出逻辑电平,控制数码管显示,根据数字电子钟的设计要求与原理以及特性,本系统采用单片机AT89C52串口输出的形式来设计电路,使功能及效果更完美。
做成时钟,并不难,把十进改成6进就行了如下:1,震荡电路的电容用晶震,记时准确.2, 时:用2块计数器,十位的用1和2(记时脚)两个脚.分:用2块计数器,十位的用1,2,3,4,5,6,(记时脚)6个脚.秒:同分.评论:74系列的集成块不如40系列的,如:用CD4069产生震荡,CD4017记数,译码外加.电压5V.比74LS160 74LS112 74LS00好的.而且CD4069外围元件及少.如有需要我可以做给你.首先需要产生1hz的信号,一般采用CD4060对32768hz进行14分频得到2hz,然后再进行一次分频。
(关于此类内容请参考数字电路书中同步计数器一章)(原文件名:4060.JPG)一种分频电路:(原文件名:秒信号1.JPG)采用cd4518进行第二次分频另一种可以采用cd4040进行第二次分频第三种比较麻烦,是对1mhz进行的分频(原文件名:秒信号2.JPG)介绍一下cd4518:CD4518,该IC是一种同步加计数器,在一个封装中含有两个可互换二/十进制计数器,其功能引脚分别为1~7和9~{15}。
该计数器是单路系列脉冲输入(1脚或2脚;9脚或10脚),4路BCD码信号输出(3脚~6脚;{11}脚~{14}脚)。
此外还必须掌握其控制功能,否则无法工作。
手册中给有控制功能的真值(又称功能表),即集成块的使用条件,如表2所示。
从表2看出,CD4518有两个时钟输入端CP和EN,若用时钟上升沿触发,信号由CP输入,此时EN端应接高电平“1”,若用时钟下降沿触发,信号由EN端输入,此时CP端应接低电平“0”,不仅如此,清零(又称复位)端Cr也应保持低电平“0”,只有满足了这些条件时,电路才会处于计数状态,若不满足则IC不工作。
计数时,其电路的输入输出状态如表3所示。
值得注意,因表3输出是二/十进制的BCD码,所以输入端的记数脉冲到第十个时,电路自动复位0000状态(参看连载五)。
另外,该CD4518无进位功能的引脚,但从表3看出,电路在第十个脉冲作用下,会自动复位,同时,第6脚或第{14}脚将输出下降沿的脉冲,利用该脉冲和EN端功能,就可作为计数的电路进位脉冲和进位功能端供多位数显用。
一、任务技术指标设计一个数字电子钟(1)能显示小时、分钟和秒;(2)能进行24小时和12小时转换;(3)具有小时和分钟的校时功能。
二、总体设计思想1.基本原理该数字钟由振荡器、分频器、计数器、译码器、显示器和校时电路等六部分组成。
振荡器产生的钟标信号送到分频器,分频电路将时标信号分成每秒一次的方波秒信号。
秒信号送入计数器进行计数,计数到60秒后向分进位,同理计数到60分后向小时进位,并将计数的结果以BCD-七段显示译码器显示出来。
计数选用十进制计数器74LS760D,校时电路通过选通开关对“时”和“分”进行校时。
二十四小时和十二小时的转换也可以用开关进行选择。
2.系统框图如图1:振荡器产生的钟标信号送到分频器,分频电路将时标信号送至计数器。
计数器通过译码显示把累计的结果以“时”、“分”、“秒”的数字显示出来。
整个过程中可选择用校时电路进行校时。
图1 系统框图三、具体设计1.总体设计电路该数字钟由振荡器、分频器、计数器、显示器和校时电路组成。
振荡器产生的钟标信号送到分频器,分频电路将时标信号分成每秒一次的方波秒信号。
秒信号送入计数器进行计数,计数到60秒后向分进位,同理分计数器计数到60分后向小时进位,并将计数的结果以BCD-七段显示译码器显示出来。
计数选用十进制计数器74LS760D,校时电路通过选通开关对“时”和“分”进行校时。
二十四小时和十二小时的转换可以用开关进行选择。
图2 总体电路图2.模块设计(1)振荡器的设计振荡器是数字钟的核心。
振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。
石英晶体振荡器的作用是产生时间标准信号。
因此,一般采用石英晶体振荡器经过分频得到这一时间脉冲信号。
电路中采用的是将石英晶体与对称式多谐振荡器中的耦合电容串联起来,就组成了如图3所示石英晶体多谐振荡器。
图3振荡器电路图和仿真波形图(2)分频器的设计对于分频器的设计选定74LS90集成芯片。
目录1 设计任务与要求 (I)2 设计方案 (1)3 硬件设计 (2)3.1 AT89C51单片机简介 2 3.2单片机型号的选择 (6)3.3数码管显示工作原理 (6)4 软件设计 (7)4.1主程序模块介绍 (7)4.2主程序 (7)5 仿真调试 ......................................... 错误!未定义书签。
5.1K EIL仿真结果.................................. 错误!未定义书签。
5.2仿真结果分析 (13)6 小结 ............................................. 错误!未定义书签。
1 设计任务与要求1. 设计一个基于单片机的电子时钟,并且能够实现时分秒的现实和调节。
2. 设计出硬件电路。
3. 设计出软件编程方法,并写出源代码。
4. 用PROTEUS进行仿真。
5.用汇方式实现目的。
7.系统的各各功能模块要编语言编实现程序设计。
6.利用查表,中断等清楚,有序。
8.程序运行时有友好的用户界面。
2 设计方案本设计主要设计了一个基于AT89C51单片机的电子时钟。
并在数码管上显示相应的时间。
并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。
应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
该设计的硬件部分主要包括89C51多功能接口芯片用于开发电子时钟芯片、LED七段数码显示器用于显示时间、8031集成定时器用于定时、0.125W、8欧姆的扬声器用于定时发声。
软件部分包括主程序、定时计数中断程序、时间调整程序、延时程序四大模块。
通过中断程序进行定时器计数,时间调整程序是当键按下时间小于1秒,关闭显示(省电)进入调节时间状态,延时程序用于时间的延迟。
先设计个秒钟程序,在秒钟程序中先不设计按钮,直接通电运行,使用40H 存放计数值,从00—59,一直循环,把40H中的数值拆分成个位和十位,分别存在30H与31H中,要求动态扫描时,使用21H当标志位,用指令JB控制显示个位与十位,程序中使用中间寄存器R0与R1用于存放拆分后的字型,再传到30H与31H中去,再设计时钟程序。
数字时钟(带显⽰,校正,整点报时等)《课程设计成果说明书》规范要求课程设计说明书是课程设计主要成果之⼀,⼀般在2000~3000字。
1.说明书基本格式版⾯要求:打印时正⽂采⽤5号宋体,A4纸,页边距上、下、左、右均为2cm,⾏间距采⽤固定值20磅,页码底部居中。
⽂中标题采⽤4号宋体加粗。
2.说明书结构及要求(1)封⾯(2)课程设计成绩评定表(3)任务书(指导教师下发)(4)摘要摘要要求对内容进⾏简短的陈述,⼀般不超过300字。
关键词应为反映主题内容的学术词汇,⼀般为3-5个,且应在摘要中出现。
(5)⽬录要求层次清晰,给出标题及页次。
最后⼀项为参考⽂献。
(6)正⽂正⽂应按照⽬录所确定的顺序依次撰写,要求论述清楚、简练、通顺,插图清晰整洁。
⽂中图、表及公式应规范地绘制和书写。
(7)参考⽂献课程设计任务书2009—2010学年第2 学期学院机电⼯程学院班级 A08电信(2)班专业电⼦信息⼯程学⽣姓名(学号) 课程名称数字电⼦技术课程设计设计题⽬多功能时钟电路完成期限⾃ 2010 年 6 ⽉ 28 ⽇⾄ 2010 年 7 ⽉ 2 ⽇共1 周设计依据根据所学数字电⼦技术知识进⾏设计,包括:1,计数器原理及其应⽤;2,数码管及其应⽤;3,译码器原理及其应⽤;4,数值⽐较器及其应⽤;5,数据选择器原理及其应⽤;设计要求及主要内容设计的数字时钟应⽤于对时间的计时,要求:1、1、能进⾏正常时分秒计时功能,分别由6个数码管显⽰⼩时分钟和秒钟;1、2、具有清零功能;1、3、具有开、关功能;附加功能:能进⾏整点报时和校对;参考资料数字电⼦技术基础(第五版)阎⽯⾼等教育出版社 2008.5/doc/b9e02b6e7e21af45b307a8a8.html其他相关参考资料(可⾃⼰查找)指导教师签字⽇期课程设计成绩评定表2009 —2010 学年第 2 学期学院机电⼯程学院班级专业电⼦信息⼯程学⽣姓名(学号) 课程设计名称《数字电⼦技术课程设计》题⽬多功能时钟电路指导教师评语指导教师签名:年⽉⽇答辩评语及成绩答辩⼩组教师签名:年⽉⽇摘要随着电⼦技术的发展,在诸如计时、控制等领域,设计出应⽤具有时间设置(⼩时和分钟),开、关功能的多功能数字钟具有⼗分重要的意义。
二〇一七年六月原始资料设计题目:12时制数字显示电子钟设计任务书:设计一个数字显示电子时钟,同时设计一与电路相配合的稳压电源电路。
要求:1、时钟的“时”要求用两位显示(1~12);2、时钟的“分”、“秒”要求各用两位显示;3、整个系统要有校时部分(可以手动,也可以自动),校时时不能产生进位;4、能显示上午、下午标志。
5、5V电源模块的设计。
提示:1、由石英晶体多谐振荡器和分频器产生1HZ标准秒脉冲。
2、“分”、“秒”是60进制,可用两片74160构成;3、“时”是12进制计数器,高位可用T触发器构成,低位可用74160构成。
如果高位为1,低位为2,则再有进位时将置为01;4、标志灯,如果是上午则上面的灯亮;如果是下午则下面的灯亮。
可用一个T 触发器构成。
注意:对于课题相同的同学可以互相讨论,但图纸、课程设计报告内容不允许雷同,否则以0分计论文撰写注意事项:1.论文必须采用黑色钢笔或中性笔书写,不能用蓝色钢笔或圆珠笔书写,论文中的电路图也必须用黑色钢笔或中性笔画出(可用铅笔画出然后用黑色钢笔或中性笔描出)。
2.论文应包括以下基本内容:封面;任务书(签名);题目、摘要(在同一页);目录;(每项都从新一页开始)。
引言;正文(分章节写,每章都从新一页开始,第1章(一级标题),1.1(二级标题))方案比较、论证和选择,方案的总系统框图,各部分单元电路电路图,详述工作原理;单元电路设计计算,元器件的选择,结论,致谢和参考文献;3.论文格式必须规范。
4.论文上交时必须装订成册。
附录部分:设计图纸(A3图纸)。
摘要数字电子钟是一种用数字显示秒、分、时、日的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械转动装置等优点,因而得到了广泛的应用,例如人们日常生活中的电子手表,以及车站、码头、机场等公共场所的大型数显电子钟等。
数字钟是一个对标准频率(1HZ)进行计数的计数电路。
由于计数的起始时间可能不与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。
基于FPGA实现多功能数字钟——电子系071180094王丛屹摘要本文利用Verilog HDL语言自顶向下的设计方法设计多功能数字钟,并通过ISE完成综合、仿真.此程序通过下载到FPGA 芯片后,可应用于实际的数字钟显示中,实现了基本的计时显示和设置,调整时间,闹钟设置的功能.[关键词]FPGA;Verilog HDL;数字钟一、多功能数字钟的设计设计一个多功能数字时钟,具有时分、秒计数显示、闹钟功能。
能够利用按键实现对闹钟时间的设定并在当前显示时间到时后能够进行闹钟提示.能够利用按键实现“较时”、“较分"功能,随时对数码管的显示进行校正和校对.数字中系统主要由系统时钟,三个功能按键(mode,turn ,change ),FPGA ,数码管和蜂鸣器部分组成。
图: 多功能数字钟总体设计模块 以下就各个模块说明其功能1. 分频模块由于FPGA内部提供的时钟信号频率大约为50MHz,在这需要将它转化成1Hz的标准时钟信号供数字钟的计时显示;在此我采用了级联分频法.RTL图如下:代码如下:always @(posedge clk_1)if ( cnt2 〈156/2—1)/////////////////////////////////////100分频,生成10000Hz信号begincnt2 〈= cnt2 + 1;endelsebegincnt2 〈= 0;clk_2 <= ~clk_2;endalways @(posedge clk_2)if ( cnt5 〈10/2-1) /////////////////////////////////////////10分频,生成1kHz标准信号begincnt5〈= cnt5 + 1;endelsebegincnt5〈= 0;clk_1k〈= ~clk_1k;endalways @(posedge clk_2)if ( cnt3 < 100/2—1)//////////////////////////////////////////100分频,生成100Hz信号begin最终输出的是1Hz,100Hz,1kHz的标准时钟信号clk_1Hz ,clk_100Hz,clk_1k。
《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。
目录前言: (4)1.设计目的 (6)2.设计功能要求 (6)3.电路设计1111111111 (6)3.1设计方案 (6)3.2单元电路的设计 (7)3.2.1 主体电路部分 (7)3.2.1.1 振荡电路 (8)3.2.1.2 计数电路 (12)3.2.1.3 校时电路 (17)3.2.1.4 译码与显示电路 (19)3.2.2扩展功功能电路的设计 (21)3.2.2.1定时控制电路 (21)3.2.2.2 仿广播电台正点报时电路 (23)3.2.2.3 自动报整点时数电路 (24)3.2.2.4 触摸报整点时数电路 (26)4.调试 (27)4.1主体电路部分 (27)4.2 扩展电路部分 (29)5.总结 (31)致 (32)参考文献 (33)附录 (34)1.设计目的设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。
其中,基本功能部分的有准确计时,以数字形式显示时、分、秒的时间和校时功能。
扩展功能部分则具有:定时控制、仿广播电台正点报时、自动报整点时数和触摸报正点的功能。
数字钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由主体电路实现,而扩展功能部电路实现。
这两部分都有一个共同特点就是它们都要用到振荡电路提供的1Hz脉冲信号。
在计时出现误差时电路还可以进行校时和校分,为了使电路简单所设计的电路不具备校秒的功能。
并且要用数码管显示时、分、秒,各位均为两位显示,扩展部分要有相应的响应电路。
分则由扩展2.设计功能要求基本功能:(1)时的计时要求为“12翻1”,分和秒的计时要求为60进制(2)准确计时,以数字形式显示时,分,秒的时间(3)校正时间扩展功能:(1)定时控制;(2)仿广播电台报时功能;(3)自动报整点时数;(4)触摸报整点时数;3.电路设计3.1设计方案根据设计要求首先建立了一个多功能数字钟电路系统的组成框图,框图如图1所示。
主体电路扩展电路图1由图1可知,电路的工作原理是:多功能数字钟电路由主体电路和扩展电路两大部分组成。
1. Initial SetupFirst Time Set UpPress the reset button (R). The screen will turn blank,then will showthe reset display.Tips: If the screen is blank, plug the timer into any outlet for 30minutes to charge the internal battery.2. Set the Digital ClockWhen in the clock mode, press the‘MODE’ button for once, the screen will show AUTO, day, hour and minute. As shown in “Figure 1”.For example, set the time as 9:30AM TuesdayWhile holding the‘CLOCK’ button downpress the ‘WEEK’ button to adjust theday to TU.While holding the ‘CLOCK’ button down press the ‘HOUR’ button to adjust the hour digits to 9 .While holding the ‘CLOCK’ button down press the ‘MlN’ button to adjust the minute digits to 30.3. Daylight Saving TimeTo switch between Standard Time and Daylight-Saving Time (DST),press and hold the ‘CLOCK’ button for 3s. An ‘S ’ will appear on the screen and the clock will increase by 1 hour when in DST. As shown in ‘Figure 2’.4. Set the TimerPress the ‘PROG’ button to enter the setting mode:You will see 1 to the left of the display as shown in ‘Figure 3’.For example, if you want to have the timer to come on at 8:30AM and go off at 22:30 Monday thru Friday, please do the following:ONStep 2: Press the ‘HOUR’button to adjust the hour.Step 3: Press the ‘MIN’ button to adjust the minute.Step 4: Press the ‘PROG’button to set 1 time.Repeat steps 1 - 3.(Note:Do not forget to press the ‘WEEK’ button to select the desired days for the off time, or the timer may not go off as you want.)Step 6: Press the‘CLOCK’ button to exit the setting mode and plug the timer into a powered outlet. The timer is ready for use.Step 5: Press the ‘PROG’button to advance to the next on/off settingposition. Repeat steps 1-4 to set more timersaccording to your needs.* Tips: To review the programs, press the ‘PROG ’ buttonrepeatedly. You can use the ‘DEL button to cancel the settings you don’t want, or press it one more time to restore.IMPORTANTOFF Figure 2Figure 3Step 1: Press the‘WEEK’button to choose the group of days you wish to switch the appliance on.The group will advance in the sequence of:MO -> TU -> WE -> TH -> FR -> SA -> SU ->MO WE FR -> TU TH SA -> SA SU -> MO TU WE -> TH FR SA -> MO TU WE TH FR -> MO TU WE TH FR SA -> MO TU WE TH FR SA SU.Figure 1At the moment the timer is plugged into an outlet, the timer may not come on immediately as per the setting if the digital clock time falls between any on-off interval you set. Instead it will stay off until the next on-off interval begins. For instance, if you plug the timer into the outlet between 8:30~22:30, the timer may not come on immediately even if you have set the timer to come on at 8:30 every morning and go off at 22:30 every evening. Instead, it will stay off until 8:30am next morning. Under this circumstance, if you want to have the timer come on the moment it is plugged in and then work as your program, please press the ‘MODE’ button repeatedly to manually turn on the timer first and then press the button one more time to put the screen back to AUTO.• Digital Timer OutletModel No.:GET06A-USQuestionsorConcerns?********************TOGOALPlease keep this manual in a safe place for future reference. DO NOT plug any appliance where the load exceeds 15Amps.Heaters, pet feeders and similar appliances should never beleft unattended during operation. The manufacturer recommends such appliances not be connected to timers.DO NOT attempt to repair, disassemble or modify under any circumstances.FAQ1. How long is the warranty for this product?We offer a 12-month limited warranty on this timer. If your timer is broken, please email your order number and describe the issue. We will immediately issue a full refund or arrange a new replacement after verification. We believe what makes us different is not just the product we offer but also our outstanding customer service. We also believe the buyer and seller can achieve a win-win outcome through mutual effective communication.2. What should I do if I am having trouble setting up the timer?Please email to tell us the schedule and days of the week you want to set up. Our technical support team will give you personal step-by-step guidance illustrated with pictures.Press and hold ‘HOUR’, ‘MIN’ or ‘PROG’ more than 3seconds to navigate quickly through the numbers.If you have multiple programs, please make sure that the on-off intervals of the programs you set do not overlap with each other, especially when using the day combination option.• • 5.Manual OperationPress the ‘MODE’can manually turn on and off the timer.OFF: Press ‘MODE’ button until unit screen shows OFF. In this status, timer always has no output. The red LED output indicator is off.ON: Press ‘MODE’ button until unit screen shows ON. In this status, timer always has output. The red LED output indicator is on.Please set timer to AUTO status if you wan to turn on and off automatically based on Programs you have set. When switched to AUTO,there are 2 situations: 6.Anti-theft Random Function7. Countdown Function (1min to 5999min)With the countdown feature, you will be able to set yourappliance to automatically come on or go off after a given period of time. For example, if you want the timer to automatically go off after 2.5 hours,please follow the steps below: Step 1: Repeatedlypress( or press and hold) the ‘PROG’ button to skip the 20 on-offprograms. The screen will show ‘ --:--’Step 4: Press the ‘CLOCK’ to exit the setting mode.Step 5: Hold the‘DEL ’ button for 3s to start the countdown, and you will see 'CD' flashing on the display. The timer will be on and automatically go off after 2.5 hours. After that, the timer will work in the auto mode according to the on-off programs you set.Tips: To cancelcountdown, hold ‘DEL’ button for 3s again.PLEASE NOTE: The Random and Countdown are not compatible with each other. When you activate one function, the other functions will stay inactive.8. Technical DataInstallation: Plug-in Type Voltage: 125V~/60HzRating: 125V~ AC / 15A /1250WOperating Temperatures: -14°F ~ +104°F Accuracy: ± 1 Minute per Month Battery:NIMH1.2V>100 Days 9. Package Contents2 X Digital Timer Switch 1 X Instruction ManualAUTO ON:Press ‘MODE’ button from ON to AUTO. In this status, red LED indicator is on, the timer will stay on until the next off setting arrives. And then it will work exactly as you programmed.AUTO OFF:Press ‘MODE’ button from OFF to AUTO. In thisstatus, red LED indicator is off,the timer will stay off until the next on setting arrives.And then it will work exactly as you programmed.When in the random mode, the timer will turn on and off with a 10~42 minutes variation based on the on and off schedules you set. It is especially useful during vacations as the home may appear to be occupied. Step 2: Press ‘MODE’ repeatedly until screen shows and AUTO. This is the countdown and turn off mode. It means the timer will be on when countdown starts, and it will automatically go off after the countdown time runs up. (Tips: If the screen shows and AUTO, the timer is in the countdown and turn on mode. It means the timer will be off whencountdown starts, and it will automatically come on after the countdown time runs up.) Step 3: Press ‘HOUR’ to set the hour digits to 2, and then the ‘MIN’ button to set the minute digits to 30.2. To temporarily override program and turn off the timer when it is ON: Press ‘MODE’ until OFF shows on screen andimmediately press once to return to AUTO. The timer will stay OFF until the next scheduled ON time. For instance, you have set the timer to come on at 8:30(8:30AM) and go off at22:30(10:30PM) every day of the week. If you manually turn off the timer and then put it back to AUTO between 8:30~22:30. The timer will stay off until 8:30 next morning.3. To make it simple, when using the MODE button to control the timer, if you want the timer to be on and in the AUTO mode,Press ‘MODE’ until ON shows on screen and immediately press ‘MODE’ once to return to AUTO; if you want the timer to be off and in the AUTO mode, Press ‘MODE ’until OFF shows on screen and immediately press ‘MODE’ once to return to AUTO.1. To temporarily override program and turn on the timerwhen it is OFF: Press ‘MODE’ until ON shows on screen and immediately press once to return to AUTO. The timer will stay ON until the next scheduled OFF time. For instance, you have set the timer to come on at 8:30(8:30AM) and go off at 22:30(10:30PM) every day of the week. If you manually turn on the timer and then put it back to AUTO between 22:30~8:30 next morning. The timer will stay on until 10:30PM.Tips for using the MODE button。
数字电子钟的设计(由数字IC构成)一、设计目的1. 熟悉集成电路的引脚安排。
2. 掌握各芯片的逻辑功能及使用方法。
3. 了解面包板结构及其接线方法。
4. 了解数字钟的组成及工作原理。
5. 熟悉数字钟的设计与制作。
二、设计要求1.设计指标时间以24小时为一个周期;显示时、分、秒;有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
2.设计要求画出电路原理图(或仿真电路图);元器件及参数选择;电路仿真与调试;PCB文件生成与打印输出。
3.制作要求自行装配和调试,并能发现问题和解决问题。
4.编写设计报告写出设计与制作的全过程,附上有关资料和图纸,有心得体会。
三、设计原理及其框图1.数字钟的构成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。
由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。
通常使用石英晶体振荡器电路构成数字钟。
图3-1所示为数字钟的一般构成框图。
图3-1 数字钟的组成框图⑴晶体振荡器电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。
⑵分频器电路分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数。
分频器实际上也就是计数器。
⑶时间计数器电路时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为12进制计数器。
⑷译码驱动电路译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流。
目录1 设计任务及要求 (1)2 总体设计分析 (1)3 各模块设计 (2)3.1 数字钟主体部分 (2)3.1.1小时计数器 (2)3.1.2 分、秒计数器 (3)3.2 分频部分 (4)3.3 秒表模块 (5)3.4 闹钟模块 (5)3.5 时间设置模块 (7)3.6 报时模块 (7)3.7 控制显示模块 (8)3.8 顶层模块 (11)4 总结 (11)4.1 本次作业遇到的问题 (11)4.2 建议和总结 (12)附件 (13)1 设计任务及要求本次大作业的要求为设计一个多功能数字钟,其具体要求如下:1.有基础的实时数字钟显示功能,即时、分、秒的正常显示模式,并且在此基础上增加上,下午显示。
2.手动校准。
按动方式键,将电路置于校时状态,则计时电路可用手动方式校准,每按一下校时键,时计数器加1;按动方式键,将电路置于校分状态,以同样方式手动校分。
3.整点报时,仿中央人民广播电台整点报时信号,从59分50秒起每隔2秒发出一次低音“嘟”信号(信号鸣叫持续时间1S,间隙时间1S)连续5次,到达整点(00分00秒时),发一次高音“哒”信号(信号持续时间1S)。
4.闹时功能,按动方式键,使电路工作于预置状态,此时显示器与时钟脱开,而与预置计数器相连,利用前面手动校时,校分方式进行预置,预置后回到正常模式。
当计时计至预置的时间时,扬声器发出闹铃信号,时间为半分钟,闹铃信号可以用开关“止闹”,按下此开关后,闹铃声立刻中止,正常情况下应将此开关释放,否则无闹时作用。
5.秒表功能。
按start键开始计秒,按stop键停止计秒并保持显示数不变,直到复位信号加入。
2 总体设计分析设计的总体部分按照要求可以分为基本的数字时钟显示、手动校准、整点报时、闹钟功能和秒表功能5大部分。
其总体设计框图如下:图1 总体设计框图其中整点报时跟闹钟部分要求不同频率的声响,所以需要加入分频器模块将输入的1kHZ的分频产生500HZ及1HZ的方波信号,其中1HZ的信号对应1S 的周期,可以用作时钟秒的显示及秒表部分。
数字时钟完整版..设计报告撰写要求1.设计报告,报告中要包括以下几部分内容:(1)封皮:设计题目,姓名、学号,班级,授课教师姓名【格式见后面附表】(2)写明设计任务(3)写出设计题目的原理框图;(4)完成设计功能所选用的器件,及相应各器件的引脚排列图和功能表;(5)画出综合逻辑电路图;(6)用仿真软件进行调试的调试过程(即:在调试时遇到了哪些实际问题,你是如何解决的);(7)各人在本次设计中的体会和收获。
正文小四号宋体,1.5倍行间距。
课程设计报告学生姓名:学号:学院:电气工程学院班级: 电自1116题目: 数字时钟设计指导教师:张光烈职称: 2013 年 7月 4 日一.设计要求多功能数字钟具有时间显示、闹钟设置、报时功能、校正作用。
走时准确、显示直观、精度、稳定等优点。
电路装置十分小巧,安装使用也方便。
同时在日期中,它以其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱。
数字钟广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
数字钟已成为我们生活中不可缺少的必须品,广泛的应用于家庭以及办公室等公共场所。
给我们生活、学习、工作、娱乐带来了极大的方便。
本次设计主要是采用555定时器提供定时脉冲,74160集成块作为计时模块,8段数码显示管作为显示工具。
应用电子工作平台软件来设计和仿真多功能数字钟设计,并通过硬件实验的调试来相互验证实际结果。
由振荡器输出稳定的高频脉冲信号作为时间基准,经分频振荡器输出标准的秒脉冲,秒计数器满60向分计数器进位,分计数器满60向小时进位,小时计数器按“12翻1”规律计数,计数器经译码器送到显示器;计数出现误差可用校时电路进行校时、校分、校秒。
并具有可整点报时与定时闹钟的功能。
设计一种多功能数字钟,该数字钟具有基本功能和扩展功能两部分。
其中,基本功能部分的有准确计时,以数字形式显示时、分、秒的时间和校时功能。
扩展功能部分则具有:定时控制、、自动报整点时数和触摸报正点的功能。
数字钟的电路也是由主体电路和扩展电路两部分构成,在电路中,基本功能部分由主体电路实现,而扩展功能部电路实现。
这两部分都有一个共同特点就是它们都要用到振荡电路提供的1Hz脉冲信号。
在计时出现误差时电路还可以进行校时和校分,为了使电路简单所设计的电路不具备校秒的功能。
并且要用数码管显示时、分、秒,各位均为两位显示,扩展部分要有相应的响应电路。
分则由扩展能按时钟功能进行小时、分钟、秒计时,能调时调分,能整点报时,使用3个2位数码管显示。
总体设计1.时钟显示功能,能够以十进制显示“时”、“分”、“秒”。
其中时为24进制,分秒为60进制。
2. 其他功能扩展:(1)设计一个电路实现时分秒校准功能。
(2)闹钟功能,可按设定的时间闹时。
通过16~32开关控制。
(3)设计一个电路实现整点报时功能等。
在59分56秒、57秒、58秒、59秒输出750Hz音频信号,在59分59秒时输出1000Hz信号,音频持续1s,在1000Hz荧屏结束时刻为整点。
(4)设计一个星期电路,0代表周日,123456代表周一到周六。
(5)设计一个秒表电路,用以比赛计时。
本阶段的任务是根据任务要求进行模块划分,提出方案,并进行比较分析,最终找到较优的方案。
该方案的优点是模块内部简单,基本不需要额外的电路,该方案结构简单,模块间关系较明确,模块外不需使用较多门电路,但不利于功能扩充。
2.设计功能要求基本功能:(1)时的计时要求为“12翻1”和24翻1,分和秒的计时要求为60进制(2)准确计时,以数字形式显示时,分,秒的时间(3)校正时间扩展功能:(1)定时控制;(2)仿广播电台报时功能;(3)自动报整点时数;(4)触摸报整点时数;(5)秒表电路,用以比赛计时(6)星期电路用以提示工作日和周末二.设计原理及框图多功能数字钟原理分析数字电子钟主干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
“时计数器”可以选择12或24进制计时器,可实现12或24 小时的累计。
通过六个LED显示器显示出来,计数出现误差可用校时电路进行校时、校分、校秒。
本次所设计的多功能数字钟用到了555定时器、74160递增集成计数器、EWB软件。
555 定时器是一种模拟和数字功能相结合的中规模集成器件,74160是4位十进制同步加计数器多功能数字钟原理框架如图1-1所示,电路包括以下几个部分:标准秒信号发生器、显示电路、时分秒计数器、校时电路。
图1所示。
图1-1 多功能电子钟的总体主体电路扩展电路图1由图1可知,电路的工作原理是:多功能数字钟电路由主体电路和扩展电路两大部分组成。
其中主体电路完成数字钟的基本功能,扩展电路完成数字钟的扩展功能。
振荡器产生的高脉冲信号作为数字钟的振源,再经分频器输出标准秒脉冲。
秒计数器计满60后向分计数器个位进位,分计数器计满60后向小时计数器个位进位并且小时计数器按照“12翻1”的规律计数。
计数器的输出经译码器送显示器。
计时出现误差时电路进行校时、校分、校秒。
扩展电路必须在主体电路正常运行的情况下才能进行扩展功能。
实现同步60进制计数,可调整电源5v时钟信号输入 接1Hz 的信号源进位输入 接秒的进位信号,实现秒功能时,接低电平。
进位输出 秒模块接分模块,分模块接时模块 显示输出接到译码器输入,能闪烁闹钟比较信号输出 接到闹钟,秒模块悬空整点报时信号输出 接到响铃,实现响停交替5次响铃 调整使能端入0有效,有效时,显示信号输出,同时屏蔽进位输入和进位输出,允许调整信号输入。
时显示器分显示器秒显示器时译码器分译码器秒译码器时计数器分计数器秒计数器校时电路振荡器分频器整点报时触摸报时仿电台报定时控制显示使能端 入1有效 调整信号输入器件说明555定时器的介绍555 定时器是一种模拟和数字功能相结合的中规模集成器件。
一般用双极性工艺制作的称为 555,用 CMOS 工艺制作的称为 7555,除单定时器外,还有对应的双定时器 556/7556。
555 定时器的电源电压范围宽,可在 4.5V~16V 工作,7555 可在 3~18V 工作,输出驱动电流约为 200mA ,因而其输出可与 TTL 、CMOS 或者模拟电路电平兼容。
555 定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。
它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。
555定时器的构成及原理555定时器的集成电路引脚如2-1图所示1脚为接地端(GND )、2脚为低触发端(TR )、3脚为输出端 (OUT )、4脚为复位端(R )、5脚为控制电压端(CO )、6脚为高触发端(TH )、7脚为放电端(D )、8脚为电源端(VCC )。
555定时器由分压器、比较器、基本RS 触发器和放电三极管等部分组成,其内部电路图如图2-2所示。
分压器由三个5K 的等值电阻串联而成。
分压器为比较器1A 、2A 提供参考电压,比较器1A 的参考电压为cc V 32,加在同相输入端,比较器2A 的参考电压为cc V 31,加在反相输入端。
比较器由两个结构相同的集成运放1A 、2A 组成。
高电平触发信号加在1A 的反相输入端,与同相输入端的参考电压比较后,其结果作为基本RS 触发器_D R 端的输入信号;低电平触发信号加在2A 的同相输入端,与反相输入端的参考电压比较后,其结果作为基本RS 触发器_D S 端的输入信号。
基本RS 触发器的输出状态受比较器1A 、2A 的输出端控制。
R 是复位端,当其为0时,555输出低电平。
平时该端开路或接V CC 。
图2-1 555定时CO 是控制电压端(5脚),平时输出cc V 32作为比较器1A 的参考电平,当5脚外接一个输入电压,即改变了比较器的参考电平,从而实现对输出的另一种控制,在不接外加电压时,通常接一个0.01uf 的电容器到地,起滤波作用,以消除外来的干扰,以确保参考电平的稳定。
VT 为放电管,当VT 导通时,将给接于脚7的电容器提供低阻放电电路。
555定时器的功能当复位控制端(TH )的电压大于cc V 32时,写为V TH =1,当复位控制端(TH )的电压小于cc V 32时,写为V TH =0。
当置位控制端(TR )的电压大于cc V 31时,写为V TR =1,当置位控制端(TR )的电压小于cc V 31时,写为V TR =0。
555定时器有“低触发”、“高触发”和“保持”三种基本状态。
(1)当低触发端输入电压小于cc V 31且高触发端输入电压小于cc V 32时,V TR =0,V TH =0,比较器2A 输出为低电平,1A 输出为高电平,基本RS 触发器的输入端S =0、R =0,使Q=1,Q =0,经输出反相缓冲期后,OUT=1,T 截止。
这时称555定时器“低触发”。
(2)若低触发端输入电压大于cc V 31且高触发端输入电压小于cc V 32,则V TR =1,V TH =0,S =R =1,基本RS 触发器保持,OUT 和T 状态不变,这时称555定时器“保持”。
图2-2 555定(3)若高触发端输入电压大于cc V 32则V TH =1,比较器1A 输出为低电平,无论2A 输出何种电平,基本RS 触发器因R =0,使Q =1,经输出反相缓冲器后OUT=0、T 导通。
这时称555定时器“高触发”。
CO 为控制电压端,在OUT 端加入电压,可改变两比较器1A 、2A 的参考电压。
正常工作时,要在CO 和地之间接0.01 uF (电容量标记为103)电容。
放电管T 的输出端为集电极开路输出。
以上原理综合分析见下表2-1。
输入中间状态输出 放电管状态高触发端TH U 低触发端TR U 直接复位D RR SQ× × 0 × × 0 导通 >cc V 32 >cc V 31 1 0 1 0 导通 <cc V 32 >cc V 31 1 1 1 保持 保持不变 <cc U 32<ccV 31 111截止555定时器基本功能测试按图2-3所示连接实验电路,测试555定时器的输入、输出关系。