资源描述:
《片机课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、单片机系统及原理课程设计1引言在对单片机进行理论的学习之后,为了能更深一层对其学习,通过对一个综合题目的设计与调试了解单片机在各种制作中和中小规模集成电路的作用及实用方。进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。熟悉集成电路及有关元器件的使用,熟悉面包板的使用。熟悉51单片机的结构,掌握keil、proteus软件的使用方法及仿真电路的设计。2设计方案及原理2.1数字钟的设计方案控制部分用单片机STC89C52最小模块进行控制,输入模块用四个微动开关实现对数字钟时间的设置和日期、时间之间的转换,输出
2、显示模块一个八位用的七段共阴数码管。数字钟电路主要由显示器“时”,“分”,“秒”,“年”,“月”,“日”和单片机,还有校时电路组成。8个数码管的段选接到单片机的P0口,位选接到单片机的P3口。控制模块的四个微动开关接在P1口上。软件部分由一个主函数和若干个子函数组成,子函数主要有定时子函数、显示子函数、设置子函数三部分,通过主函数对几个子函数的调用实现对数字钟显示、设置的控制。2.2数字钟的原理数码管按照数码管动态显示的工作原理工作,将标准秒信号送入“秒单元”,“秒单元”采用60进制计数器,每累计60秒发出一个“分脉
3、冲”信号,该信号将作为“分单元”的时钟脉冲。“分单元”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时单元”。“时单元”采用24进制计时器,可实现对一天24小时的累计。然后累加24小时日加1,日加满一个月月加1,月加满12个月年加1。显示电路将“时”、“分”、“秒”,“年”,“月”,“日”通过七段显示器显示出来。校时电路时用来对“时”、“分”、“秒”,“年”,“月”,“日”显示数字进行校对调整,按一下S_SET键,秒单元就加1,按一下M_SET键,分就加1,按一下H_SET-13-单片
4、机系统及原理课程设计键,时就加1。通过模式转换键用上述方法进行设置,也可通过此键在日期,时间循环转换。3硬件设计3.1数字钟硬件电路原理图根据要求,设计一个时钟。能够显示时间格式为时.分.秒,并且设置键盘,根据按键任意调整时间。利用8051内部定时器0与软件结合来实现1秒定时中断。四个开关方便的对秒、分、时分别调整,保证功能完善,工作可靠,定时采用片内定时器定时,提高了电子时钟的准确度。根据题目要求设计的总体框。如图1所示。图1数字钟硬件电路图-13-单片机系统及原理课程设计3.2Proteus仿真图根据硬件原理电路
5、,在Keil中生成.hex的可执行文件,Proteus中画图的仿真结果,如图2所示。图2Proteus仿真结果-13-单片机系统及原理课程设计4软件设计数字钟软件设计流程图如图2所示。图2流程图-13-单片机系统及原理课程设计5总结本次设计的单片机电子钟系统中,其误差主要来源包括晶体频率误差,定时器溢出误差,延迟误差。晶体频率产生震荡,容易产生走时误差;定时器溢出的时间误差,造成走时误差;延迟时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。软件程序的调试分模块调试,统调是最后一环。软件调试可以采取离线调试和
6、在线调试两种方式。前者不需要硬件仿真器,可借助于软件仿真器即可;后者一般需要仿真系统的支持。本次课题,Keil软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。仿真部分采用protus7professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。刚开始在此软件上进行仿真的时候显示乱码,不能够正常的显示,经过分析是由于显示函数中出现了逻辑错误,经过几次修正调试成功后再进行仿真,结果显示正常。6参考文献[1]李华,王思明等.单片机原理及应用[M].兰州大学
7、出版社,2001.5[2]马忠梅等.单片机C语言应用程序设计[M].北京航空航天大学出版社,2003.7[3]皮大能,南光群等.单片机课程设计指导书[M].北京理工大学出版社,2010.7[4]周润景,丁莉等.单片机电路设计、分析与制作[M].机械工业出版社,2010.8-13-单片机系统及原理课程设计附录#include#defineucharunsignedchar#defineuintunsignedintsbitS_SET=P1^0;sbitM_SET=P1^1;sbitH_SET=P1^2
8、;sbitRESET_SET=P1^3;sbitbeep=P2^0;sbitd=P0^7;uintyear=2012;ucharSECOND,MINITE,HOUR,TCNT,RESET,SECOND0,MINITE0,HOUR0,SECOND1,MINITE1,HOUR1,day=6,mon=7,temp=0;ucharcodescan[8]