




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理与接口技术课程设计题目:多功能电子闹钟 院 系:电气与电子工程系 专 业:电气工程及其自动化 班 级:电气工程1503 姓 名: 学 号: 指导教师: 二零一七年十二月多功能电子闹钟摘 要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。而51单片机是各单片机中最为典型和最有代表性的一种。本设计以AT89C51芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的电子时钟,它由5V直流电源供电。在硬件方面,除了CPU外,使用八个七段LED数码管来进行显示,LED采用的是动态扫描显示,使用74LS245芯片进行驱动。通过LED能
2、够较为准确地显示时、分、秒。四个简单的按键实现对时间的调整。软件方面采用C语言编程。整个电子钟系统能完成时间的显示、调时、校时和三组定时闹钟的功能。选用单片机最小系统应用程序,添加比较程序、时间调整程序及蜂鸣程序,通过时间比较程序触发蜂鸣,实现闹钟功能,完成设计所需求的软件环境。介绍并使用Keil单片机模拟调试软件,测试程序的可行性并用Proteus进行仿真。关键词:单片机 定时器 中断 闹钟 LED 目 录 第1章 方案的选择和论证11.1 单片机型号的选择11.2 按键的选择11.3 显示器的选择11.4 计时部分的选择11.5 发音部分的设计21.6 显示器驱动电路21.7 电源的选择2
3、第2章 数字电子钟的设计原理和方法32.1 设计原理32.2 硬件电路的设计32.2.1 AT89C51单片机简介32.2.2 键盘电路的设计32.2.3 段码驱动电路42.2.4 蜂鸣器驱动电路42.3 软件部分的设计52.3.1 主程序部分的设计52.3.2 中断定时器的设置52.3.3 闹钟子函数62.3.4 计时函数72.3.5 键盘扫描函数82.3.6 时间和闹钟的设置8第3章 实验结果10总 结11致 谢12参考文献13附 录14第1章 方案的选择和论证1.1 单片机型号的选择通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。AT89C51是一种带4K字
4、节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和1000次擦写循环,数据保留时间为10年,是最好的选择。1.2 按键的选择方案一:44矩阵式键盘。如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂。 方案二:独立式按键。如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此
5、,此方案适用于按键较少的情况。如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。 由于并不需要经常修改时间和设置闹铃时间,而且方案二的程序简单,按键少、成本低,因此,选择方案二。1.3 显示器的选择方案一:液晶显示器。如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。但液晶显示器的驱动电路复杂,使用起来有一定的难度。 方案二:用数码管作为显示器。数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺点是功耗较大。由于数码管使用起来较为方便,在夜间看时间也很方便
6、,因此我选择了方案二。1.4 计时部分的选择如果使用时钟芯片,系统就不怕掉电且时间精确。但这种芯片比较贵,况且,设计本系统主要是为了学习单片机程序的编写和调试以及设计硬件电路的一些方法,因此采用软件的方法来计时而没有采用价格较高的时钟芯片。1.5 发音部分的设计通过三极管放大后驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。1.6 显示器驱动电路由于通过数码管公共及的电流较大且避免过多地使用分立元件,采用了一片74LS245来驱动段码,用P3口作位码驱动。1.7 电源的选择如果是用电池供电,就比较方便携带,但是本系统,采用了数码管作为
7、显示器,功耗较大,需要经常更换电池。况且,本系统的体积较大,即使使用电池供电也不能随身携带,因此,用电池供电不大合适,所以用5V外部稳压电源来供电。第2章 数字电子钟的设计原理和方法2.1 设计原理 系统原理图图2-1 系统原理图2.2 硬件电路的设计2.2.1 AT89C51单片机简介AT89C51是一款单片封装的微控制器,适合于许多要求高集成度、低成本的场合。可以满足多方面的性能要求。AT89C51采用了高性能的处理器结构,指令执行时间只需2到4个时钟周期。6倍于标准51单片机器件。AT89C51集成了许多系统级的功能,这样可大大减少元件的数目和电路板面积并降低系统的成本。AT89C51单
8、片机内部主要有以下部件:8031CPU、振荡电路、总线控制部件、中断控制部件、片内Flash存储器、并行I/O接口、定时器和串行I/O接口。图2-2 AT89C51单片机2.2.2 键盘电路的设计键盘采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。 图2-3 独立按键 图2-4 键盘输入电路2.2.3 段码驱动电路由于通过数码管公共及的电流较大且避免过多地使用分立元件,采用了一片74LS245来驱动段码,用P3口作位码驱动。图2-5 段码驱动器74LS2452.2.4 蜂鸣器驱动电路发音部分是通过三极管放大驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样
9、就可以省去硬件振荡电路,降低成本。图2-6 蜂鸣器驱动电路2.3 软件部分的设计2.3.1 主程序部分的设计程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。程序在执行时,主程序要须通过调用子函数就可完成相应的功能 。主程序流程图如下图2-7。图2-7 主程序流程图2.3.2 中断定时器的设置数字电子钟设计中主要使用定时器T0中断ET0,利用ET0中断进行计时时间的自增,从而实现计时功能。AT89C51有两个通用定时/计数器。两者均可配置为定时器或事件计数器。另外增加了定时器T0/T1,溢出时T0/T1脚自动翻转的功能选项。 用作“定时器”功能时,每
10、经过一个机器周期,寄存器值加1。 用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1上每发生一次1到0的跳变时加1。使用该功能时,外部输入每个机器周期被采样一次。 图2-8 定时器工作原理1设计中采用了中断方式1作为定时中断,其定时计数初值的设置可由以下公式计算得到,中断服务流程图如下图2-9。X:计数初值 t:定时时间 :机器周期 1图2-9 中断服务流程图2.3.3 闹钟子函数闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行闹铃。其工作流程图如下图2-10。图2-10 闹铃判断流程图2.3.4 计时函数计时函数部分,主要是通过单片机定时中断来计时,每产生一次中断标志
11、位flag加1,当flag加满20次为1秒,然后把flag清0把秒存储单元加1。然后再依次判断分、时。其流程图如下图2-11。图2-11 计时流程图2.3.5 键盘扫描函数这些函数主要是判断是否有按键按下,并根据相应按键按下的情况调用相关函数执行,其相关流程图如下图2-12。图2-12 键盘扫描流程图2.3.6 时间和闹钟的设置此部分主要是通过判断cnt在不同值时通过调用加1、减1子函数对时间和闹钟的时、分、秒进行设置。在闹钟设置时,判断按键S4按下情况后,进行闹钟的开启与关闭,相关流程图如下图2-13。图2-13 时间/闹钟设置流程图第3章 实验结果此电子闹钟设计是利用Proteus仿真软件
12、进行仿真,基本上实现了课程设计要求实现的功能。硬件部分设置了的三个按键S1、S2、S3、S4。当按键S1第一次按下时,停止计时进入闹钟1的秒设置,当按键S1第二、第三次按下时,分别进入闹钟1的分设置和时设置,当按S1第四 、第五、第六次按下时分别进入闹钟2的秒、分、时设置,当按S1第七 、第八、第九次按下时分别进入闹钟3的秒、分、时设置,当按S1第十 、第十一、第十二次按下时分别进入时间的秒、分、时设置,在S1按下的各阶段,可用按键S2、S3进行时间和闹铃时间的时、分、秒进行加减设置;当按键S1第十三次按下时恢复到时间显示功能。当显示的时间和定时设置的时间一致时,蜂鸣器发出等时间断蜂鸣声,闹铃
13、时间设置为60秒。在各个闹钟设置阶段,如果有S4按下,则相应闹钟功能关闭或开启;如在闹铃时有S4按下则提前停止闹铃。图2-14 运行仿真图总 结通过自己的不懈努力,我终于完成了毕业设计任务书上的任务要求。功能上基本达标:时钟的显示,调时功能、校时功能、闹铃功能、闹钟设置功能。其精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷;校时功能保证了时钟准确和可靠性,闹钟响铃还有扩展成音乐闹钟的余地。硬件设施合乎要求,软件设计可以配合硬件实现要求的功能。但是由于时间比较短,前期设计出现部分不足:如位选闪烁功能不能实现、闹钟的开启与关闭、间断蜂鸣声等。这些只是软件设计时相应功能部分还不完善造成
14、。不过经仔细思考和程序的完善,最终将软件设计改进,并完全可以很好实现所有要求的功能。可见技术在不断进步,机械式时钟已经被淘汰,取而代之的是具有高度准确性和直观性且无机械装置,具有更长的使用寿命等优点的数字时钟。数字时钟更具人性化,更能提高人们的生活质量,更受人们欢迎。 无可否认机械时代已经过去,电子时代已经到来。做为新时代的我们,更应该提高自身能力,适应新时代的发展。知识来自实践,多去生活中探询所需要的。对于上述所提到的研究课题,我们应尽量考虑到人的因素,增强时钟的实用性和操作性,为使用者提供切实的方便,营造一种舒适的生活氛围。所以,在设计的时候,应该从多方面、多角度去考虑问题,而且应该进一步
15、提高时钟的质量。另外,在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程
16、中才能提高,我想这就是我在这次课程设计中的最大收获。致 谢经过一周的实习调查收集数据资料、整理材料、写作论文,我终于可以顺利的完成论文了。 首先要感谢我的指导老师邓老师,他指引我论文的写作的方向和架构,并对本文初稿进行仔细批阅,指正出其中不当之处,使我有了思考的方向,他的循循善诱的教导和不拘一格的思路给予我无尽的启迪,他的严谨细致、一丝不苟的作风,将一直是我工作、学习中的榜样。通过此次的论文,我学到了很多知识,在论文的写作过程中,我不仅收集到了论文所需的资料数据,而且学到了很多书本上没有的知识。并且由原先的被动的接受知识转换为主动的寻求知识,我想这可以说是学习方法上的一个很大的突破。 在论文的
17、写作过程中也学到了做任何事情所要有的态度和心态,首先做学问要一丝不苟,对于发展过程中出现的任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的。总之,此次论文的写作过程,我收获了很多。再次感谢我的大学和所有帮助过我并给我鼓励的老师和同学,谢谢你们! 2017年12月参考文献1 全利、 迟荣强,单片机原理及接口技术M,北京:高等教育出版社,20042 玉华,单片机原理及应用系统设计M,长沙:中南大学出版社,20063 毅刚,MCS-51单片机应用设计M,哈尔宾:哈尔宾工业大学出版社,1997 4 汉才,
18、单片机原理及应用M,北京:清华大学出版社,20045 立明,单片机应用系统设计M,北京:北京航空航天大学出版社,19906 荣良,计算机接口技术M,北京:电子工业出版社,20037 光东,单片机微型计算机原理与接口技术M,武汉:华中理工大学出版社,1998 8张靖武、周灵彬,单片机系统的Proteus设计与仿真M,北京:电子工业出版社,2007附 录相关的程序代码:#include /头文件 #include#define uchar unsigned char /宏定义#define uint unsigned intsbit key1=P10; /位声明 sbit key2=P11;sbi
19、t key3=P12;sbit key4=P13;sbit fmq=P21;uchar code table=0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xbf,0x0ff; /数码管显示的数值void jia(); /函数声明 void jian(); uchar table18,table28,table38,table48; /数组定义,数组内含有8个数值uchar shi=12,fen=0,miao=0; /时间显示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3
20、; /定义全局变量uchar shi4,fen4,miao4;uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3;/ 1秒 等时 位闪 次数 校时 闹1 闹2 闹3uint flag2;/ 蜂鸣 void delay(uchar i) / 延时函数,用于动态扫描数码管 uchar x,y; for(x=i;x0;x-) for(y=120;y0;y-); void init() / 初始化函数 TMOD=0x01; /工作方式1 TH0=0x3c; /定时时间为:50ms(65536-50000)/256 TL0=0x0b0; /(65536
21、-50000)%256 ET0=1; /打开定时器 EA=1; /开总中断 TR0=1; /启动定时器 void display() / 显示子函数,用于显示时间数值 uchar i,j; if(cnt!=10|wss=0) table10=miao%10; /分离秒的个位与十位 table11=miao/10; else table10=table11=11;if(cnt!=11|wss=0) table13=fen%10; /分离分的个位与十位 table14=fen/10; else table13=table14=11;if(cnt!=12|wss=0) table16=shi%10;
22、 /分离时的个位与十位 table17=shi/10; else table16=table17=11; table12=table15=10; j=0x7f; for(i=0;i=7;i+) /从秒到时的扫描 P3=j; P0=tabletable1i; /显示数值 delay(10); j=_cror_(j,1); /循环右移 void display1() / 显示子函数,用于显示定时1时间 uchar i,j; if(alm1=0) if(cnt!=1|wss=0) table20=miao1%10; /以下含义同上 table21=miao1/10; else table20=tab
23、le21=11; if(cnt!=2|wss=0) table23=fen1%10; table24=fen1/10; else table23=table24=11; if(cnt!=3|wss=0) table26=shi1%10; table27=shi1/10; else table26=table27=11; else table20=table21=table23=table24=table26=table27=10; table22= table25=10; j=0x7f; for(i=0;i=7;i+) P3=j; P0=tabletable2i;delay(10); j=_c
24、ror_(j,1); void display2()/ 显示子函数,用于显示定时2时间 uchar i,j; if(alm2=0) if(cnt!=4|wss=0) table30=miao2%10; /以下含义同上 table31=miao2/10; else table30=table31=11; if(cnt!=5|wss=0) table33=fen2%10; table34=fen2/10; else table33=table34=11;if(cnt!=6|wss=0) table36=shi2%10; table37=shi2/10; else table36=table37=1
25、1; else table30=table31=table33=table34=table36=table37=10; table32= table35=10; j=0x7f; for(i=0;i=7;i+) P3=j; P0=tabletable3i;delay(10); j=_cror_(j,1); void display3() / 显示子函数,用于显示定时3时间数值 uchar i,j; if(alm3=0) if(cnt!=7|wss=0) table40=miao3%10; /分离秒的个位与十位 table41=miao3/10; else table40=table41=11;i
26、f(cnt!=8|wss=0) table43=fen3%10; /分离分的个位与十位 table44=fen3/10;else table43=table44=11;if(cnt!=9|wss=0) table46=shi3%10; /分离时的个位与十位 table47=shi3/10;else table46=table47=11; else table40=table41=table43=table44=table46=table47=10; table42= table45=10; j=0x7f; /从秒到时的扫描 for(i=0;i=20) /判断是否到一秒 wss=wss; fla
27、g=0; /到了,则标志位清零 if(cnt1!=0) miao4+; /秒加1 if( miao459) /判断秒是否到60s miao4=0; /到了,则清零 fen4+; /分加1 if(fen459) /以下含义同上 fen4=0; shi4+; if(shi423) shi4=0; else miao+; /秒加1 if( miao59) /判断秒是否到60s miao=0; /到了,则清零 fen+; /分加1 if(fen59) /以下含义同上 fen=0; shi+; if(shi23) shi=0; void key_scan()/ 键盘扫描子函数 if(key1=0) wh
28、ile(!key1) /防止掉显 if(cnt=1|cnt=2|cnt=3) display1(); if(cnt=4|cnt=5|cnt=6) display2(); if(cnt=7|cnt=8|cnt=9) display3(); if(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); cnt+; /记下按键key1按下的次数 if(cnt=10&cnt1=0) miao4=miao; fen4=fen;shi4=shi;cnt1+;if(cnt=13) cnt=0; if(cnt1=1) miao=miao4; fen=fen4; shi=sh
29、i4; cnt1=0; if(key2=0) /判断key2是否按下 while(!key2) /防止掉显 if(cnt=1|cnt=2|cnt=3) display1(); if(cnt=4|cnt=5|cnt=6) display2(); if(cnt=7|cnt=8|cnt=9) display3(); if(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); jia(); if(key3=0) /判断key3是否按下 while(!key3) /防止掉显 if(cnt=1|cnt=2|cnt=3) display1(); if(cnt=4|cnt
30、=5|cnt=6) display2(); if(cnt=7|cnt=8|cnt=9) display3(); if(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); jian(); /调用减1子函数 if(key4=0) /判断key4是否按下 while(!key4) /防止掉 if(cnt=1|cnt=2|cnt=3) alm1=alm1; display1(); if(cnt=4|cnt=5|cnt=6) alm2=alm2; display2(); if(cnt=7|cnt=8|cnt=9) alm3=alm3; display3(); if
31、(cnt=0|cnt=10|cnt=11|cnt=12|cnt=13) display(); void jia() / 加1子函数 if(cnt=1) /判断key1按下的次数是否为1 miao1+; /是,则秒加1 if(miao159) /判断秒是否大于60,是,则秒清零 miao1=0; if(cnt=2) /以下含意同上 fen1+; if(fen159) fen1=0; if(cnt=3) shi1+; if(shi123) shi1=0; if(cnt=4) miao2+; if(miao259) miao2=0; if(cnt=5) fen2+; if(fen259) fen2=
32、0; if(cnt=6) shi2+; if(shi223) shi2=0; if(cnt=7) miao3+; if(miao359) miao3=0; if(cnt=8) fen3+; if(fen359) fen3=0; if(cnt=9) shi3+; if(shi323) shi3=0; if(cnt=10) miao+; if(miao59) miao=0;cnt1+; if(cnt=11) fen+; if(fen59) fen=0;cnt1+; if(cnt=12) shi+; if(shi23) shi=0;cnt1+; void jian() / 减1子函数 if(cnt=1)/判断key1按下的次数是否为1,是则秒减1 miao1-; if(miao1=255)/判断秒是否减到255,是,则秒置59 miao1=59; if(cnt=2)/以下含意同上 fen1-; if(fen1=255) fen1=59; if(cnt=3) shi1-; if(shi1=255) shi1=23; if(cnt=4) miao2-; if(miao2=255) miao2=59; if(cnt=5) fen2-; if(fen2=255) fen2=59; if(cnt=6) shi2-; if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台数据加密算法安全性评估与风险控制报告
- 2025年环保型建筑防水材料在工程项目中的应用策略报告
- 湖北省黄冈市2025年高三年级9月调研考试地理试题(含答案)
- 2025-2026学年第一学期9月(总第三次)模块诊断数学试题
- 中级主管护师基础知识(A型题)模拟试卷3(共250题)
- 幸福就是这么简单课件
- 新质生产力赋能体育非遗传承的实现路径
- 输电电缆故障课件
- 输液药物配合禁忌课件
- 个人住宅抵押权抵押登记撤销与担保责任合同
- 总包合同补充协议范本
- 儿童编发课件
- 商密网管理制度
- 《卒中患者吞咽障碍护理规范》团体标准解读
- 山东教育出版社小学五年级上册美术教案
- 机关健康知识讲座
- 半导体semi F81 中文版
- 2025年有限空间作业安全知识问答试题集
- 国家教育考试保密安全培训
- 电器特种作业培训课件
- 2025新高考数学核心母题400道(教师版)
评论
0/150
提交评论