单片机课程设计电子钟.doc

上传人:土8路 文档编号:9979926 上传时间:2021-04-08 格式:DOC 页数:23 大小:346.50KB
返回 下载 相关 举报
单片机课程设计电子钟.doc_第1页
第1页 / 共23页
单片机课程设计电子钟.doc_第2页
第2页 / 共23页
单片机课程设计电子钟.doc_第3页
第3页 / 共23页
单片机课程设计电子钟.doc_第4页
第4页 / 共23页
单片机课程设计电子钟.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《单片机课程设计电子钟.doc》由会员分享,可在线阅读,更多相关《单片机课程设计电子钟.doc(23页珍藏版)》请在三一文库上搜索。

1、1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务 通过理论设计和实物制作解决相应的实际问题,巩固和运用在单片机技术中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。1.2 功能要求说明设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“P.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。

2、1.3 设计课题总体方案介绍及工作原理说明方案一:采用时钟芯片DS1302,该芯片可以进行时分秒的计数,DS1302通过串行方式与单片机进行数据传送,向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整,但是需在单片机外部扩展,电路较复杂,成本较高。方案二:采用单片机内部定时器,用软件对其进行秒、分、时的计数,单片机无法产生1s的定时时间,但是可以用硬件定时和软件计数相结合的方法实现,采用中断方式,即通过中断服务程序进行计数器溢出次数的累计,把定时器/计数器设定为10ms,计数溢出100次就可以得到1s,计60次为1分,60分计60次则为1小时,然后

3、通过数码管动态刷新显示出来,再设四个按键进行时间的调整,一个键用作启动/调整键,其余三个分别用于时、分、秒的调整。方案二不需要外部扩展芯片,电路较简单,成本较低,这里选用方案二。2 数字电子钟硬件系统的设计2.1 硬件总体设计 硬件系统总体设计如图2.1所示。USB接口电源 数码管显示电路 复位电路 A T 8 9 C 5 2 时钟电路数码管驱动电路 独立键盘图2.1 硬件系统总体设计2.2 数字电子钟硬件系统主要模块功能简要介绍(1) 功能芯片:本次设计采用ATMEL公司生产的AT89C52芯片,AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Fl

4、ash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可提供许多较复杂系统控制应用场合。(2) 电源和复位模块:AT89C52需5V电压,所以可以采用USB接口的5V电源对其供电,复位电路可采用上电复位、按键电平复位、按键脉冲复位3种,本次采用按键电平复位。复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序,并使其它功能单元处于一个确定的初始状态。本复位电路采用的是按键

5、复位,它是通过复位端经电阻与VCC电源接通而实现的,它兼具上电复位功能。因本系统的晶振的频率为12MHz,所以,复位信号持续时间应当超过2s才能完成复位操作。如电路原理图中的电源和复位模块。(3) 显示模块:系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。8个欧姆电阻则起限流作用。电路结构采用动态扫描的方式,所有数码管的段控端公用单片机P0口的8根输出口线,数码管的

6、段控端a、b、c、d、e、f、g、dp分别接到P0口的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7口线上,每个数码管的位控线单独占用单片机P2口一根输出口线,8位数码管从高位到低位分别接P2.0P2.7引脚。段控码(低电平有效)由P0口输出经上拉电阻上拉电压后送到数码管的段控端,位控码由P2口输出经三极管S9050驱动后送到数码管的位控端。(4) 键盘模块:本系统采用的是独立式键盘结构,每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。它软件是采用查询式结构,首先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确

7、认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。(5) 时钟模块:在AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。如电路原理图中的晶振电路。2.3 数字电子钟电路原理图、PCB图、元器件布局图数字电子钟电路原理图见附录A。数字电子钟PCB图见附录B。数字电子钟元件布局图见附录C。2.4 数字电子钟元器件清单 数字电子钟元器件清单见附录D。3 数字电子钟软

8、件系统的设计3.1 数字电子钟使用单片机资源的情况(1) 在AT89C52的P0口和P2口外接八个数码管,用P0口作数码管的段控码输出口(P0.0-P0.7对应于数码管的a-dp),P2.7-P2.0作数码管的位控码输出(P2.7-P2.0对应于LED7-LED0)。(2) 定时器0以中断方式工作,工作方式1。(3) 定时器控制寄存器TCON,通过设置该寄存器中TR0位的状态来控制定时/计数器0的启动/停止;中断允许寄存器IE,通过设置该寄存器EA/ET0位的状态来设置定时/计数器0中断允许/禁止;定时/计数器工作方式寄存器TMOD,设置定时/计数器0的工作方式。3.2 数字电子钟软件系统主要

9、模块功能简要介绍(1) 主程序:主程序的主要功能是进行定时器/计数器,显示缓冲区的初始化,显示,以及判断是否有功能键按下,判断按下的键并调相应的键功能程序。(2) 键功能程序:键功能程序的主要功能是执行对应的功能,Menu键为启动/调整键,第一次按下则由待机状态进入运行状态启动时钟,从00-00-00开始显示,然后按下为奇数则暂停,进入调时状态,按下Sec键则秒加1,按下Min键则分加1,按下Hour键则时加1;若按下为偶数则进入时钟运行状态。(3) 中断服务程序:中断服务程序的主要功能是进行计时操作,程序开始先判断计数溢出是否满了100次,若不满100次则表明没有达到最小计时单位秒,则中断返

10、回;若满100次表明已达到最小计时单位秒,则程序断续向下执行,进行分和时的计时。(4) 显示子程序:显示程序的主要功能是将显示缓冲区的段控码正确的显示在数码管上,采用动态显示,从右向左循环点亮每一位数码管。(5) 键扫子程序:键扫子程序的主要功能是判断是否有键按下,是哪个键按下。3.3 数字电子钟软件系统程序流程框图(1) 主程序流程框图如图3.1所示。(2) 计时1秒子程序流程框图如图3.2所示。(3) 键扫子程序流程框图如图3.3所示。(4) 显示子程序流程框图如图3.4所示。(5) 键监控子程序流程框图如图3.5所示。 图3.1 主程序流程框图 图3.2 计时1秒子程序流程框图 开始返回

11、图3.3 键扫子程序流程框图 图3.4 显示子程序流程框图图3.5 键监控子程序流程框图3.4 数字电子钟软件系统程序清单程序清单见附录E4 设计结论、仿真结果、误差分析4.1 数字电子钟的设计结论及使用说明该电子钟上电或按键复位后能自动显示系统提示符“P.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。S2键为启动/调整键,S3键为加一键,S4键为减一键,S5键转换调节内容。操作步骤如下:(1) 将+5V电源接到电

12、子钟电源插口上,接通电源开关。(2) 把电子钟电路板上的ISP程序下载线连接到计算机USB接口,在计算机上通过avr_fighter软件把电子钟程序下载到单片机内。(3) 电子钟程序下载到单片机以后,电子钟进入命令状态,显示“P.”。(4) 按下S2键,电子钟从0开始运行,此时LED7、LED6、LED4、LED3、LED1、LED0分别显示时、分、秒。(5) 再次按下S2键,电子钟进入调时状态,此时通过S3键、S4键、S5键分别调整电子钟的时、分、秒。按一下对应的值加一。调整到想要的时间后,再次按下S2键,电子钟将以用户调整时间为起点进入运行状态。4.2 数字电子钟的仿真结果本次设计的数字电

13、子钟有三种状态:待机显示“P.”状态,显示学号效果,时钟运行状态,时钟调整状态。它们分别如图4.1、图4.2、图4.3、图4.4所示。图4.1 待机显示“P.”状态仿真结果图4.2 学号显示效果图4.3时钟运行状态仿真结果图4.4 时钟调整状态仿真结果4.3 数字电子钟的误差分析虽说采用软件方式来产生1s的基本时间,然而定时器/计数器本身不能产生标准的1s定时,产生一个标准时间之后进行循环计数得到1s,但CPU执行代码需要1-2s的时间,因此产生的1s,1分,1小时,都会略大于标准的时间。此外,单片机也易受外界环境的影响,比如温度、湿度等干扰。故应该让单片机工作在适宜的环境下,同时采用实时时钟

14、芯片,这样能将误差降低到最小。4.4 设计重点、难点,体会及不足之处重点:单片课程设计考察的是一个人理论与实践相结合的能力,要求设计者具有一定的理论知识及动手操作能力。比如用Proteus软件进行单片机系统电路的仿真设计、Protel软件的使用、PCB板的硬件制作,Keil软件编写和调试汇编程序。难点:硬件电路的故障检测和修复,原理电路图的仿真设计,汇编程序的编写和调试。体会:现在来回想单片机的课程设计,有许多感触,从最开始接触单片机和汇编语言,到现在能独立完成一个课程设计。在本学期初期做PCB板时因布局的不科学导致最后的制作使用出现了许多麻烦,还有焊接的经验不足导致了虚焊;在C语言编程时,书

15、本上的很多知识又学的很不扎实,程序基本语句理解不够透彻,导致编一个简单程序都需要大量时间且过于复杂,真是耗时耗力耗单片机内存。 不足之处:数字电子钟的设计由于采用的是用硬件定时和软件计数的方式产生的1s,而忽略了CPU执行指令所需的时间,故时钟显示不是很精确。每尽管经过修改,每小时仍然有1到2 秒的误差参考文献1 李广弟.单片机基础M,北京:北京航空航天大学出版社,2007.06 2 阎石.数字电子技术基础(第四版).北京:高等教育出版社,1998.073 邱光源.电路(第五版).北京:高等教育出版社,2006.054 李朝青.单片机原理及接口技术M.北京:北京航空航天大学出版社,1998.5

16、 李勋等.单片机实用教程M.北京:北京航空航天大学出版社,2000.6 何为民.低功耗单片微机 系统设计M.北京:北京航空航天大学出版社,19997 李华.MCS-51单片机原理及实用接口技术M.北京:北京航空航天大学出版社,1993.8 何立民.单片机应用技术选编M.北京:北京航空航天大学出版社,1997.9 张友德.飞利浦80C51系列单片机原理与应用技术手册M.北京:北京航空航天大学出版社,1992.10 李杏春等.8098单片机原理及应用接口技术M.北京:北京航空航天大学出版社,1996. 教学建议如果老师经常强调给学生评分的主要依据是实验和课程设计,我认为这措施会很有成效。还有,老师

17、若是在课堂上常叫人起来回答问题,这将会更好的集中同学们的精神去一步一步的跟上老师的思路,希望老师可以加以考虑。再有,我觉得老师在课堂上应该再多举一些例题,这样可以让同学们对刚学到的新知识有更为清晰得认识。 而且,老师的课堂让人比较轻松,让人在轻松之余又能学到知识,这点希望老师继续保持。附录A 电路原理图附录 BPCB顶层图PCB底层图附录 C元器件布局图附录 D 数字电子钟元器件清单元器件名称规格数量AT89C52 1底座 3晶振12MHz 1发光二极管 9单排插40脚1三极管 90129蜂鸣器1小按键9下载口座子十芯1六脚开关1USB电源线加接口1电阻 2001电阻4.7K1电阻10K3电阻

18、 47024电容22F1电容33pF排阻10K2短路帽2PCB板子1附录E程序清单/* P.显示程序 */* crystal=12Mhz */* P2口位控口,P0口段控口 */#includereg52.h#include/*共阳数码管字型码*/*0,1,2,3,4,5,6,7,8,9,p.,灭*/ char code dis_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0x8c,0xbf,0xa1 ;/*P.显示代码序号*/ char find_code=11,11,11,11,11,11,11,11,1

19、1;int s=0;min=0;hour=0;int ms=0,i;sbit s1=P10; /用于开启使用/*/函数名: void DelayX1ms(uint count)/功能: 延时时间为1ms/调用函数:/输入参数:count,1ms计数/输出参数:/说明:总共延时时间为1ms乘以count,crystal=12Mhz/*/#define uchar unsigned char#define uint unsigned intvoid DelayX1ms(uint count) uint j; while(count-!=0) for(j=0;j80;j+); /*显示函数*/voi

20、d disp() char i ,j=0xfe; char k; for(i=0;i=100) /定时1秒到 ms=0; s+; if(s=60)/*秒位*/ /秒位到60进位 s=0; min+; if(min=60)/*分位*/ min=0; hour+; if(hour=24)/*小时位*/ hour=0; find_code0=s%10; /更新显示 find_code1=s/10; find_code2=13; /数码管的第三、五个位控显示- find_code5=13; find_code3=min%10; find_code4=min/10; find_code6=hour%10

21、; find_code7=hour/10; /*主函数*/void main() int a,b,k,j,l,s0,x,y,z,m,min0,hour0,biaozhi; while(1) find_code7=10;/起始显示P. while(s1!=0) disp(); /扫描开启键 EA=1;/定时器初始化 ET0=1; TR0=1; TMOD=0x01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; while(1) if(b=1) /调秒的时侯,秒个位亮k+;if(k=1) /1k50,秒个位灭x=1; /x用来阻止秒个位灭的时候进入显示

22、更新区find_code0=11;if(k=50) /50k100秒个位亮find_code0=s0;if(k=100)k=0; if(b=2)j+;if(j=1)y=1;find_code3=11;if(j=50)find_code3=min0;if(j=100)j=0; if(b=3)l+;if(l=1)z=1;find_code6=11;if(l=50)find_code6=hour0;if(l=100)l=0; switch(key() /按键/键扫 case 0x00:disp();break; /没键按下,显示当前内容 case 0x01:a+;TR0=1;biaozhi=0;b=

23、0;break; /a为基数启动,暂停再继续后,将一些标志及时清零 case 0x08:if(a%2=0)/调时间移位键,只能在暂停时候才用 b+; /每按一下移位键,b值改变,移到相应位调时间 if(b=4) /移到调时位,再移回调秒键 b=1; if(b=1&m=1) /m用来阻止第一次按移位键进入下面一条语句 find_code6=hour0; if(b=2) find_code0=s0; /再次移位后,秒个位还回原值 if(b=3) find_code3=min0; m=1; break; case 0x02:if(a%2=0) if(b=1)/加1键 s+;x=0; /有调节键按下,

24、改变X后能进入显示更新区更新if(b=2) min+;y=0; if(b=3)hour+;z=0; break; case 0x04:if(a%2=0) if(b=1)/减1键 x=0; s-; if(s=-1)/减到00时,不再变化 s+; if(b=2) y=0; min-; if(min=-1) min+; if(b=3)z=0;hour-;if(hour=-1)hour+; break; case 0x10: find_code7=14; find_code6=13; /显示学号find_code5=0;find_code4=9;find_code3=0;find_code2=3;fi

25、nd_code1=0;find_code0=3; if(a%2=0&b=1&x=0) /调节更新区 /只有暂停的时候,才能进行调时间 find_code0=s%10; /调秒后更新显示 find_code1=s/10; s0=find_code0; /保留调节更新的秒个位,用于闪烁 if(s=60) s=0; if(a%2=0&b=2&y=0) find_code3=min%10; find_code4=min/10; min0=find_code3; if(min=60) min=0; if(a%2=0&b=3&z=0) find_code6=hour%10; find_code7=hour/10; hour0=find_code6; if(hour=24) hour=0; if(a%2=0&biaozhi=0) /a为偶数暂停,biaozhi用来暂停后只更新一次闪烁位 TR0=0; biaozhi=1; s0=find_code0; min0=find_code3; hour0=find_code6;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1