《时钟计时器的设计单片机原理及应用课程设计.doc》由会员分享,可在线阅读,更多相关《时钟计时器的设计单片机原理及应用课程设计.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流时钟计时器的设计单片机原理及应用课程设计.精品文档.湖南人文科技学院课程设计报告课程名称:单片机原理及应用课程设计设计题目: 时钟计时器的设计 系 别: 通信与控制工程系 专 业: 班 级: 学生姓名: 学 号: 起止日期: 2012年12月23日 2012年12月30日 指导教师: 教研室主任: 指导教师评语: 指导教师签名: 年 月 日成绩评定项 目权重成绩1、设计过程中出勤、学习态度等方面0.22、课程设计质量与答辩0.53、设计报告书写及图纸规范程度0.3总 成 绩 教研室审核意见:教研室主任签字: 年 月 日教学系审核意见: 主任签
2、字: 年 月 日摘 要 时间计时器以单片机为核心,由计时器,综合控制器等组成。系统采用模块化设计,主要分为计时显示模块和按键控制模块。每个模块的程序结构简单,任务明确,易于编写、调试和修改。编程后利用Keil软件来进行编译,在生成HEX文件装入芯片中。本设计中系统硬件电路主要是由以下几个部分组成:单片机AT89C52、振荡电路、显示电路和按键开关。该系统具有60S内准确计时和及时清零的功能,基于单片机设计的时间计时器因为体积小,成本低廉等优点,被广泛用于我们的日常生活、工作当中。关键词:电子时钟、单片机、高精度目 录设计要求21 方案论证与对比21.1 方案一21.2 方案二21.3 方案对比
3、与选择32 系统硬件设计42.1 设计核心单元(AT89C52)42.2 程序下载单元42.3 数码管显示单元52.4复位单元64系统软件设计75系统调试86详细仪器清单97总结与致谢10参考文献11附录一:时间计时器电路PCB原理图12附录二:USB下载模块电路PCB原理图13附录三:部分软件代码14时间计时器的设计设计要求功能:时钟计时器要求用单片机及6位LED数码显示时、分、秒,以24小时计时方式运行,能整点提醒(蜂鸣),使用按键开关可实现时、分调整,秒表/时钟功能转换,定时设定提醒的功能。学习、了解单片机相关指令在各方面的应用,学习、了解单片机相关指令在各方面的应用,让我们学到更多关于
4、单片机方面的知识。学习更多关于单片机方面的知识。1 方案论证与对比1.1 方案一采用专用集成时钟芯片DS1302实时时钟日历芯片完成时钟/日历的计时。以AT89C52芯片作为核心。这种实现的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易原理框图如图1所示: 图 1方案一系统方框图该方案因为采用时钟芯片DS1302来定时,导致生产成本偏高的缺点。1.2 方案二电子时钟由AT89C52,八段数码管等构成,采用晶振电路作为驱动电路,由AT89C52内部定时器程序程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。因为是改用AT89C52内部定
5、时器定时,没有外加专用计时芯片,降低了生产成本,提高了推广的可能性。而电路中五个控制键拥有多种不同的功能,模式按键,可以实现数码管显示不同信息的功能,达到日历和时间切换的目的;移位按键,达到在时间调节模式下,改变数码管被选中的位;加减按键,则可以通过按键实现分钟的累加,每按一次数码管被选中位显示值加减变化一次则可实现显示数值的调节。电路图如图2所示。图 2 方案二系统方框图1.3 方案对比与选择以上二个方案一个方案时间准确性搞,程序简单。但成本偏高。而方案二直接使用核心芯片AT89C52的内部资源定时器来,不能保证长时间下的时间准确性。但降低了成本。我们进过讨论最终选择方案二。选择低成本的,适
6、用于短时间内的时间显示和时间定时。2 系统硬件设计2.1 程序下载单元单片机普遍采用MAX232串口下载程序,这次我们采用另外一种下载方式,USB下载方式。原理图如图4所示:图 4 下载单元PL-2303原理图2.2 数码管显示单元所谓数码管就是为数码管显示提供的各段状态组合,即字形代码。八段数码管的段码为八位,用一个字节即可表示。在段码字节中代码位与各段发光二极管的对应关系表1。表1 段码字节代码位与发光二极管的关系段码D7D6D5D4D3D2D1D0段名dpgfedcba段码的值与数码管公共引脚的接法有关。以八段数码管为例,显示十六进制的段码值如表2。表2 十六进制段码表数字共阳极段码共阴
7、极段码数字共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3B0H4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H灭FFH00H880H7FH并排使用的多位数码管称为LED显示器。LED显示器多采用动态显示方式,全部数码管共用一套段码驱动电路,各位数码管的同段引脚短接后接到相应段码的驱动线上。显示时通过位控制信号采用扫描的方法逐位地循环点亮各位数码管。动态显示虽然在任何时刻只有一位数码管被点亮,但是由于人眼具有的视觉残留效应,看起来与全部数码管持续点亮的效果完全一样。由
8、于单片机的驱动电流较小,无法正常驱动8位数码管,因此我们在单片机与数码管中间加上74LS573用于驱动数码管的正常显示。电路如图5示:图 5 数码管显示电路2.4 复位单元当STC89C52单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容的充电和反相门的作用,使RST持续一段时间
9、的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。电路如图6示:图6 复位单元电路 4 系统软件设计1. 程序流程如图7所示:我的程序中用了个定时器中断,还是用了独立键盘调时,蜂鸣器闹铃及提醒。图7软件系统流程图2.中断服务程序模块我的程序中用了个定时器中断,所以有中断服务程序,是为了使秒自加而使用定时器中断,定时50MS循环20次到一秒以后,向CPU申请中断,使秒自加1。图8 中断服务程序流程图3.加1子程序流程框图 加1子程序流程框图如图9所示:图9 加1子程序流程图5 系统调试1.设计核心单元(AT89C52)AT89C5
10、2单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。 电源: VCC - 芯片电源,接+5V; VSS - 接地端; 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 控制线:控制线共有4根, ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。 PSEN:外ROM读选通信号。 RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。 EA/Vpp:内外ROM选择/片内E
11、PROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。 I/O线80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。AT89C52封装如图3所示:图 3 AT89C522.在PROTEUS中设计硬件1、PROTEUS软件使用过程如下:1)选择元器件2)放置元器件3)连线4)添加程序5)运行仿真2、在WAVE中编写程序,编译、连接形成HEX文件。3、在PROTEUS中把HEX文件加载到单片机芯片上。即protues原理图中。4、运
12、行仿真看结果如图8所示:图8 protues仿真结果6 详细仪器清单表格 3 仪器清单仪器名称数量STC89C5214位共阴数码管2蜂鸣器1贴片按键5圆排母40P74LS57417 总结与致谢短暂几天的单片机课程设计结束了,从这次课程设计中学到了很多很多东西。例如:如何运用protel DXP2004制作双面板。大型程序的编写等。在这次课程设计中遇到很多困难,程序的编写无从下手,到最后还是借鉴别人的程序来完成的。其次懂的了编写复杂程序该如何下手。在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一
13、次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的。课程设计结束了,但是从中学到的知识会让我受益终身,因为无论以后从不从事单片机工作,也许毕业设计会用到呢。在此我特别感激谢老师和实验室的各位同学,没有你们的帮助,我们不会这么顺利完成本次设计。参考文献1 候伯亨。VHDL硬件描述语言与数字逻辑电路设计。西安:西安电子科技大学出版社,19992 王天曦
14、 ,李洪儒。电子技术工艺基础编著。北京:清华大学出版社,20003 李广弟,朱月秀,王秀山。单片机基础。北京:北京航空航天大学出版社,20014 赵曙光,郭万有,杨颂华。可编程逻辑器件,原理,开发与应用。西安:西安电子科技大学,2000.85 朱定华,戴汝平.单片微机原理与应用.(M) 北京:清华大学出版社,2003附录一:时间计时器电路PCB原理图附录二:USB下载模块电路PCB原理图附录三:部分软件代码#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include #define uint unsigned int #define uchar unsig
15、ned char void delay(unsigned int);/延时void display( uchar);/显示void clock();/闹钟void TIAOSHI(void);/调时void buzzer(uchar flag,uchar style,uchar times);/蜂鸣器void InitTIMER0(void);/中断初始化void KeyScan(void);/按键扫描void KeySet(void);/按键控制char Select=1;char RARLTIME1=0 ,RARLTIME2=0 ,RARLTIME3=0 ,RARLTIME4=0 ,RAR
16、LTIME5=0;char stopmiao=0;char num2=0;Char num1=0;Char flagzhuan=0;bit ALARMFLAG=0;bitflag_1s=0;sbit BEEP = P33;sbit KEY1=P00;sbit KEY2=P01;sbit KEY3=P02;sbit KEY4=P03;unsigned code Disp_Tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /段码控制unsigned code dispbitw8=0x7F,0xbF,0xdF,0xef,0xf7,
17、0xfb,0xfd,0xfe; /位选控制 查表的方法控制uchar LedOut8,num=0,k=0,zz; miao=50,fen=59,shi=23,day=29,month=2,week=1,year=2012,shi1, fen1=1,miao1,DelayCNT,uKey1Counter = 0,Stopwatch_Cnt=0;DelayCNT1=0; /变量定义 void main(void) InitTIMER0(); /初始化定时器0 clock(); KeySet();TIAOSHI(); buzzer(!miao)&(!fen),0,1);/整点提醒buzzer(ALA
18、RMFLAG,0,2);/闹钟display(Select); /数码显示 void display( uchar mode) int i,n; if(mode=5)/秒表 LedOut0=0x72;/rLedOut1=0x3e;/u LedOut2=0x37|0x80;/nLedOut3=Disp_TabStopwatch_Cnt/600/10;LedOut4=Disp_TabStopwatch_Cnt/600%10;/分 LedOut5=Disp_TabStopwatch_Cnt%600/100;LedOut6=Disp_TabStopwatch_Cnt%600%100/10|0x80;
19、/秒LedOut7=Disp_TabStopwatch_Cnt%10; else if(mode=4)/闹钟 LedOut0=0x37;/nLedOut1=0x77;/aLedOut2=0x3f|0x80;/o LedOut3=Disp_Tabshi1/10;LedOut4=Disp_Tabshi1%10;LedOut5=Disp_Tab10;LedOut6=Disp_Tabfen1/10;LedOut7=Disp_Tabfen1%10;else if(mode=3)/年 LedOut0=0x6e;/yLedOut1=0x79;/eLedOut2=0x77;/a LedOut3=0x72|0x
20、80;/r LedOut4=Disp_Tabyear/1000;LedOut5=Disp_Tabyear%1000/100;LedOut6=Disp_Tabyear%100/10; LedOut7=Disp_Tabyear%10;else if(mode=2)/周月日 LedOut0=Disp_Tabweek/10;LedOut1=Disp_Tabweek%10;LedOut2=Disp_Tab10; LedOut3=Disp_Tabmonth/10;LedOut4=Disp_Tabmonth%10;LedOut5=Disp_Tab10;LedOut6=Disp_Tabday/10;LedOu
21、t7=Disp_Tabday%10;elseif(mode=1)/时分秒LedOut0=Disp_Tabshi/10;LedOut1=Disp_Tabshi%10;LedOut2=Disp_Tab10;LedOut3=Disp_Tabfen/10;LedOut4=Disp_Tabfen%10;LedOut5=Disp_Tab10;LedOut6=Disp_Tabmiao/10;LedOut7=Disp_Tabmiao%10;for( i=0; i8; i+)switch(Select) case 1:switch(RARLTIME1)case 1 : n=6; break;case 2 : n
22、=3;break;case 3 : n=0;break;default:break;if(RARLTIME1!=0)if(n=i)|(n+1=i)if(flag_1s=1)P1=0x00;else P1=LedOuti;elseP1=LedOuti;if(RARLTIME1=0)P1= LedOuti;break;case 2:switch(RARLTIME2)case 1 : n=6; break;case 2 : n=3;break;case 3 : n=0;break;default:break;if(RARLTIME2!=0)if(n=i)|(n+1=i)if(flag_1s=1)P1
23、=0x00;else P1=LedOuti;elseP1=LedOuti;if(RARLTIME2=0)P1= LedOuti;break;case 3:if(RARLTIME3=1) n=6; if(RARLTIME3!=0)if(n=i)|(n+1=i)if(flag_1s=1)P1=0x00;else P1=LedOuti;elseP1=LedOuti;if(RARLTIME3=0)P1= LedOuti; break;case 4:if(RARLTIME4=1)n=6;if(RARLTIME4=2)n=3;if(RARLTIME4!=0)if(n=i)|(n+1=i)if(flag_1s=1)P1=0x00;else P1=LedOuti;else P1=LedOuti;if(RARLTIME4=0)P1= LedOuti;break;case 5:P1= LedOuti;break;default:break;P2= dispbitwi;delay(110);P2= 0xff;