欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载
     

    596.基于单片机AT89S52控制的数字时钟系统【单片机毕业设计课程设计】.doc

    • 资源ID:4146110       资源大小:207.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    596.基于单片机AT89S52控制的数字时钟系统【单片机毕业设计课程设计】.doc

    基于单片机AT89S52控制的数字时钟系统 【摘要】 本系统的设计电路是以AT89S52单片机为核心控制器,其外围电路主要包括键盘模块、LED显示模块。这种电子钟不仅具有了一般电子钟的基本功能,并且具有以下功能:闹钟时间设置,显示年月日等一系列功能。其中利用单片机中断系统,实现时间的计时功能。通过键盘和LED提示可方便地校对时钟和设置闹钟时间,完成年月日调整等功能。整个系统使用单片机S52语言进行编程,实现其设计的各项功能。 【关键词】 数字时钟 单片机 S52语言【Abstract】 The system uses MCU AT89S52 as its central part. The periphery circuits mainly include keyboard module, LED display module. This kind of electronic clock not only has basic function of the general digital clock, but also have the following function: the alarm clock time establishment, demonstrating the calendar, and so on. We can realize the display of time establishment by using the MCU interruption system. To proofread the clock and the establish alarm clock time conveniently, we can use LED display and the keyboard . The overall system carries on the programming by using MCU C51 language, and realizes its each design function. 【Key Words】: electronic clock、 MCU 、 S52 language 目录引言 31、方案论证与比较41.1显示模块 41.2控制电路模块 41.3键盘模块 41.4程序编写语言选择42、数字时钟系统的工作原理53、数字时钟硬件系统设计53.1时钟、复位、键盘接口电路 63.2显示器接口电路 64、系统软件部分84.1开发软件及编程语言简介84.2程序流程图85、功能说明126、测试方法及结论12结束语12致谢词12参考文献13引言数字时钟已成为人们日常生活中必不可少的物品,广泛用于个人家庭以及车站、码头、剧院、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。随着技术的发展,人们已不再满足于钟表原先简单的报时功能,希望出现一些新的功能,诸如日历的显示、跑表功能、重要日期倒计时显示等,以带来更大的方便,而所有这些,又都是以数字化的电子时钟为基础的。因此,研究实用电子钟及其扩展应用,有着非常现实的意义,具有很大的实用价值1。 由于数字集成电路技术的发展和采用了先进的石英技术,使电子钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。虽然现在市场上已有现成的电子钟集成电路芯片出售,价格便宜,使用也灵活,如可以随意设置时、分、秒的输出,改变显示数字的大小等,并且由于集成电路技术的发展,特别是MOS集成电路技术的发展,使电子钟具有体积小、携带方便,但是这里介绍的实用电子钟可以满足使用者的一些特殊要求,输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。 1、方案论证与比较1.1显示模块 方案一:采用LED静态显示方式。用此方式编写程序相对比较简单,一旦将欲显示的数据发送出去,只要当前显示的数据没有变化,就无须理睬数码管显示器,这就是静态数码管显示的好处。但本设计显示的位数比较多,若用此方案则会使硬件的开销多,耗电量大。方案二:采用LED动态显示方式。此方式可以大幅度地降低硬件成本和电源的功耗,因为某一时刻只有一个数码管工作,也就是所谓的分时显示,故显示所需要的硬件电路可分时复用。本设计即基于这种思想而采用动态数码管显示5。1.2控制电路模块方案一: 纯硬件电路系统。各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。 方案二: 用可编程逻辑器件(PLD)实现。这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。但采用这种方案系统的灵活性不够,不利于各种功能的扩展。 方案三:采用AT89S52单片机作为系统的控制核心。由于使用了单片机,整个系统可编程,系统的灵活性、可靠性大大增加了7,单片机还可进行软件抗干扰功能9。另外,本方案可以方便的实现其他功能的扩展。 经过以上的比较论证,选用方案三来完成项目设计的要求。 1.3键盘模块方案一:采用阵列式键盘,此类键盘是采用行列扫描方式,优点是当按键较多时可以降低占用单片机的I/O口数目,缺点是电路复杂且会加大编程难度2。方案二:采用独立式按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。缺点是当按键较多时占用单片机的I/O数目较多,优点是电路设计简单,且编程极其容易3。 由于该系统采用了常规钟表式的校对方式,用键较少,系统资源足够用,故采用了方案二。1.4程序编写语言选择 方案一:采用汇编语言编写。汇编语言具有能够直接操作机器硬件、指令的执行速度快,但由于汇编语言不是结构化的程序设计语言,用它编写的程序可读性较差,不便于资料的交流和移植,调试也比较麻烦4。 方案二:采用S52语言编写。在单片机开发应用中引用S52语言可以使单片机有很好的移植性,应用S52语言编写系统软件不仅大大缩短开发周期、增加程序的可读性,而且便于修改和扩充。且S52语言编译器可以自动完成变量的存储单元分配,编程者可以专注于应用软件部分的设计,从而大大加快了开发速度。所以本设计程序编写语言采用S52语言10。2、数字时钟系统的工作原理 数字时钟的设计有多种方法,本设计采用单片机技术。数字时钟设计的关键是如何产生秒的时间基准。本设计利用了单片机的定时器/计数器和中断系统,通过软件计数的方法,获得了秒的时间基准。具体方法如下:单片机晶振频率fosc=6MHZ,设定定时器/计数器0的工作方式为工作方式1,软件控制定时器/计数器0的运行、停止,定时时间100ms,则定时器/计数器0溢出中断10次即可得到1秒的时间基准,前0.5秒时使显示秒的发光二极管暗,后0.5秒时使显示秒的发光二极管亮,定时器/计数器0计数初值X应满足(216-X)*2=100000us,X=15536(十进制),3CB0(十六进制)。定时器/计数器0采用中断控制方式,溢出次数在定时器/计数器0的中断服务程序中,通过软件计数器累计,累计次数满10次,则表明产生了1秒的时间基准。另外,时钟从秒到分、分到时、时到日期的计时是通过累加和数值比较实现的。数字时钟的显示器采用LED数码管显示器,由7个LED数码管组成,从左至右依次显示为时/年(十位、个位)、分/月(十位、个位)、秒/日(十位、个位)、星期,同时秒的显示也由两个串接的发光二极管闪烁表示。数字时钟的键盘由5个按键构成(系统复位键除外)。一个按键作功能键,用于控制时钟的运行显示、调整状态,一个按键用与闹铃的开关,其它三个按键用于调整数字时钟的时/年、分/月、星期/日的值。3、数字时钟硬件系统设计数字时钟硬件系统的设计,关键是其键盘、显示器接口电路的设计,本设计采用直接利用单片机AT89S52的并行I/O口构成数字钟的键盘、显示接口电路,其硬件系统原理图如图3-1所示,主要包括单片机、时钟电路、复位电路、键盘及显示接口电路。单片机时钟电路复位电路驱动电路LED显示器键盘图3-1 硬件系统原理3.1时钟、复位、键盘接口电路如图3-2所示,时钟电路由片外石英晶振、微调电容与片内相应电路组成。石英晶振Y1的振荡频率fosc=6MHZ,微调电容C6、C7一般取20pF。复位电路具有上电复位和按键复位两种复位功能。电解电容C5一般取10uF,电阻R30、R31分别取200、2K。数字时钟的键盘采用独立式键盘结构,由5个按键组成(复位键除外)。S0键为数字时钟功能键,接至P1.0,用于改变数字钟的工作状态;S1键为调时/年键,S2键为调分/月键,S3键为调星期/日键,它们分别接至P1.1、P1.2、P1.3;S4键为闹铃开关键,用函数表达式S=(S+1)%2来判断闹铃的开和关,按下S4键若S值为1则闹铃处于开状态,再按下S4键若S值为0则闹铃处于关状态。R20R24是上拉电阻,这里取10K。图3-2 时钟、复位、键盘接口电路3.2显示器接口电路数字时钟的显示器由7位LED共阳极数码管和两个串接的发光二极管组成。两个串接的发光二极管的闪烁用来表示秒的跳动,7位LED共阳极数码管从左到右依次显示时/年、分/月、秒/日、星期的信息,具体电路如图3-3所示。该显示器以动态显示的方式工作,单片机的P0口作LED显示器的段控口,其口线(P0.7P0.0)经过74LS244接至每位LED数码管的dpa端,提供段控码信息;单片机的P2口作LED显示器的位控口,其口线(P2.7P2.1)经过74LS244分别接至LED数码管LED7LED1的公共端C7C1,提供位控码信息6。74LS244为同相驱动器,在此提高P0、P2口的驱动能力,R10R16为限流电阻,用于保护LED数码管。 图3-3 显示器接口电路4、系统软件部分4.1开发软件及编程语言简介 数字时钟的程序设计语言采用C语言。以往,人们研制单片机应用系统,几乎都是使用汇编语言编写应用程序。尽管汇编语言具有能够直接操作机器硬件、指令的执行速度快等优点,但由于汇编语言不是结构化的程序设计语言,用它编写的程序可读性较差,不便于资料的交流和移植,调试也比较麻烦。而C语言恰好克服了汇编语言的缺点,而且又具有汇编语言的优点。开发软件采用美国Keil Software公司出品的52系列兼容单片机Keil S52语言软件开发系统8。4.2程序流程图为实现系统功能,系统软件共设三个运行状态和一个中断处理程序。数字钟的软件系统主要包括系统监控程序、键功能程序、定时器/计数器0的中断服务程序、显示子程序、闹铃子程序以及键盘扫描子程序等。(1)监控程序 数字时钟的监控程序main()主要完成数字钟的初始化、时钟的显示以及键盘的管理工作,其程序设计流程图如图4-1所示。 开 始数字初始化调用走时转换子程序调用键盘扫描子程序调用闹铃子程序结 束 图4-1 监控程序流程图(2)键盘扫描子程序 键盘扫描子程序KEY用于完成按键的判断、按键的去抖动以及按键键值的处理,其中调用了显示子程序scan(),按键的释放在各键的键功能程序中处理,其流程图如图4-2所示。图4-2 键盘扫描程序流程图 (3)显示子程序 显示子程序scan()用于完成时间信息及年、月、日期信息的显示,采用动态扫描的方法从左至右进行,显示信息的字型代码通过查表获得。为了能够稳定显示时钟的相关信息,在每次送出段控码和位控码信息后,延时2ms的时间,其流程图如图4-3所示。图4-3 显示子程序流程图(4)闹铃子程序 时间值与闹钟设置值比较,若定时到,则进入闹铃状态。(5)定时器/计数器0的中断服务程序 中断服务程序用于完成定时器/计数器0溢出中断次数的计数,时间秒、分、时的累加、比较、清0、进位操作,其流程图如图4-4所示。 图4-4 定时器/计数器0的中断服务程序流程图5、功能说明 通电后即显示预设时间及星期。按功能键key0一次后,指示灯L1亮,其功能为对时间和星期进行调节:再按key1键调节小时,按key2键调节分钟,按key3键调节星期。按功能键key0两次后,指示灯L2亮,其功能为显示日历并可对其进行调节:再按key1键调节年,按key2键调节月,按key3键调节日。按功能键key0三次后,指示灯L3亮,其功能为显示闹铃时间并可对其进行调节:再按key1键调节闹铃小时,按key2键调节闹铃分钟,按key3键调节闹铃秒。若再按key0键则又回到显示正常时间状态。Key4键为闹铃开关键,按下若指示灯L4亮,表示闹铃开;反之,则表示闹铃关。6、测试方法及结论采用先分别调试各单元模块,调通后再进行整机调试的方法,以提高调试效率。时钟测试 在带有单片机的电路板上编程调试时钟,使其在数码管上显示,并可以通过键盘控制设定实时时间、日历和闹铃时间。利用仿真机调试成功后通过编程器将程序写入芯片中调试。闹钟测试 通过键盘控制设定闹钟开关和闹钟响的时间,并通过单片机程序驱动发光二极管闪烁。测试数据表(1):次数12345测试时间1000秒1000秒1000秒1000秒1000秒时钟时间1000秒1000秒1000秒1000秒1000秒测试数据表(2):次数12345测试时间24小时24小时24小时24小时24小时时钟时间23时59分59秒23时59分58秒23时59分58秒23时59分59秒23时59分59秒测量误差分析:由于各元器件精度不同,使数字钟产生误差,但都在误差允许范围内,符合要求。结束语本系统以AT89S52为控制部件,利用S52语言编程,通过键盘控制和LED数码管显示实现了时间、日历和闹钟功能。它性能稳定,价格低廉,有很好的性价比,有利于工厂的大规模生产。致谢辞在毕业设计的这段日子里, 副教授在总体论证、系统设计、硬件开发、软件开发、调试等各方面都提供了很大的帮助,使我能顺利的完成毕业设计,在这里我深深感谢任志山副教授给我的精心指导和大力帮助!参考文献1 卢超.基于单片机的数字电子钟的设计与制作J,大庆师范学院学报,2006.10,第26卷第5期2 王贺艳,王宗和.单片机(AT89C51)与PC机的串行通信J,大众科技,2005 年第 09 期3 唐颖,阮文海.基于单片机的硬件编码键盘控制及显示器接口电路设计J,浙江树人大学学报,2004 年1月,第4卷第 01 期4 黄智伟编著.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,20055 郁凯平.MCS-51单片机串口一口两用在LED显示屏的一例应用J,电子与电脑,2008 年第 1 期6 屈年鹤,林成武,宋同富.MCS-51单片机PO口扩展技术研究J,电子元器件应用,2007 年4月第9卷第 4 期7 罗凌.浅谈提高单片机系统运行的可靠性J,科技资讯,2007 年第 33 期8 杨小劲.单片机中断服务程序编程的一般方法J,福建电脑,2003 年第 8 期9 陈威.51单片机应用系统中的软件抗干扰J,福建电脑,2003 年第 7 期10 桑胜举,王军,沈丁.单片机原理与应用课程教学改革探讨J,科技信息(科学·教研),2007 年第 30 期11 Meixian Yang.Monolithic integrated circuit's development and applicationJ,SCIENCE & TECHNOLOGY INFORMATION ,2007 / /35 12 Dexin Liu.Application of mass storage flash memory in modern MCU system J,JOURNAL OF SHENZHEN INSTITUTE OF INFORMATION TECHNOLOGY ,2007 /5 /2  附录1 主要元器件清单 序号名称、型号及规格数量备注1电阻 RJ14-0.25W-10K±5%6 2电阻 RJ14-0.25W-330±5%43电阻 RJ14-0.25W-240±5%14电阻 RJ14-2W-180±5%15电阻 RJ14-0.25W-560±5%96电阻 RJ14-0.25W-47K±5%17瓷片电容-30pF18电解电容-100uF/25V19电解电容-10uF/25V110单片机AT89S5211174ls244212发光二极管713按键614石英晶体振荡器-6M115共阴级8段数码显示管-5101AG-N3716腐蚀板-14.55*9.31附录2:/*数字时钟: 采用7位LED软件译码动态显示,P0为字段码,P2为位选码,数码管共阴; key0为功能键,key1、key2、key3为调节键,key4为闹铃开关键。*/#include <reg52.h>#include <stdio.h>sbit key0=P10;sbit key1=P11;sbit key2=P12;sbit key3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;sbit P3_0=P30;sbit P3_1=P31;sbit P3_7=P37;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00; unsigned char dispbitcode=0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char dispbuf7; unsigned char dispbuf07=7,0,2,0,5,2,1; /时间缓存unsigned char dispbuf17=7,1,0,4,0,7,0; /年月缓存unsigned char dispbuf27=7,0,0,1,0,2,1; /闹铃时间缓存unsigned char dispbitcnt; unsigned char second=20; unsigned char minite=50; unsigned char hour=12;unsigned char day=1;unsigned char week=7;unsigned char month=4;unsigned char year=7;unsigned char second1;unsigned char minite1=1;unsigned char hour1=12; unsigned int tcnt; unsigned int con; unsigned int s;unsigned char i,j;void day_28();void day_29();void day_30();void day_31();delay1ms(int t);void keyscan(); nl(); main() TMOD=0x02; TH0=0x06; TL0=0x06; TR0=1; ET0=1; EA=1; P1_5=0; P1_6=0; P1_7=0; P3_7=1; while(1) keyscan(); nl(); /*按键处理子程序*/void keyscan(void) /EA=0; if(key0=0) delay1ms(10); while(key0=0); con=(con+1)%4; /TR0=0;ET0=0; /按键调节时停止计时 /TR0=1;ET0=1; if(con=1) /功能选择1,时间调节 P1_5=1; if(key1=0) delay1ms(10); while(key1=0); /K1按一次小时加1 hour=(hour+1)%24; dispbuf05=hour%10; dispbuf06=hour/10; if(key2=0) delay1ms(10); while(key2=0); /K2按一次分钟加1 minite=(minite+1)%60;dispbuf03=minite%10; dispbuf04=minite/10; if(key3=0) delay1ms(10); while(key3=0); /K3按一次星期加1 week=(week)%7+1;dispbuf00=week; P1_5=0; if(con=2) /功能选择2,年月日显示及调节 P1_6=1; if(key1=0) delay1ms(10); while(key1=0); /K1按一次年加1 year=(year+1)%100; dispbuf15=year%10; dispbuf16=year/10; if(key2=0) delay1ms(10); while(key2=0); /K2按一次月加1 month=(month)%12+1; dispbuf13=month%10; dispbuf14=month/10; if(key3=0) delay1ms(10); while(key3=0); /K3按一次日加1 switch(month) /年和月份检测 case 1: day=(day%31)+1; break; case 3: day=(day%31)+1; break; case 5: day=(day%31)+1; break; case 7: day=(day%31)+1; break; case 8: day=(day%31)+1; break; case 10: day=(day%31)+1;break; case 12: day=(day%31)+1; break; case 2: if(year%4=0) /如果是闰年 day=(day%29)+1; break; else day=(day%28)+1; break; default: day=(day%30)+1; break; dispbuf11=day%10; dispbuf12=day/10; P1_6=0; if(con=3) /闹钟时间设置 P1_7=1; if(key1=0) delay1ms(10); while(key1=0); /K6按一次小时加1 hour1=(hour1+1)%24; dispbuf25=hour1%10; dispbuf26=hour1/10; if(key2=0) delay1ms(10); while(key2=0); /K3按一次分钟加1 minite1=(minite1+1)%60; dispbuf23=minite1%10; dispbuf24=minite1/10; if(key3=0) delay1ms(10); while(key3=0); /K3按一次秒加1 second1=(second1+1)%60; dispbuf21=second1%10; dispbuf22=second1/10; P1_7=0; /EA=1; void t0(void) interrupt 1 using 0 dispbufdispbitcnt=dispbuf0dispbitcnt; P0=dispcodedispbufdispbitcnt; P2=dispbitcodedispbitcnt; if(con=1) dispbufdispbitcnt=dispbuf0dispbitcnt; P0=dispcodedispbufdispbitcnt; P2=dispbitcodedispbitcnt; if(con=2) dispbufdispbitcnt=dispbuf1dispbitcnt; P0=dispcodedispbufdispbitcnt; P2=dispbitcodedispbitcnt; if(con=3) dispbufdispbitcnt=dispbuf2dispbitcnt; P0=dispcodedispbufdispbitcnt; P2=dispbitcodedispbitcnt; dispbitcnt+; if(dispbitcnt=7) dispbitcnt=0; tcnt+; if(tcnt=1000) P3_1=0; if(tcnt=2000) tcnt=0; P3_1=1; second+; if(second=60) second=0; minite+; if(minite=60) minite=0; hour+; if(hour=24) hour=0; week=(week)%7+1; switch(month) /年和月份检测 case 1: day_31(); break; case 3: day_31(); break; case 5: day_31(); break; case 7: day_31(); break; case 8: day_31(); break; case 10: day_31(); break; case 12: day_31(); break; case 2: if(year%4=0) /如果是闰年 day_29(); break; else day_28(); break; default: day_30(); break; if(con=0) dispbuf00=week; dispbuf01=second%10; dispbuf02=second/10; dispbuf03=minite%10; dispbuf04=minite/10; dispbuf05=hour%10; dispbuf06=hour/10; if(con=1) P3_1=0; dispbuf00=week; dispbuf01=second%10; dispbuf02=second/10; dispbuf03=minite%10; dispbuf04=minite/10;

    注意事项

    本文(596.基于单片机AT89S52控制的数字时钟系统【单片机毕业设计课程设计】.doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开