《单片机数字电子钟.doc》由会员分享,可在线阅读,更多相关《单片机数字电子钟.doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录1 课程设计目的与要求11.1 设计目的11.2 设计要求12 硬件设计22.1 方案设计22.2 电路设计22.3 原理图与PCB图32.4 制板32.5 系统调试33 软件设计43.1 流程图43.2 程序清单54 设计结果与调试64.1 软件调试64.2 硬件调试64.3 误差分析64.4 教学建议6结束语7致谢8参考文献9附 录101 课程设计目的与要求1.1 设计目的了解数字钟的原理,从而学会制作数字钟。通过数字钟的制作进一步的了解在制作中用到的各种中小规模集成电路的作用与使用方法。学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。学习并掌握单片机的使用和编程方法。1.2
2、设计要求可调整时间的数字时钟。只显示分、秒,采用动态显示模式。通过按键可对时钟进行选位和加减的时间调整,调整时选中位进行闪烁。可实现时间暂停和重新启动。计时精确。2 硬件设计2.1 方案设计数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。标准的频率时间信号必须做到准确稳定,通常使用石英晶体振荡电路构成数字钟。本次课程设计的内容是设计一个数字钟,由单片机通过编辑的程序控制电路,实现显示秒、分的一个电子时钟。并且可以通过按键选择调整时钟时间,以与暂停的功能。电路原理图如图1LED数码显示复位电路数码管驱动AT89S52键盘数码管限流晶振电路图1 原理图2.2 电路设计本次设计中使用的主要
3、元器件有AT89S52、三极管、数码管、晶体振荡器、按键、LED指示灯等。本次数字钟电路用到的模块主要由电源电路、单片机控制电路、晶体振荡电路、显示电路等组成。(1) 电源电路采用外接5V直流电源驱动其运行。电源电路才用一个开关来打开关闭电源。另外时用一个发光二极管来指示电源的通断。(2) 晶体振荡电路电容C1、C2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了震荡器的功能。由于晶体具有较高的频率稳定性与准确性,从而保证了输出频率的稳定和准确。(3) 单片机控制电路数字钟的核心原件为AT89S52,配合程序对整个电路进行控制
4、。P1口输出时钟显示的数字,P0口对数码管进行片选,P0口时用需接上拉电阻和三极管,P2口接受按键信号,通过中断来实现对数字钟的时间的调整。复位按键可对单片机进行复位。(4) 显示电路由数码管、电阻和三极管组成。(5) 复位电路为手动复位,由一个开关,电解电容,电阻组成。(6) 下载口电路下载模块:ISP下载功能,是通过单片机的SPI口实现的。89S系列的单片机都带ISP下载功能各种功能电路相互结合组成实现设计功能要求的数字钟电路,配合根据电路编写的程序以实现设计要求的全部功能。2.3 原理图与PCB图使用protel绘制全部电路的原理图和PCB图,网络标号的使用可以让图看起来简洁清楚,方便绘
5、图人的操作。详图请见附录。2.4制板根据原理图在万用版上使用导线将各种器件连接成电路板。2.5系统调试使用万用表对制作好的电路板进行电气检查,确保没个引脚的连接都符合原理图的设计,没有出现虚焊、漏焊或者短路的情况。通电状态下检查各器件的工作电压是否正常。3 软件设计3.1 流程图通过单片机来实现数字钟的功能。流程图2图2 数字钟总原理图定时器中断时,先检测50ms脉冲是否计数20次,计数到20次,秒就加1;如果没计满60,就返回显示时间,如果秒计满60秒,就清零秒,给分加1;检测分钟,如果没计满60,继续计时,返回显示时间,如果满60,就清零分钟,给小时加1;检测小时,如果没计满24,就继续计
6、时,返回显示时间,如果计满24,就清零,给秒加1,显示时间。时+1=24?秒+1=60?脉冲溢满20?分+1=60?分清零,时加1时清零中断返回图3定时中断流程图秒清零,分加1秒加1定时中断口3.2 程序清单根据原理图,写出相应的程序,程序清单详见附录A4 设计结果与调试4.1 软件调试软件为老师所提供提供,其原理在上面以作说明。软件部分是先参考书上的例子,然后自己根据硬件电路写程序,本次编程采用的是C语言。刚刚开始,编写不会一次性通过,经过仔细分析修改最后编译成功。4.2硬件调试把程序烧入单片机,上电后,按下开始停止按键,时钟便从000000开始每秒加1计时,再次按下开始停止按键,时间暂停,
7、进入调时状态。按秒按键,秒个位闪烁并加1;按下调分按键,分个为闪烁并加1;按下调时按键,分个为闪烁并加1。当再次按下开始停止按键时,时钟又运行。当按下复位键时,时间显示消失。经以上调试所要求的功能均以实现。4.3 误差分析在调试过程中,最初几次数码管显示有一定的问题,但最后发现是位控线和段控线的焊接存在问题。在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。而你开启定时器和开启LED灯顺序上是有先后的,这个过程需时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。第三,设计用到12MHz的晶振,计算是满2
8、0次为一秒钟,但实际会慢很多。4.4 教学建议最开始学习单片机时,是对单片机不感兴趣的,上课也是一直只是抱着完成任务的心态,直到后来,上了第一次单片机实验课,王老师通过各种问题,让我们巩固上课所学知识,通过实际解决问题,才慢慢发现单片机是一门很有趣的课程,并且每当你解决一个问题时,你会充满成就感。希望王老师再接再厉,对我们之后的学弟学妹,也以同样的心态对待。相信,他们也会像我们一样,痛并快乐着!结束语这个学期即将结束,从刚开学,老师就说我们的课程设计从第一节课开始。在这个学期里,我学到了很多,对单片机有了更深刻的认识,也对自己的不足有了清醒的认识。虽然我在上课时,觉得理论很容易,但是当具体写程
9、序时,发现还是有各种各样的问题出现。开学时画PCB图,一点都不熟练,出了不少错误。在焊接过程中,也出现了不少虚焊的情况。通过这次的课程设计,使我注意到了以上几点,应在以后的学习中加以注意。通过这次机会不但练习了编程,而且还对AT89S52单片机又加深了一些认识,练习了定时器,中断等。课程设计很快就这样过去了。我们每个人都学到了很多东西,同时也感觉到了自己的不足,它将对我们以后参加工作有很大的帮助,有利于我们以后走上工作岗位。致谢在整个课程射界的过程中,同学给予的帮助很重要,他们是我成功的关键,尤其在焊接时,一个人很容易疏忽大意,而我们一起时,轻松愉快也不容易出问题,再就是遇到困难时,首先自己会
10、仔细考虑,实在想不出来,我们会在一起思考找问题,每次问题的解决都会充满成就感。在设计过程中,老师给予了我们很多帮助,其实在每次单片机实验的时候,老师就是通过各种各样的问题,来让我们更加好的学习单片机。没有单片机实验带给我们扎实的基础,这次课程设计也不会这么顺利,取得成功。非常感谢老师的帮助!参考文献1、马忠梅,单片机的C语言Windows环境编程宝典M, :航空航填天大学,2003.6; 1, Ma Zhongmei, microcontroller C language Windows environment programming book M, Beijing: Beijing Univ
11、ersity of Aeronautics aviation days Press, 2003.6;2、李光飞,单片机C程序设计指导M,:航空航天大学,2003.01 ;2, Li Guangfei, microcontroller C program design the guidance M, Beijing: Beijing University of Aeronautics and Astronautics Press, 2003.01;3、李光飞,单片机课程设计实例指导M,:航空航天大学,2004.9。3, Li Guangfei, SCM curriculum design exa
12、mples to guide M, Beijing: Beijing University of Aeronautics and Astronautics Press, 2004.9.附 录附录A:程序清单:#include#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,0xbf; /*显示缓冲数组(存放显示信息的字型码的序号)*/ char find_code8;char time
13、;sbit p12=P12;/*/函数名: void DelayX1ms(uint count)/功能: 延时时间为1ms/调用函数:/输入参数:count,1ms计数/输出参数:/说明:总共延时时间为1ms乘以count,crystal=12Mhz/*/#define uchar unsigned char#define uint unsigned intuchar sec=0,min=0,hour=0; void DelayX1ms(uint count) uint j; while(count-!=0) for(j=0;j80;j+); /*显示函数*/void disp() char
14、i,j=0xfe; char k; for(i=0;i=20) /是否到1秒,到1秒,秒加1,否则函数返回 click=0; if(+sec=60) /加到60秒,秒清0 sec=0; if(+min=60) /分加1,是否到60分,否则函数返回 min=0; /加到60分,分清0 if(+hour=24) /时加1,是否到24小时,否则函数返回 hour=0; /加到24小时,时清0 find_code0=sec%10;find_code1=sec/10; find_code2=12;find_code3=min%10;find_code4=min/10;find_code5=12;find
15、_code6=hour%10;find_code7=hour/10; /LED显示缓冲区时间值更新 void main() while(1) find_code0=11; find_code1=11; find_code2=11; find_code3=11; find_code4=11; find_code5=11; find_code6=11; find_code7=10; disp(); switch(key() case 0x01: TMOD=0x01; /定时器1,工作方式1 TH0 =0x3c; TL0 =0xb0; /50ms中断一次 EA=1; ET0=1; TR0=1; wh
16、ile(1) find_code0=0;find_code1=0; find_code2=12;find_code3=0;find_code4=0;find_code5=12;find_code6=0;find_code7=0;disp();while(1) mm: disp(); if(key()=0x01)/进入调整状态 while(1) TR0=0; disp(); switch(key() case 0x01: TR0=1;goto mm;break; /进入运行状态 case 0x02: / 时调整hour+; if(hour=24) hour=0; break; case 0x04
17、: / 分调整 min+; if(min=60) min=0; break; case 0x08: / 秒调整sec+;if(sec=60)sec=0;break; default: disp(); break; find_code0=sec%10;find_code1=sec/10; find_code2=12;find_code3=min%10;find_code4=min/10;find_code5=12;find_code6=hour%10;find_code7=hour/10; default: disp(); break; 附录B:图B1 电路原理图附录C:图C1 布局图图C2 底层图C3 PCB顶层图C4 实物仿真图附录D:元器件清单:名称数量参数单片机1个AT89S52共阳数码管2个共阳极4位1体底座3个晶振1个12MHz发光二极管9个单排插1个40PIN蜂鸣器1个按键9个排阻2个10K下载口座子1个10芯6脚按键开关1个USB电源线加接口1个电阻24个470电阻3个1K电阻1个200电解电容1个22f瓷片电容2个33pf短路帽3个PCB板1块电源插座1个杜邦线1个铜柱(带螺母)4个三极管9个PNP9012表D120 / 21