第一篇:数字钟的课程设计
电子技术课程设计 数字钟的设计
《电子技术》课程设计报告
《数字钟的设计》
专业:自动化
班级:14级自动化品牌一班
学号:20140632
姓名:付岩
指导教师:邬祥忠李振声
完成日期:2016年6月9日
一、设计题目 “数字钟的设计”
二、技术要求
1、设计一台能显示“秒”“分”“时”的数字钟,要求24小时为一计时周期。
2、当电路发生走时误差时,要求电路具有校时功能。
三、使用的元器件和电源 元器件:
1、七段显示译码器7448
2、数码管7SEG-DIGITAL
3、定时器NE555
4、十进制计数器74LS160
5、二输入与非门74LS00
6、非门74LS04
7、电阻100k 9C08052A1003JLHFT
8、电容10n CERAMIC10N
9、电容4u7 AUDI04U7
10、单刀双掷开关SW-SPDT 电源:+5V
四、设计内容
1、电路各部分组成及工作原理 (1)振荡电路
振荡电路选用555定时器构成的多谐振荡器,如图1所示。 多谐振荡器的振荡频率可由下式估算:
f=1/T=1.43/(R1+2R2)C 若选R1=R2=100k,要在输出端得到频率为1Hz的时钟信号,则C应选47UF。
图1
(2)计数器
主要使用6片74LS160十进制加法计数器实现,数字钟的“秒”“分”信号产生电路都由六十进制计数器构成,“时”信号产生电路为二十四进制计数器。采用反馈清零法的六十进制和二十四进制加法计数器电路分别如图2和图3表示。
图2
图3 (3)译码显示电路
译码显示电路选用七段显示译码器7448和数码管7SEG-DIGITAL,以六十进制“秒”计时电路为例,将计数器、译码显示器和显示数码管连在一起,其电路示意图如图4所示。
图4 (4)校时电路
通过单刀双掷开关SW-SPDT控制“分”“时”的进位信号,使其可以按照秒的速度快速计时,如图5所示。
图5
2、数字钟电路图
3、电路各部分的安装和调试方法 (1)振荡器的安装与调试
按图1所示电路在试验箱上连线,输出接发光二极管,观察发光二极管的显示情况。 (2)计数器的安装与调试
分别按图2与图3所示电路在试验箱上连线,CP为1HZ,可直接由试验箱连续脉冲输出端提供,观察在CP脉冲作用下,输出端发光二极管的状态变化情况,验证是否为六十进制和二十四进制计数器。
(3)译码显示电路的安装与调试
按图4所示电路在试验箱上连线,观察在CP脉冲作用下数码管的显示情况。 。
(4)校时电路
通过单刀双掷开关控制“时”“分”计时器的进位信号,使其按照“秒”计时器的速度校时
4、在整机电路的设计、调试过程中的心得体会
通过数天的设计与思索,我发现自己并不是真的全部掌握所学内容,虽然基本上已经掌握课上老师所讲的内容,可是一到把所用内容整合在一起具体应用时,还是出了很多问题。
比如关于计数器方面的学习,因为所学的是如何将两片74LS160连接构成几十几进制的计数器,感觉很简单,而事实也如此,因此忽略了如何进位的问题。在这次设计开始前,我想当然就以为秒分时各计数器全由一个CP脉冲作用就好了,而各计数器之间的连接也按每个计数器间的接法照旧。结果发现根本不对,秒计数器倒是正常走了,走到59时,下一秒时分计数器根本不动,想了半天却还在钻牛角尖。最后经过查书重新地仔细地看了这部分知识,才发现其中的错误,开始用秒计时器的清零端MR取非给分计时器进位,可突然却发现又出现问题:各计时器之间能正常进位,可是分、时计数器的数码管却全显示1,于是再想是不是还有控制CP信号的端口,于是发现把上一计时器的进位端接入下一计时器的CP段就可以了,电路可以正常进位。想了一两天的问题解决了,打算看看效果,于是更改振荡器中电阻的数值,将100k改换成100欧姆,变换速度瞬间提高一千倍,很快地走了一个周期,从而验证了自己的想法。
当然还有其他的问题,比如关于译码显示电路,选用实验书中的4511译码器,结果发现除QA到QG没有变换其他各端都挺正常的变化(仿真过程中显示红蓝灰点,QA到QG一直不变),后来还是选用数电书上的7448译码器,因为书上的有相关的解释,相关知识也能弄清楚,不用费多少脑力。
不过,关于校时电路的部分,我自己实在是没弄懂,找别人问问发现没人看懂,结果有个同学说使用单刀双掷开关,觉得这想法可以,就用上了。
通过这次数字钟的设计,我最终明白上课所讲的内容并不是全部,有很多的不足之处。我们学习的东西还有很多,书本上老师所讲的内容只能解决我们具体实际操作过程中的一小部分内容,还有很多很多我们未知的东西需要掌握。通过这次设计我也基本学会了这部使用的设计仿真软件ISIS 7 professional,这也是很好的。另外在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了,而且还可以记住很多东西,比如一些芯片的功能。平时看课本这次看了,下次就忘了,通过动手实践让我们对各个元件映象深刻。正所谓,认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
第二篇:数字钟的设计与制作 课程设计5
淮阴师范学院电子与电气工程系
课程设计报告
学生姓名 班
级 专
业 题
目
指导教师
2009 年 6 月
许青
学 号
240701084
07级2班 电子信息科学与技术 数字钟的设计与制作 陈华宝
电子技术课程设计报告
一、设计目的
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。 数字钟 ,从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
因此,设计与制作数字钟就是为了了解数字钟的原理,从而学会制作数字钟,而且可以通过数字钟的制作进一步了解在制作中用到的各种中小规模集成电路的作用及使用方法。再者,由于数字钟包括组合逻辑电路和时序电路,通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法.
二、设计要求 ㈠设计指标
(1)时间以12小时为一个周期; (2)显示时、分、秒;
(3)有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间; (4)保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。 ㈡设计要求
(1)画出电路原理图;
(2)自行装配和调试,并能发现问题和解决问题;
(3)编写设计报告,写出设计与制作的全过程,附上有关资料和图纸及心得体会。
三、原理框图
1.数字钟的构成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。
图1 2.晶体振荡器电路
电子技术课程设计报告
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路。一般输出为方波的数字式晶体振荡器电路通常有两类,一类是用TTL门电路构成;另一类是通过CMOS非门构成的电路,本次设计采用了后一种。如图(b)所示,由CMOS非门U1与晶体、电容和电阻构成晶体振荡器电路,U2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。输出反馈电阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器。电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。
图2
3.时间记数电路
一般采用10进制计数器如74HC290、74HC390等来实现时间计数单元的计数功能。本次设计中选择74HC390。由其内部逻辑框图可知,其为双2-5-10异步计数器,并每一计数器均有一个异步清零端(高电平有效)。
秒个位计数单元为10进制计数器,无需进制转换,只需将QA与CPB(下降沿有效)相连即可。CPA(下降沿有效)与1HZ秒输入信号相连,QD可作为向上的进位信号与十位计数单元的CPA相连。
秒十位计数单元为6进制计数器,需要进制转换。将10进制计数器转换为6进制计数器的电路连接方法如图 2.4所示,其中QC可作为向上的进位信号与分个位的计数单元的CPA相连。
图3
电子技术课程设计报告
图4
分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同,只不过分个位计数单元的QD作为向上的进位信号应与分十位计数单元的CPA相连,分十位计数单元的QC作为向上的进位信号应与时个位计数单元的CPA相连。
时个位计数单元电路结构仍与秒(或分)个位计数单元相同,但是要求,整个时计数单元应为24进制计数器,而不是10的整数倍,因此需将个位和十位计数单元合并为一个整体才能进行24进制转换。利用1片74HC390实现24进制计数功能的电路如图(d)所示。
图5二十四进制电路
另外,图(d)所示电路中,尚余-2进制计数单元,正好可作为分频器2HZ输出信号转化为1HZ信号之用。
4.译码驱动及显示单元电路
选择74LS47作为显示译码电路;选择LED数码管作为显示单元电路。由74LS47把输进来的二进制信号翻译成十进制数字,再由数码管显示出来。这里的LED数码管是采用共阳的方法连接的。
计数器实现了对时间的累计并以8421BCD码的形式输送到74LS47芯片,再由74LS47芯片把BCD码转变为十进制数码送到数码管中显示出来。
5.校时电路
数字钟应具有分校正和时校正功能,因此,应截断分个位和时个位的直接计数通路,
电子技术课程设计报告
并采用正常计时信号与校正信号可以随时切换的电路接入其中。即为用COMS与或非门实现的时或分校时电路,In1端与低位的进位信号相连;In2端与校正信号相连,校正信号可直接取自分频器产生的1HZ或2HZ(不可太高或太低)信号;输出端则与分或时个位计时输入端相连。当开关打向上时,因为校正信号和0相与的输出为0,而开关的另一端接高电平,正常输入信号可以顺利通过与或门,故校时电路处于正常计时状态;当开关打向下时,情况正好与上述相反,这时校时电路处于校时状态。
实际使用时,因为电路开关存在抖动问题,所以一般会接一个RS触发器构成开关消抖动电路,所以整个较时电路就如图(f)。
图6 带有消抖电路的校正电路
说明:当时间在59分50秒到59分59秒期间时 分十位、分个 位和秒十位均保持不变,分别为5,9和5;因此,可以将分计数器十位的Qc和QA,个位的QD和QA及秒计数器十位的QC和QA相与,从而产生报时控制信号。IO1分计数器十位的Qc和QAIO2U11VCCIO35VVCCX182345V分计数器个位的QD和QAIO456114V_0.5WIO512秒计数器十位的QC和QAIO674HC30D数字钟设计-整点报时电路部分
图7 6.整点报时电路
电路应在整点前10秒钟内开始整点报时,即当时间在59分50秒到59分59秒期间时,发出报时电路报时控制信号。
当时间在59分50秒到59分59秒期间时,分十位、分个位和秒十位均保持不变,
电子技术课程设计报告
分别为
5、9和5,因此可将分计数器十位的QC和QA 、个位的QD和QA及秒计数器十位的QC和QA相与,从而产生报时控制信号。
报时电路可选74HC30来构成。74HC30为8输入与非门。
四、元器件
1.四连面包板1块 2.共阳七段数码管6个 3.网络线2米/人 4.74LS47集成块6块 5.CD4060集成块1块 6.74HC390集成块3块 7.74HC51集成块1块 8.74HC00集成块2块 9.74LS08集成块1块 10.10MΩ电阻5个 11.300Ω电阻6个 12.30p电容2个 13.32.768k时钟晶体1个 芯片连接图
1)74HC00D
图8 2)74LS08
图9
电子技术课程设计报告
3)74HC390D
4)74HC51D
4) CD4060
图10
图11
电子技术课程设计报告
图12 5)74LS74
图13
电子技术课程设计报告
6)74LS47
图14 2.面包板的介绍
面包板一块总共由五部分组成,一竖四横,面包板本身就是一种免焊电板。 面包板的样式是:
电子技术课程设计报告
图15 面包板的注意事项:
1.面包板旁一般附有香蕉插座,用来输入电压、信号及接地。 2.上图中连着的黑线表示插孔是相通的。
3.拉线时,尽量将线紧贴面包板,把线成直角,避免交叉,也不要跨越元件。 4.面包板使用久后,有时插孔间连接铜线会发生脱落现象,此时要将此排插孔做记号。并不再使用。
五、各功能块电路图
数字钟从原理上讲是一种典型的数字电路,可以由许多中小规模集成电路组成,所以可以分成许多独立的电路。
(一) 六进制电路
由74HC390、7400、数码管与74LS47组成,电路如图16。
U1A3123U2A12Com74HC00D74HC00DU5SEVEN_SEG_COM_KABCDEFGU3AIO1IO337126DADBDCDD513OAOBOCODOE121110915141QA1QB1QC567V1 32Hz 5V141INA1INB21CLRIO21QD74HC390D43~EL~BI~LTOFOGVCCIO45V74LS47将十进制计数器转换为六进制的连接方法
图16
电子技术课程设计报告
(二) 十进制电路
由74HC390、7400、数码管与74LS47组成,电路如图17。
ComU3SEVEN_SEG_COM_KU1AIO1141INA1INB21CLR31QA1QB1QC1QD5677126DADBDCDD513OAOBOCODOE12111091514ABCDEFGVCC5V74HC390D43~ELOF~BIOG~LT74LS47十进制接法测试仿真电路
图17
(三) 六十进制电路
由两个数码管、两74LS
47、一个74HC390与一个7400芯片组成,电路如图18。
74LS47
74LS47
图18
电子技术课程设计报告
(四) 双六十进制电路
由2个六十进制连接而成,把分个位的输入信号与秒十位的Qc相连,使其产生进位。
(五) 时间计数电路
由1个二十四进制电路、2个六十进制电路组成,因上面已有一个双六十电路,只要把它与二十四进制电路相连即可,详细电路见图19。
VCC5VR6200ohmComR7200ohmComR8200ohmComR9200ohmComR10200ohmComR11200ohmComABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGVCC5VVCC5VVCC5VVCC5VVCC5VVCC5V1312111015141312111015141312111015141312111015141312111015141312111015U7OGBI/RBOU8OGBI/RBOU9OGBI/RBOU10OGBI/RBOU11OGBI/RBO14U12OGBI/RBO499999OAOBOCODOAOBOCODOAOBOCODOAOBOCODOAOBOCODOAOBOCODOEOEOEOEOE9OEOFOFOFOFOFRBIRBIRBIRBIRBI7126354712635471263547126354712635471263131110131110356793567131110U13B2QDU14A1QDU14B2QD54U15A1QD9U15B2QD356791QA1QB1QC2QA2QB2QC1QA1QB1QC2QA2QB1QA1QB1QC1QD2QA2QB1CLR2CLR1CLR1CLR2CLR1INA2INA1INB2INBU18A74LS08D614141512151574LS390D74LS08D121474LS08D8142VCC5VR1J112U19A311213910U20R145-32.768kHz时计数9器810U21C108975O3O4O5O6O7O8O9U22RTCCTCRS111X2校时Key = A74LS00D12MRR25V45U19B6112364U21D12器分计数131146VCCR510MohmR412U24A4~1PR51Q1D312141315123J2U21A3574LS00DC130pF30pF校分Key = B12214214274LS51D6~1QO11O12O13R345m setU21B6~1CLR74LS74D4060BP开关在下,校准状态开关在上,正常工作74LS00DVCC5V图19
2CLR1INA2INA1INA1INB2INB1INB2INA2INBU13A2QCU18C109U18B2QCC25RBI74LS47DLTABCD74LS47DLTABCD74LS47DLTABCD74LS47DLTABCD74LS47DLTABCD74LS47DLTABCDOF213电子技术课程设计报告
(六) 校正电路
由74HC51D、74HC00D与电阻组成,校正电路有分校正和时校正两部分,电路如图20。
IO1VCC正常输入信号5V校正信号R1IO2U2C9108小时校正电路J110Mohm74HC00D注意:分校时时,不会进位到小时。U11111213910U2DKey = A12R210MohmIO313U2A8123时计数器IO574HC00D1123674HC00D正常输入信号校正信号R3U3A10Mohm12U2B456分计数器IO6IO44574HC00D74HC51D3J274HC00DKey = B分钟校正电路分校正时锁定小时信号输入R410MohmU3B456图中采用基本RS触发器构成开关消抖动电路,其中与非门选用74HC00;对J1和J2,因为校正信号与0相与为0,而开关的另一端接高电平,正常输入信号可以顺利通过与或门,故校时电路处于正常计时状态,当开关打向上时,情况正好与上述相反,这时电路处于校时状态。74HC00D数字钟设计-校时电路部分
图20
(七) 晶体振荡电路
由晶体与2个30pF电容、1个4060、一个10兆的电阻组成,芯片3脚输出2Hz的方波信号,电路如图21。
图21
电子技术课程设计报告
六、总接线元件布局
整个数字钟由时间计数电路、晶体振荡电路、校正电路、整点报时电路组成。 其中以校正电路代替时间计数电路中的时、分、秒之间的进位,当校时电路处于正常输入信号时,时间计数电路正常计时,但当分校正时,其不会产生向时进位,而分与时的校位是分开的,而校正电路也是一个独立的电路。
电路的信号输入由晶振电路产生,并输入各电路。
七、电路原理总图
在原有的简图的基础上,按实际布局画了这张按实际芯片布局的接线图,如图22:
电子技术课程设计报告
VCC5VR6200ohmComR7200ohmComR8200ohmComR9200ohmComR10200ohmComR11200ohmComABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGABCDEFGVCC5VVCC5VVCC5VVCC5VVCC5VVCC5V1312111015141312111015141312111015141312111015141312111015141312111015U7OGBI/RBOU8OGBI/RBOU9OGBI/RBOU10OGBI/RBOU11OGBI/RBO14U12OGBI/RBO499999OAOBOCODOAOBOCODOAOBOCODOAOBOCODOAOBOCODOAOBOCODOEOEOEOEOE9OEOFOFOFOFOFRBIRBIRBIRBIRBI7126354712635471263547126354712635471263131110131110356793567131110U13B2QDU14A1QDU14B2QD54U15A1QD9U15B2QD356791QA1QB1QC2QA2QB2QC1QA1QB1QC2QA2QB1QA1QB1QC1QD2QA2QB1CLR2CLR1CLR1CLR2CLR1INA2INA1INB2INBU18A74LS08D614141512151574LS390D74LS08D121474LS08D8142VCC5VR1J112U19A311213910U20R145-32.768kHz时计数9器810U21C108975O3O4O5O6O7O8O9U22RTCCTCRS111X2校时Key = A74LS00D12MRR25V45U19B6112364U21D12分计数器131146VCCR510MohmR412U24A4~1PR51Q1D312141315123J2U21A3574LS00DC130pF30pF校分Key = B12214214274LS51D6~1QO11O12O13R345m setU21B6~1CLR74LS74D4060BP开关在下,校准状态开关在上,正常工作74LS00DVCC5V图22
2CLR1INA2INA1INA1INB2INB1INB2INA2INBU13A2QCU18C109U18B2QCC25RBI74LS47DLTABCD74LS47DLTABCD74LS47DLTABCD74LS47DLTABCD74LS47DLTABCD74LS47DLTABCDOF213电子技术课程设计报告
八、总结
1. 实验过程中遇到的问题及解决方法
① 七段显示器与七段译码器的测量
把显示器与74LS74相连,第一次连接时,数码管没有显示数字,经检查发现是数码管未接地,接地后发现还是无法正确显示数字,用万用表检测后,发现是因芯片引脚有些接触不良,所以确认芯片是否接触良好比较重要。 ② 时间计数电路的连接与测试
六进制、十进制都没有什么大的问题,只是芯片引脚的老问题,只要重新插过芯片就可以解决了。但在六十进制时,按图接线后发现,显示器上的数字总是100进制的,而不是六十进制,检测后发现无论是线路的连接还是芯片的接触都没有问题。最后,重新检查电路连线时发现是粗心将线路引脚接错而造成的,改过之后,显示就正常了。
2.设计体会
(1)通过这次对数字钟的设计与制作,我了解了设计电路的程序,也让我了解了关于数字钟的原理与设计理念,设计一个电路要先仿真,仿真成功之后才能实际接线。
(2)学会了使用mutlism,protel.掌握了电路设计的基本步骤,提高了自己的动手实践能力。
(3) 通过这次学习,让我对各种电路都有了大概的了解,同时也让我更深刻的认识到实践的重要性,对于这些电路还是应该自己动手实际操作才会有深刻理解。
(4)在实际操作中往往由于自己的一些疏忽导致电路连接上存在一些问题,所以在实际操作中应十分细心和耐心才对,努力使自己在接线上不存在问题。
第三篇:数电课程设计报告(数字钟的设计)
数电课程设计报告
第一章 设计背景与要求
设计要求 第二章 系统概述 2.1设计思想与方案选择 2.2各功能块的组成 2.3工作原理
第三章 单元电路设计与分析 3.1各单元电路的选择 3.2设计及工作原理分析 第四章 电路的组构与调试 4.1遇到的主要问题 4.2现象记录及原因分析 4.3解决措施及效果
4.4功能的测试方法,步骤,记录的数据 第五章 结束语
5.1对设计题目的结论性意见及进一步改进的意向说明 5.2总结设计的收获与体会 附图(电路总图及各个模块详图) 参考文献
第一章
设计背景与要求
一.设计背景与要求
在公共场所,例如车站、码头,准确的时间显得特别重要,否则很有可能给外出办事即旅行袋来麻烦。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确度和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。数字钟是一种典型的数字电路,包括了组合逻辑电路和时序电路。
设计一个简易数字钟,具有整点报时和校时功能。 (1)以四位LED数码管显示时、分,时为二十四进制。
(2)时、分显示数字之间以小数点间隔,小数点以1Hz频率、50%占空比的亮、灭规律表示秒计时。
(3)整点报时采用蜂鸣器实现。每当整点前控制蜂鸣器以低频鸣响4次,响1s、停1s,直到整点前一秒以高频响1s,整点时结束。
(4)才用两个按键分别控制“校时”或“校分”。按下校时键时,是显示值以0~23循环变化;按下“校分”键时,分显示值以0~59循环变化,但时显示值不能变化。
二.设计要求
电子技术是一门实践性很强的课程,加强工程训练,特别是技能的培养,对于培养学生的素质和能力具有十分重要的作用。在电子信息类本科教学中,课程设计是一个重要的实践环节,它包括选择课题、电子电路设计、组装、调试和编写总结报告等实践内容。通过本次简易数字钟的设计,初步掌握电子线路的设计、组装及调试方法。即根据设计要求,查阅文献资料,收集、分析类似电路的性能,并通过组装调试等实践活动,使电路达到性能要求。
第二章
系统概述
2.1设计思想与方案选择
方案一 ,利用数字电路中学习的六十进制和二十四进制计数器和三八译码器来实现数字中的时间显示。
方案二,利用AT89S51单片机和74HC573八位锁存器以及利用C语言对AT89S51进行编程来实现数字钟的时间显示。
由于方案一通过数电的学习我们都比较熟悉,而方案二比较复杂,涉及到比较多我们没学过的内容,所以选择方案一来实施。 简易数字钟电路主体部分是三个计数器,秒、分计数器采用六十进制计数器,而时计数器采用二十四进制计数器,其中分、时计数器的计数脉冲由 校正按键控制选择秒、分计数器的溢出信号或校正10Hz计数信号。计数器的输出通过七段译码后显示,同时通过数值判断电路控制蜂鸣器报时。
2.2各功能块的组成
分频模块,60进制计数器模块,24进制计数器模块,4位显示译码模块,正点报时电路模块,脉冲按键消抖动处理模块
2.3工作原理
一.简易数字钟的基本工作原理是对1Hz标准频率(秒脉冲)进行计数。当秒脉冲个数累计满60后产生一个分计数脉冲,而分计数脉冲累计满60后产生一个时计数脉冲,电路主要由3个计数器构成,秒计数和分计数为六十进制,时计数为二十四进制。将FPGA开发装置上的基准时钟OSC作为输入信号通过设计好的分频器分成1Hz~10MHz8个10倍频脉冲信号。1Hz的脉冲作为秒计数器的输入,这样实现了一个基本的计时装置。通过4位显示译码模块,可以显示出时间。时间的显示范围为00时00分~23时59分。
二.当需要调整时间时,可使用数字钟的时校正和分校正进行调整,数字钟中时、分计数器都有两个计数脉冲信号源,正常工作状态时分别为时脉冲和分脉冲;校正状态时都为5~10Hz的校正脉冲。这两种状态的切换由脉冲按键控制选择器的S端来实现。为了更准确的设定时间,需要对脉冲按键进消抖动处理。
三.电路在整点前10 秒钟内开始控制蜂鸣器报时,可采用数字比较器或逻辑门判断分、秒计数器的状态码值,以不同频率的脉冲控制蜂鸣器的鸣响。
第三章
单元电路设计与分析
3.1各单元电路的选择
(1)分频模块,设计一个8级倍率为10 的分频电路,输出频率分别为1Hz 、10Hz、100 Hz、1k Hz、10k Hz、100k Hz、1 MHz、10MHz8组占空比为50%的脉冲信号。
(2)60进制计数器模块,采用两片74161级联。 (3)24进制计数器模块,采用两片74161级联。
(4)4位显示译码模块,由分频器,计数器,数据选择器,七段显示译码,3-8线译码器构成一个4位LED数码显示动态扫描控制电路。其中4位计数器用74161,数据选择器用74153,七段显示译码器部分采用AHDL硬件描述语言设 计。
(5)正点报时电路模块,该模块采用与门和数据选择器74153构成 (6)脉冲按键消抖动处理模块,采用D触发器实现消抖动,从而能够比较精确地设定时间。
3.2设计及工作原理分析 (1)分频模块
要输出8级频率差为10倍的分频电路,可采用十进制计数器级联实现。集成十进制计数器的类型很多,比较常用的有74160、7416
2、74190、74192和7490等。这里采用7490来实现分频,7490是二-五-十进制加计数器,片上有一个二进制计数器和一个异步五进制计数器。
QA是二进制加计数器的输出,QB、QC、QD是五进制加计数器的输出,位序从告到低依次为D,C,B。该分频器一共用到7片7490,初始信号输入到第一片7490的CLKB端口,QD输出端连接到CLKA端,作为输入,从QA引出1MHz的output端口,并引线到第二片7490的CLKB端口,依此类推,直到第七片7490连接完成(如附图所示)。每片7490相当于一个五进制计数器和一个二进制计数器级联实现了十进制加计数,从而实现分频。
分频模块图如图所示
分频模块内部结构图如下图所示
OUTPUT10MHz7490SET9ASET9BCLRACLRBCLKACLKBinstQAQBQCQDOUTPUT1MHzoscINPUTVCCCOUNTER7490SET9ASET9BCLRACLRBCLKACLKBinst2QAQBQCQDOUTPUT100KHzCOUNTER7490SET9ASET9BCLRACLRBCLKACLKBinst3QAQBQCQDOUTPUT10KHzCOUNTER7490SET9ASET9BCLRACLRBCLKACLKBinst4QAQBQCQDOUTPUT1KHzCOUNTER7490SET9ASET9BCLRACLRBCLKACLKBinst5QAQBQCQDOUTPUT100HzCOUNTER7490SET9ASET9BCLRACLRBCLKACLKBinst6QAQBQCQDOUTPUT10HzCOUNTER7490SET9ASET9BCLRACLRBCLKACLKBinst8QAQBQCQDOUTPUT1HzCOUNTER 进制计数器模块
采用两片74161级联,如图,下面一片74161做成十进制的,初始脉冲从CLK输入,ENT和ENP都接高电平,而QD与QA用作为与非门的两个输入,与非门输出分别连接到自身的LDN端与上面一片74161的CLK端;上面一片74161的QC和QA端作为与非门的两个输入通过输出连接到自身的LDN,ENT 和ENP接高电平。下面一片实现从0000到1001即0~9十个状态码的计数,当下面一片为1001状态时,自身的LDN为低电平,此时QD,QC,QB,QA的状态恢复到0000,即从0开始从新计数,而上面一片74161的CLK电平改变,上面一片74161开始计数为0001,实现从0000~到0101即0到5六个状态码的计数,当上面一片状态为0101时,LDN为低电平,此时计数器为0000。这样子通过两片74161就实现了一个六十进制计数器。
下图为六十进制计数器模块的示意图 由六十进制计数模块构成的秒分计数如下图,下面那块六十进制技术模块表示为妙,上面那块六十进制计数模块表示为分。当妙计数模块的状态为0101 1001时,向分计数模块进位, 即通过74153M的输入C1,此时74153M输出接到分计数模块的输入端 ,通过74153M作为选择器,实现进位控制。
(3)24进制计数器模块
采用两片74161级联,如图,下面一片74161做成十进制的,初始脉冲从CLK输入,ENT和ENP都接高电平,而QD与QA用作为与非门的两个输入分别连接到自身的LDN端与上面一片74161的CLK端;上面一片74161的QB非门的一个输入通过输出连接到自身的LDN,ENT 和ENP接高电平,并且上面74161的QB端和下面一块74161的QC端通过与非门输出接到两片74161的清零端CLRN。下面一片实现从0000到1001即0~9十个状态码的计数,当下面一片为1001状态时,自身的LDN为低电平,此时QD,QC,QB,QA的状态恢复到0000,即从0开始从新计数,而上面一片74161的CLK电平改变,上面一片74161开始计数为0001,实现从0000~到0010即0到2三个状态码的计数,当上面一片状态为0010即2时,下面一片状态为0100即4时,两块74161的CLRN为低电平,此时两块74161的状态都为0000,即实现了23时过后显示00时。这样子通过两片74161就实现了一个24进制计数器。
下图为24进制计数器模块示意图
由二十四进制计数模块构成的时计数模块如图,下面那块六十进制技术模块表示为分,上面那块24进制计数模块表示为时。当分计数模块的状态为0101 1001时,向时计数模块进位, 即通过74153M的输入C1,此时74153M输出接到时计数模块的输入端 ,通过74153M作为选择器,实现进位控制。
二十四进制计数模块构成的时计数模块
(4)4位显示译码模块
由分频器,计数器,数据选择器,七段显示译码,3-8线译码器构成一个4位LED数码显示动态扫描控制电路。
4位计数器由74161构成。如下图所示
(74161构成的4位计数器)
数据选择器采用两片74153 和一片74153M 两片74153实现连在一起实现对四个数字的选择,而一片74153M实现对小数点的选择。
如下图所示
(74153M构成的数据选择器)
(两片74153构成的数据选择器)
七段显示译码器部分采用AHDL硬件描述语言设计,语句如下: subdesign
ymq (
data_in[3..0]
:input;
a,b,c,d,e,f,g
:output; ) begin table data_in[3..0]
=>a,b,c,d,e,f,g; b"0000"
=>1,1,1,1,1,1,0; b"0001"
=>0,1,1,0,0,0,0; b"0010"
=>1,1,0,1,1,0,1; b"0011"
=>1,1,1,1,0,0,1; b"0100"
=>0,1,1,0,0,1,1; b"0101"
=>1,0,1,1,0,1,1; b"0110"
=>0,0,1,1,1,1,1; b"0111"
=>1,1,1,0,0,0,0; b"1000"
=>1,1,1,1,1,1,1; b"1001"
=>1,1,1,0,0,1,1; b"1010"
=>1,1,1,0,1,1,1; b"1011"
=>0,0,1,1,1,1,1; b"1100"
=>1,0,0,0,1,1,0; b"1101"
=>0,1,1,1,1,0,1; b"1110"
=>1,0,0,1,1,1,1; b"1111"
=>1,0,0,0,1,1,1; end table; end;
整个四位显示译码模块如图所示
ymqdd[3..0]74153AB1GN1C01C11C21C32GN2C02C12C22C3inst4data_in[3..0]abcdefOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTOUTPUTabcdefgA1B1C1D1A2INPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCC1Y2Ydd3dd2ginst1B2C2D2MULTIPLEXER74153AB1GN1C01C11C21C32GN2C02C12C22C3oscOPdd1dd0INPUTVCC7416110MHz1MHz100KHz10KHz1KHz100Hz10Hz1HzLDNABCDENTENPCLRNA3B3C3D3A4B4INPUTVCCINPUTVCCINPUTVCCINPUTVCCosc1Y2YC4D4INPUTVCCINPUTVCCINPUTVCCINPUTVCCQAQBQCQDRCOOUTPUTOUTPUTDe1De2inst5MULTIPLEXERinstinst7CLKCOUNTERGND74153MGNdq1INPUTVCCINPUTVCCINPUTVCCINPUTVCCC0C1C2C3BAinst11YOUTPUTdq2dq3dpVCCdq4
(5)正点报时电路模块
该模块采用与门和数据选择器74153构成,如下图所示。
7个输入端口的与门控制A,当时间在59分51s,53s,55s,57s,59s的时候,A为高电平1,当秒的个位数为9时,B为高电平1,A为1,B为0时,输出C1低频率信号,A为1,B为1时输出C3高频率信号,实现整点的不同频率的报时电路。
(整点报时电路模块)
(6)脉冲按键消抖动处理模块
采用D触发器实现消抖动,从而能够精确地设定时间。校正状态为5HZ的校正脉冲,分频器输出的10HZ通过T触发器得到5HZ的校正脉冲。
如图
(脉冲按键消抖动处理模块)
(通过T触发器得到的5HZ校正脉冲)
第四章
电路的组构与调试
4.1遇到的主要问题
(1)在用74161做二十四进制计数器时,没有深入考虑,打算采用第一片六进制,第二片四进制级联而成,结果出现问题。
(2)时、分调整按键没有安装消抖动装置。 (3)在设置简易数字钟的分时,时计数器也会进。 4.2现象记录及原因分析
(1)虽然也能够计数实现二十四进制,但是不能与七段显示译码器配合使用,不能显示直观的数值,这样给用户带来不便。
(2)在下载调试的时候,我要进行时分调整,但是有时按一下子脉冲键会进两个数值,这样子给时分的设置带来了麻烦,原因是按键没有采用消抖动装置。
(3)在调试的时候,打算通过按键调整分,但是发现时计数器也会进位,这就不符合要求了,原因是调整分时,各计数器都按正常状况在计数,所以会按正常情况产生进位。
4.3解决措施及效果
(1)仍然采用两片74161,第一片可以从0~9,第二片只能从0~2,而且当第二片为2的时候,第一片到4的话就都清零复位,这样不仅实现了二十四进制计数器,而且能与七段显示译码器配合使用,直观的显示数字。
(2)在脉冲控制按键上加上了D触发器,这样子可以达到消抖动的效果。 (3)加上选择器,把两路信号分开,当调整分的时候,不对时计数器产生进位,这样子就不会产生十进位了,解决了这个问题。
4.4功能的测试方法、步骤,记录的数据
(1)简易数字钟的测试,将电路图连好后,分析与综合,仿真,编译,下载到仪器上,表示秒的小数点按1Hz,占空比50%跳动,分从0~59计数,分过了59后,向时计数器进1。
(2)整点点报时功能的测试,到了整点,即59分51s,53s,55s,57s时蜂鸣器低频率间断性鸣响,59分59秒时,蜂鸣器高频率鸣响一次。
(3)时、分调整功能的测试,按分调整键,分按一定的频率逐次加一,但是时显示不变;按时调整键,时按一定的频率逐次加一,但是分显示不变。
第五章
结束语
5.1对设计题目的结论性意见及进一步改进的意向说明
简易数字钟的设计中,主要运用了分频器,六十进制计数器,二十四进制计数器,动态扫描显示电路,选择器,按键消抖以及门电路等数字电路方面的知识。可以在简易数字钟的基础上加上24小时和12小时转换功能,秒表功能,闹钟功能,这样更能满足人们的使用需求。
5.2总结设计的收获与体会
简易数字钟的设计及实验当中,我坚持了下来,上学期的数电我学的并不好,而且对软件应用的接受能力不强,刚开始的时候做的很慢,看到别人都做好了,心里比较着急,于是,我找出了数电课本,复习所涉及的知识点,并练习所学软件,终于有了进步,可以更上同学们的进度,但数字钟的设计一直困扰我,看到别人拓展功能都做好了,自己基本的都还没做好,心里很急。在设计的过程中,碰到了很多的困难,遇到了很多问题,不断地思考与尝试,以及向同学和老师请教,但还是没能完全设计好,以后有时间还得多去实验室尝试,争取做好一些拓展功能。通过这次设计,对上学期学习的数字电路的相关知识得到了复习和巩固,也查阅了一些相关的资料,也加深了我对数字电路应用的理解,总之这次的电子技术课程设计受益匪浅。
参考文献:
《基于FPGA的数字电路系统设计》
西安电子科技大学出版社 《数字电子技术基础》
电子工业出版社
《数字电路与逻辑设计实验及应用》人民邮电出版社
附图
1. 分频模块
(分频器仿真波形)
下图为分频器线路图
OUTP10MH7490SSCCCCinsoscINPUVCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUTP1MHzCOUNTE7490SSCCCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUNTEOUTP100KHinsCt7490SSCCCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUNTEOUTP10KHinsCt7490SSCCCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUNTEOUTP1KHzinsCt7490SSCCCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUNTOUTP100HinsCt7490SSCCCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUNTEOUTP10HzinsCt7490SSCCCCEELLLLT9AT9BQARAQBRBQCKAQDKBOUNTEOUTP1Hz
insCt 2. 60进制计数器模块
(60进制计数器仿真波形)
3. 24进制计数器模块
(24进制计数器仿真波形)
4.
4位显示译码模块
七段显示译码器模块
七段显示译码器部分采用AHDL硬件描述语言设计,语句如下: subdesign
ymq (
data_in[3..0]
:input;
a,b,c,d,e,f,g
:output; ) begin table data_in[3..0]
=>a,b,c,d,e,f,g; b"0000"
=>1,1,1,1,1,1,0; b"0001"
=>0,1,1,0,0,0,0; b"0010"
=>1,1,0,1,1,0,1; b"0011"
=>1,1,1,1,0,0,1; b"0100"
=>0,1,1,0,0,1,1; b"0101"
=>1,0,1,1,0,1,1; b"0110"
=>0,0,1,1,1,1,1; b"0111"
=>1,1,1,0,0,0,0; b"1000"
=>1,1,1,1,1,1,1; b"1001"
=>1,1,1,0,0,1,1; b"1010"
=>1,1,1,0,1,1,1; b"1011"
=>0,0,1,1,1,1,1; b"1100"
=>1,0,0,0,1,1,0; b"1101"
=>0,1,1,1,1,0,1; b"1110"
=>1,0,0,1,1,1,1; b"1111"
=>1,0,0,0,1,1,1; end table; end;
整个4位显示译码模块
ymqdd[3..0]data_in[3..0]abcdefdd3dd2inst1gOUTPUTOUTPUTOUTPUT74153AB1GN1C01C11C21C32GN2C02C12C22C3inst4abcOUTPUTOUTPUTOUTPUTOUTPUTdefgA1B1C1D1A2B2C2D2INPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCC1Y2YMULTIPLEXER74153AB1GN1C01C11C21C32GN2C02C12C22C3inst5oscOPdd1dd0INPUTVCC7416110MHz1MHz100KHz10KHz1KHz100Hz10Hz1HzLDNABCDENTENPCLRNA3B3C3D3A4B4C4D4INPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCINPUTVCCosc1Y2YQAQBQCQDRCOOUTPUTDe1OUTPUTDe2MULTIPLEXERinstCLKinst7COUNTERGNDVCC74153MGNdq1INPUTVCCINPUTVCCINPUTVCCINPUTVCCC0C1C2C3BAinst11YOUTPUTdq2dq3dq4dp
(四位显示译码模块)
第四篇:单片机课程设计-简易数字钟的设计
单片机课程设计报告
课程设计题目:简易数字时钟
学生姓名:** 学号:********** 学院:****** 专业班级:**********
指导老师:**
2014年5月13日
摘要:
本设计采用了STC公司生产的STC89C52RC型单片机(80C51内核)设计了一个单片机最小系统,加上maxim232和usb转RS232线组成的下载电路,以及共阴极4位一体数码管和按键等外围电路构成了一个简易的数字钟,具有显示年、月、日、时、分、秒的功能,且年、月、日、时、分、秒每一个参数都可以自行设置,以实现时间的校正,总体来说实现了一个数字时钟的应有功能。
关键词:80C51系列单片机、单片机最小系统、时钟定时、下载电路、4位一体数码管显示
一、设计任务 简易数字时钟:自制一个单片机最小系统,包括串口下载、复位电路,采用内部定时器计时,或者采用外部时钟芯片DS1302,设计一个具有秒、分、日、月、年的数字时钟,采用四位一体数码管显示相关信息,秒、分显示一页,日、月显示一页,年显示一页。
二、方案选择
2.1、采用uln2003驱动数码管
由于单片机的I/O口的拉电流只有大约1mA左右,不足以提供4-5mA的电流以驱动数码管上的led,故需要为数码管提供一个驱动电路,如果采用三极管的话由于数码管有7段(实际是8段,但本设计只需要使用7段),需要7个三极管来驱动,给焊接部分增加了工作量,故可考虑采用ULN2003以给数码管提供驱动电流。
Uln2003的内部原理图
ULN2003 是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。
该电路的特点如下:[3]
ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路
直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还
可以在高负载电流并行运行。
ULN2003 采用DIP—16 或SOP—16 塑料封装。
内部还集成了一个消线圈反电动势的二极管,可用来驱动继电器。它是双列16脚封装,NPN晶体管矩阵,最大驱动电压=50V,电流=500mA,输入电压=5V,适用于TTL COMS,由达林顿管组成驱动电路。 ULN是集成达林顿管IC,内部还集成了一个消线圈反电动势的二极管,它的输出端允许通过电流为200mA,饱和压降VCE 约1V左右,耐压BVCEO 约为36V。用户输出口的外接负载可根据以上参数估算。采用集电极开路输出,输出电流大,故可直接驱动继电器或固体继电器,也可直接驱动低压灯泡。通常单片机驱动ULN2003时,上拉2K的电阻较为合适,同时,COM引脚应该悬空或接电源。
ULN2003是一个非门电路,包含7个单元,单独每个单元驱动电流最大可达350mA,9脚可以悬空。
比如1脚输入,16脚输出,你的负载接在VCC与16脚之间,不用9脚。
ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。
输入5VTTL电平,输出可达500mA/5V。
ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。
ULN2003 是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。
2.2、直接用单片机加上拉电阻的P0口驱动数码管
对于51单片机的4个IO口来说有一个IO口与其他三个有点不同,那就是P0口,由于P0口(在作为输出IO口时)是OC门在最小系统中需要加一个上拉电阻,由此,可以用P0口作为数码管的驱动(可以通过合理配置上拉电阻的大小以提供足够的驱动电流)
51单片机的P0口内部电路图
由于相对来说接一个排阻便宜可靠,且方便,且也足以提供驱动数码管的电流,故采用方案2:直接用单片机加上拉电阻的I/O口驱动数码管
三、电路原理图
简易数字钟原理图
3.1最小系统
本设计最小系统与一般的51最小系统设计保持一致性,晶振电路为12M的晶体振荡器搭配两个30pF的电容组成,复位电路由5v接一个开关与电容并联再与电阻串联后接地构成,下载电路采用的是串口下载,为电脑上连一根usb转串口线,然后串口练到电路上,再通过max232芯片进行电平转换将RS232串口的电平转换为单片机的5v以进行电平匹配。 3.2共阴极4位一体数码管
四位一体数码管
数码管的显示由段选和位选控制,段选为图片中的每一位“8”型上的a、b、c、d、e、f、g、h共8段构成。位选有4个引脚,分别对应于数码管的4个位。
四、程序代码 如下:
#include sbit anjian1 = P1^0; sbit anjian2 = P1^1; sbit anjian3 = P1^2; sbit anjian4 = P1^3; int anjian11; int anjian22; int anjian33; int anjian44; int sec=55;//秒,分,时,日,月,年定义全局变量并装载初始值 int min=37; int hour=8; int day=30; int mon=12; int year=2014; int j=0;//j为秒计时变量,T0每计时50ms时j自增1,当j=20时立刻置0,且sec自增1 int play=1;//play为显示变量,当为“1”时显示“时,分”,为“2”时显示“月,日”,为“3”时显示“年”,为“0”时显示“秒” int led[4]={0,0,0,0}; unsigned char code table[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76}; void delay(void)
//延时10ms {
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--); } void main() { IE=0x8F;//开总中断,开定时T0,开定时T1,开外部中断0,开外部中断1 IP=0x00;//设置中断优先级均为低优先级,默认优先级为:调整时间》定时》设置显示页 IT0=1; IT1=1; TMOD=0x11;//定时器0工作于工作方式1,定时工作方式,由运行控制位TR1启动定时器;定时器1工作于工作方式1,定时工作方式,由运行控制位TR1启动定时器 P2=0Xfd;
TH0 = 0x3C;
TL0 = 0xB0;
{ switch(play) { case 1 :
{
if(anjian1==0)
{
{ delay(); delay(); if(anjian1==0) anjian11=anjian1; if(anjian1 & !anjian11) hour++;
} TH1=0xD8; TL1=0xF0; TR0=1; TR1=1;
//定时器T0用于20分之一秒的定时,定时器T1用于数码管的动态显示,外部中断0为调整时间,外部中断1为设置显示页
for(;;) else if(anjian2==0)
if(anjian2==0)
anjian22=anjian2;
if(anjian2 & !anjian22)
hour--;
else if(anjian3==0)
{
delay();
if(anjian3==0)
anjian33=anjian3;
if(anjian3 & !anjian33)
min++;
else if(anjian4==0)
{
delay();
if(anjian4==0)
anjian44=anjian4;
if(anjian4 & !anjian44)
min--;
}
break; case 2 : {
if(anjian1==0)
{
delay();
if(anjian1==0)
anjian11=anjian1;
if(anjian1 & !anjian11)
mon++;
else if(anjian2==0)
{
delay();
if(anjian2==0)
anjian22=anjian2;
if(anjian2 & !anjian22)
mon--;
else if(anjian3==0)
{
delay(); if(anjian3==0) }
}
}
}
}
anjian33=anjian3;
if(anjian3 & !anjian33)
day++;
else if(anjian4==0)
{
delay();
if(anjian4==0)
anjian44=anjian4;
if(anjian4 & !anjian44)
day--;
}
break; case 3 : {
if(anjian1==0)
{
delay();
if(anjian1==0)
anjian11=anjian1;
if(anjian1 & !anjian11)
year++;
else if(anjian2==0)
{
delay();
if(anjian2==0)
anjian22=anjian2;
if(anjian2 & !anjian22)
year--;
else if(anjian3==0)
{
delay();
if(anjian3==0)
anjian33=anjian3;
if(anjian3 & !anjian33)
year++;
else if(anjian4==0)
{
delay();
if(anjian4==0) anjian44=anjian4; }
}
}
}
}
if(anjian4 & !anjian44)
year--;
}
break; case 0 : {
if(anjian1==0)
{
delay();
if(anjian1==0)
anjian11=anjian1;
if(anjian1 & !anjian11)
sec++;
else if(anjian2==0)
{
delay();
if(anjian2==0)
anjian22=anjian2;
if(anjian2 & !anjian22)
sec--;
else if(anjian3==0)
{
delay();
if(anjian3==0)
anjian33=anjian3;
if(anjian3 & !anjian33)
sec++;
else if(anjian4==0)
{
delay();
if(anjian4==0)
anjian44=anjian4;
if(anjian4 & !anjian44)
sec--;
} break; }
switch(play) {
}
}
}
}
} case 1 : { led[0]=hour/10;
} ; }}
void service_int1()interrupt 2 using 1 { if(play==3) play=0; else play++; } void service_t0()interrupt 1 using 1
//实现1s的延时以及sec到min,min到hour,hour到day,day到month,month到year,year到next_year的转换 {
TH0 = 0x3C; if(j==20) {
j=0; sec++; if(sec>=60)
TL0 = 0xB0;
led[1]=hour%10; led[2]=min/10; led[3]=min%10;
} break;
led[1]=mon%10; led[2]=day/10; led[3]=day%10;
} case 2 : { led[0]=mon/10; break;
led[0]=year/1000; led[1]=((year%1000)/100); led[2]=((year%100)/10); led[3]=(year%10);
} case 3 : {
break;
led[1]=16; led[2]=sec/10; led[3]=sec%10;
} case 0 : { led[0]=16; break;
}
else { { sec=0; min++; if(min>=60) { min=0; hour++; if(hour>=24) {hour=0; day++; if(day>=31) { day=1; mon++; if(mon>=13) { mon=1; year++;} } } } } } j++; } void service_t1()interrupt 3 using 1 //定时器1实现了数码管的动态显示 {
TH1=0xFC; TL1=0x18; if(P2==0xfd) {P2=0xfb; P0=table[led[2]]; } else if(P2==0xfb) { P2=0xf7; P0=table[led[3]]; } else if(P2==0xf7) {P2=0xfe; P0=table[led[0]];
} else if(P2==0xfe) {P2=0xfd; P0=table[led[1]]; } }
五、制作实物图
六、心得收获
经过本次课程设计,我将课本上的知识转化为了实际的实物,更加深入的理解了单片机这,加强了自己的编程能力,与软硬件调试能力,总体来说,还是收获很大的。
第五篇:基于单片机的数字钟课程设计程序
#include #define uchar unsigned char #define uint unsigned int uchar code table[]="I LOVE YOU !"; uchar code table1[]="2014:06:14"; sbit lcden=P3^5; sbit lcdrs=P3^4;
uchar num;
void delayms(uint z) { uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void write_com(uchar com) { lcdrs=0; P0=com; delayms(5); lcden=0; }
void write_data(uchar date) { lcdrs=1; P0=date; delayms(5); lcden=1; delayms(5); lcden=0; }
void init() { lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }
void main()
//定义使能端、命令选择端
//延时函数
//写入命令函数
//写入数据 //初始化LCD
{
} init(); write_com(0x80); for(num=0;num<11;num++) { write_data(table[num]); delayms(5); } write_com(0x80+0x40); for(num=0;num<13;num++) { write_data(table[num]); delayms(5); } while(1);