倒计时器论文_第1页
倒计时器论文_第2页
倒计时器论文_第3页
倒计时器论文_第4页
倒计时器论文_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、电子线路课程设计(2) 论文(设计)题目 基于AT89S52的365天倒计时器系 别: 物理与电子工程系 专 业: 电子信息工程 年 级: 2007级 学生姓名: 苏凯 指导教师: 彭建盛 时 间: 2010年6月20日 目 录摘 要3关键词3一、设计任务与要求 3二、方案设计与论证3方案一3方案二3方案比较3三、硬件单元电路设计与参数计算3 1.复位电路42.晶振电路53.按键电路6 4.蜂鸣器电路65.数码管显示电路76.单片机定时器的使用8四、软件设 计与流程图8五、总原电路及元器件清单111总原理图112PCB制板图 123整体电路仿真图以及仿真结果分析134元件清单14六、安装与调试

2、 141. 电路安装142. 电路调试143. 软件调试15七、性能测试与分析 15八、结论与心得 15九、参考文献 16十、致谢16十一、程序清单 16基于AT89S52的365天倒计时器摘要:本系统讨论了简单的倒计时器的设计与制作,最大倒计时时间是365天,最小单位精确到秒。此系统是基于AT89S52单片机控制,外加数码管显示倒计时时间,并且利用按键来进行倒计时时间的设定。当倒计时时间倒时,蜂鸣器就会发出报警声。对于系统中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。关键词:单片机(AT89S52);LED数码

3、管显示器;keil C;proteus仿真软件;晶体振荡器一.设计任务与要求分别对应天,时,分和秒,精确到1秒的整数倍。倒计时时间到,则由蜂鸣器发出报警声。二、方案设计与论证近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。现在,在许多领域中,定时器得到了广泛的应用,比如在体育比赛中的计时器;安全措施中的定时报警器;游戏中的倒计时;维持秩序的交通信号灯;红路灯,交通控制器,闹钟等等。可见倒计时器在社会中的重要性。当然,设计倒计时器的方法很多,以下是两个设计方案。方案一:基于AT89S52单片机的LCD液晶显示模块1602显示的倒计时器。主要是以

4、单片机来控制,用按键来设定倒计时初始时刻的值,LCD1602液晶作为显示模块来显示剩余的时间。方案二:基于AT89S52单片机的数码管显示模块显示的倒计时器。主要是以单片机来控制,用按键来设定倒计时初始时刻的值,数码管作为显示模块来显示剩余的时间。此电路对于倒计时器中的LED数码管示器来说,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。 方案比较:通过以上两个方案,我们发现,方案二总体比方案一好。首先方案一虽然硬件电路简单,但造价较高,且在编写程序实现所要求的功能时较难,而方案二所用的显示模块是比较熟悉的数码管,编写程序是相对容易,且电路造价不高,因此,综合考虑之

5、后决定采用方案二。三、硬件单元电路设计与参数计算LED数码管倒计时器以AT89S52单片机为核心,起着控制作用。系统包括九位数码管显示电路,按键电路,复位电路,时钟电路以及蜂鸣器电路。倒计时的总体框图如下图1所示: AT89S52按键电路模块晶振电路模块复位电路数码管显示电路模块报警电路模块图1 倒计时的总体框图 1.复位电路复位是单片机的初始化操作,只需给AT89S52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位,复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。除了进入系统的正常初始化之外由于程序运行出错或操作错误而使系统处于死锁状态

6、,为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。在系统中,有时会出现显示不正常,也为了调试方便,我们需要设计一个复位电路,AT89S52单片机复位电路共有上电复位、按键电平复位和按键脉冲复位。本系统是的复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的RC电路构成,也可使用其它的相对复杂,但功能更完善的电路。本系统采用的电路如图2所示。工作原理是:上电瞬间,RC电路充电,RESET引脚端出现正脉冲,只要RESET保持10ms以上高电平,就能使单片机有效的复位。当时钟频率选用12MHz时,C取10uF,R取10K。上电自动复位电路由上电瞬间C

7、与R构成充电电路,RESET端的电位与电源Vcc相同,随着充电电流的减少,RESET的电位逐渐下降。图中RC时间常数越大,上电时RESET端保持高电平的时间越长,图中这组参数足以保证复位操作。若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运行。图中的按键S5的功能是按键复位,按下S5键时RST为高电平,只要保持10ms以上的高电平,就可以时单片机复位。按键复位用在系统运行时的复位,使系统重新运行。复位电路如下图所示。图2 复位电路原理图2时钟电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时

8、钟电路的质量也直接影响单片机系统稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。本系统使用的是内部时钟方式。时钟电路如下图3所示。图3时钟电路原理图一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容C1、C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。本系统的C1、C2的值为30p

9、f。单片机在工作时,有内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。其大小是时钟信号频率的倒数,f表示。图2中的时钟频率为12MHz,即f=12MHz,则时钟周期为1/12us。 3.按键电路本系统的按键电路的作用是能够调整倒计时的初始值,倒计时是按天、时、分、秒顺寻排列显示的,用四个按键分别设定天、时、分、秒,所达到的效果是按一下对应的键时,所对应的值加一。在程序中用K4对应天的设定,K3对应时的设定,K2对应分的设定,K1对应秒的设定。另外K1按键不但作为可以设定秒的初值,还可以起到暂停倒计时运行的作用;即当系统在运行时,按K1键,系统暂停,如果继续按K1

10、键,则秒的值增加,完成的是设定秒的功能。同样,K4也有两个功能。一个是设定天的初值,一个是起到开启系统的作用,即当系统处于暂停时,按K4键,则系统开始运行,如果继续按K4键,则完成的是设定天的初值的功能。按键电路如下图4所示。图4按键电路原理图4. 蜂鸣器电路。蜂鸣器电路是由一个有源蜂鸣器、一个电阻和一个开关三极管组成。此电路的作用是倒计时时间到零时,蜂鸣器发出报警声。在本系统中,是利用单片机的P21口来控制,P21为低电平时,三极管导通,蜂鸣器报警。电路如下图5所示。图5蜂鸣器电路原理图5.数码管显示电路显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息

11、,全靠软件来解决。在这里我们使用的是8段数码管显示(包含小数点),通常在显示上我们采用的方法一般包括两种:一种是静态显示,另一种是动态显示。其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多,所耗得电能较大;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。在本设计中,为了减少端口资源,降低电能消耗,采用的是动态显示方法。6所示。 图6数码管显示电路原理图6.单片机定时器的使用本系统所用到的AT89S52有3个16位的定时器,而本系统只用到了定时器0和定时器1,所使用的工作方式都是定时器工作方式1,方式1时16位计数结构的工作方式,计数器由T

12、H0或TH1的全部8位和TL0或TL1的全部8位构成。使用工作方式1功能时,定时时间计算公式是:(65536-计数初值)*机器周期机器周期=晶振周期*12本系统所用到的定时器0的定时时间是1ms;定时器1的定时时间是10ms;而电路所用的晶振是12MHZ,算得一个机器周期为1us,因此由以上的公式可知定时器0的初值THO是0xFC,TLO是0x18;定时器1的初值TH1是0xD8,TL1是0xF0四、软件设计与流程图本系统中,是利用软件和硬件相互结合,以实现电路功能。软件在系统中起着举足轻重的作用,利用程序对硬件达到控制作用。因此下面说明软件的实现。1.倒计时器主程序流程图。程序的的开始时初始

13、化数码管的段选和位选,数码管不显示。程序中用到了两个定时器,接下来先设定定时器0和定时器1的工作方式,并且给两个定时器装初值,定时器0的定时时间是1ms,用作扫描数码管显示,定时器1的定时时间是10ms,用作定时器时间的递减。然后给定时器设定初值,开启定时器0。最后进入死循环函数,在循环函数中,对按键进行扫描,如果有键按下,执行按键函数,并检查是否需要报警。如果没有按键按下,则直接检查是否需要报警。流程图如下图7所示: 开始初始化P0口和P3口,全置为高电平设定定时器0,1工作方式给定时器0,1设初值开启定时器0设定倒计时的初值有按键按下?否是 是是执行按键功能函数prockey();执行报警

14、程序执行报警程序图7 倒计时器主程序流程图2.定时器0的中断程序流程图,定时器0的定时时间是1ms,用作扫描数码管显示,在定时器0开启时,定时器0开始定时,此时主程序正常运行,当定时器0的定时时间到时,主程序不在执行,开始进入中断程序,在中断程序中,对9位数码管进行动态扫描。中断程序执行完后返回主程序。如图8所示。执行主程序执行一条指令 定时器0有中断请求?否是 是是取下一条指令保护现场和断点定时器0中断服务程序(完成数码管各位的扫描)恢复现场返回图8定时器0的中断程序流程图3.定时器1的中断程序流程图,定时器1的定时时间是10ms,用作是倒计时时间以秒来自减,在定时器1开启时,定时器1开始定

15、时,此时主程序正常运行,当定时器0的定时时间到时,主程序不在执行,开始进入中断程序,在中断程序中,设定倒计时的时间变化。中断程序执行完后返回主程序。如图9所示。执行一条指令 定时器1有中断请求?否是 是是取下一条指令保护现场和断点定时器1中断服务程序(完成时间以秒为最小单位递减)恢复现场返回执行主程序图9 定时器1的中断程序流程图五总电路及元器件清单 1倒计时器总原理图 倒计时原理图由一块AT89S52单片机器控制作用,单片机的P10到P13分别接的按键电路,即4个微动开关。P0口与显示电路的数码管的段选相连,起到控制数码管的段选的的作用。P3口和P20口分别对应数码管的9个位选,起到对9个数

16、码管的扫描作用,其中的9个三极管起着开关作用,对应数码管的选通。P21口接蜂鸣器报警电路。如图10所示。图10 倒计时器总原理图2PCB制板图 本系统把总电路图分成两个模块来画PCB,一个是最小系统模块,另一个是显示模块。(1) 倒计时器最小系统模块,如下图11。图11 倒计时器最小系统模块(2) 倒计时器显示模块,如下图12。图12 倒计时器显示模块3整体电路仿真图以及仿真结果分析系统仿真用的是Proteus软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大的帮助。系统仿真时首先在使用Keil C 译码器,把所写的程序进行编译,同时在仿真器里设置生成HEX文件,编译无错误进行Pr

17、oteus仿真。等所有的原件都连接完成后可以把Keil C编译生成的无错误文件加载到AT89C51中,方法是,右键点中器件然后再用左键点击,出来一个对话框在program file后选择要添加的文件,文件要求必须是HEX文件。然后可以点击运行观察现象,看与自己设置的是否符合,如果不相符再查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程序的每一个部分。系统的仿真图如下图13所示。图13 倒计时器仿真图启动Proteus软件的play按钮,出现如上图12所示,以上四个开关分别设定倒计时的天,时,分,秒的值。并且设定天的按键还可以开启倒计时,设定秒的按键也可以暂停倒计时。当天,时,分,秒

18、的值全为0时,发出报警声。从仿真图可知,本系统的程序已达到要求。在此电路系统的仿真中,应该注意的问题有数码管的Minimum Trigger Time项设定的值要合适,此电路中设定为1us。还有就是在程序中数码管的扫描时间要合适。以保证数码管显示稳定,不闪烁。4元件清单表1元器件清单名称参数和型号数量单片机AT89S521块PNP三极管S855010个 电阻1K9个4709个10K(8位排阻)1个10K1个数码管共阳1位码管1共阳4位数码管2个瓷片电容30PF2个晶振12M1个杜邦线单19根电解电容10uf1个覆铜板7*81块15*91块排针大1排微动开关5个蜂鸣器1个单片机插座40脚1个六、

19、安装与调试1.电路安装本系统考虑到数码管的段选和位选比较多,连线较复杂,如果用万用表焊接,工作量大,因此采用覆铜板打印电路来焊接。方便简洁。在安置元器件前先认真观察印制电路板,是否有短路现象。再用万用表测试电路的连线情况,以保证印制板的电气连接完全正确。但在安装元器件时,要认真对照PCB,元器件要一一图中的位置放置。引脚不能放反。否则硬件电路将不会出结果。2. 电路调试在硬件调试时,先有万用表检查印制电路的焊接情况,检查是否有虚焊,是否有短路。在检查无误之后通电检查LED数码管的显示。开始时,数码管的亮度不够理想。经检查知,是段选电阻(接P0口的限流电阻)太大。最后,换成470欧的电阻后,数码

20、管显示正常。总体电路正常,达到题目的要求。实际电路如图14。图14 365天倒计时的实物图3. 软件调试用到了Keil C软件,集成调试环境,集成了编辑器、译码器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言多模块源程序混合调试,在直接修改、编译、调试源程序,错误指令定位。功能很强大,用于对程序的调试和编辑。本系统的程序的编写就是在Keil C软件中完成的,在程序中用到了两个定时器,为了使倒计时的时间准确,必须计算对定时器的初值,当程序完成之后,生成HEX文件。再利用Proteus软件进行仿真。经过仿真,程序符合题

21、目的要求。七、性能测试与分析按照设计程序的分析,LED数码管的动态扫描的频率是1000HZ,在实际使用时完全没有闪烁。在程序中,定时器10ms中断一次,变量 sec100自增,中断100次时,秒的显示自减,用定时器来定时,准确。电路中的四个按键可以分别用来设定倒计时的天,时,分,秒。另外,设定天的按键还可以用来开启倒计时,设定秒的按键还可以暂停倒计时。当数码管的显示全0时,蜂鸣器报警。系统由5V电源来驱动,经过测是试与分析,此系统稳定可用。八、结论与心得在设计制作365天倒计时器的过程中,我深切体会到,实践是理论运用的最好检验。本次设计是对我三年所学知识的一次综合性检测和考验,无论是动手能力还

22、是理论知识运用能力都得到了提高,同时加深了我对网络资源认识,大大提高了查阅资料的能力和效率,使我有充足的时间投入到电路制作当中。本系统的制作主要应用到了模拟电子技术、数字电子技术、单片机控制技术、电子工艺等多方面的知识。在硬件调试过程中,我也学会不少的东西,掌握一些调试方法。在设计仿真图和编些程序中,对Proteus和Keil等软件掌握的更加牢固,而且所设计的基于单片机的365天倒计时器,精确度高,达到了应用要求。九、参考文献.康华光.电子技术基础数字部分(第五版).北京华中科技电子技术组 2007 2. 华成英 童诗白模拟电子技术基础(第四版)北京清华大学电子学教研组2006 3. 李光弟

23、朱月秀 冷祖祁单片机基础(第3版)北京北京航空航天大学出版社2007 4.李凤霞 刘桂山 陈朔鹰 薛庆.C语言程序设计(第二版).北京. 北京理工大学出版社,2008. 5. 楼然苗 李光飞.单片机课程设计指导. 北京.北京航空航天大学出版,2007 十、致谢本论文是彭建盛老师的指导下完成的,在此向他致以最衷心的感谢。在本科学习的三年中,我与同学建立深厚的友谊,他们在我遇到困难时无私伸出援助之手,对他们的帮助我特别感谢。从开始进入课题到论文的顺利完成,有可敬的师长、同学、朋友给了我无言的帮助。在这里请接受我诚挚的谢意。最后,感谢学院的领导给我们提供很好的条件,使得我的硬件设计能够顺利完成。谢谢

24、! 十一、程序清单#include #include unsigned char data dis_digit;unsigned char key_s, key_v;unsigned char code dis_code11=0xc0,0xf9,0xa4,0xb0, / 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff;/ 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf9;unsigned char data dis_index;unsigned int tian,hour,min,sec; /定义天

25、,时,分,秒unsigned char sec100; sbit W9=P20; /控制单个数码管的第九位sbit beep=P21; /报警输出端口sbit K1 = P10; /设定秒的值sbit K2 = P11; /设定分的值sbit K3 = P12; /设定时的值sbit K4 = P13; /设定天的值 bit scan_key(); /返回只是位,键盘扫描程序void proc_key(); /按键设置函数void inc_sec(); /秒自增函数void inc_min(); /分自增函数void inc_hour(); /时自增函数void display(); /显示函

26、数void delayms(unsigned char ms); /延时函数声明void main(void) /主函数 P0 = 0xff; P3 = 0xff; /先让数码管不亮 TMOD = 0x11; / 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xD8; /先给定时器1置初值 TL1 = 0xF0; TH0 = 0xFC; /先给定时器0置初值 TL0 = 0x18; tian=365; hour = 0; min =0; sec = 0; /设定初值 sec100 = 0; /定时中断一次,此变量自动加一 dis_buf0 = dis_codetian / 100;

27、 /天的百位 dis_buf1 = dis_code(tian-(tian / 100)*100)/10; / 天的十位 dis_buf2 = dis_code(tian-(tian/100)*100)-(tian-(tian/100)*100)/10)*10&0x7f; / 天的个位,并加上小数点 dis_buf3 = dis_codehour / 10; / 时十位 dis_buf4 = dis_codehour % 10&0x7f; / 时个位,并加上小数点 dis_buf5 = dis_codemin / 10; / 分十位 dis_buf6 = (dis_codemin % 10&0

28、x7f); / 分个位,并加上小数点 dis_buf7 = dis_codesec / 10; / 秒十位 dis_buf8 = dis_codesec % 10; / 秒个位 dis_digit = 0xfe; /从P3口的最低位开始动态扫描 dis_index = 0; TCON = 0x01; /设置定时器是边沿触发还是电平触发 IE = 0x8a; / 使能使用了定时器0和定时器1 中断(允许中断) TR0 = 1; /开启定时器0 TR1 = 0; /先关闭定时器1 key_v = 0x0f; /为后面的按键定义一个变量 while(1) if(scan_key() delayms(

29、10); /延时消抖 if(scan_key() key_v = key_s; proc_key(); if(tian=0) if(hour=0) if(min=0) if(sec=0) beep=0; TR1=0; if(tianhourminsec) beep=1; bit scan_key() key_s = 0x00; key_s |= K4; /只有K4按下时key_s是0x00,否则是0x01 key_s = 1; /左移一位 key_s |= K3; /只有K3按下时key_s是0x00,否则是0x02 key_s = 1; /左移一位 key_s |= K2; /只有K2按下时

30、key_s是0x00,否则是0x04 key_s 365) tian =0; dis_buf0 = dis_codetian / 100; /天的百位 dis_buf1 = dis_code(tian-(tian / 100)*100)/10; / 天的十位 dis_buf2 = dis_code(tian-(tian/100)*100)-(tian-(tian/100)*100)/10)*10&0x7f; / 天的个位加上小数点 else if(key_v & 0x02) = 0) / K3按下的话条件满足 TR1=0; hour+; if(hour 12) hour = 0; dis_bu

31、f3 = dis_codehour / 10; /时十位 dis_buf4 = (dis_codehour % 10&0x7f); / 时个位加上小数点 else if(key_v & 0x04) = 0) / K2按下的话条件满足 TR1=0; min+; if(min 59) min = 0; dis_buf5 = dis_codemin / 10; /分十位 dis_buf6 = (dis_codemin % 10&0x7f); / 分个位加上小数点 else if(key_v & 0x08) = 0) / K3按下的话条件满足 sec+;TR1=0; if(sec59) sec = 0

32、; dis_buf7 = dis_codesec / 10; / 秒十位 dis_buf8 = dis_codesec % 10; / 秒个位 EA = 1; /开启总中断void timer0() interrupt 1/ 定时器0中断服务程序, 用于数码管的动态扫描/ dis_index - 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量/ dis_digit - 位选通值, 传送到P3口用于选通当前数码管的数值, 如等于0xfe时,选通P3.0口数码管 / dis_buf - 显于缓冲区基地址 TH0 = 0xFC; TL0 = 0x18; /再次给初值 W9=1; P3 = 0x

33、ff; / 先关闭所有数码管 if( dis_index=8) P0 = dis_bufdis_index; W9=0; /第九位选通 dis_index+; else P0 = dis_bufdis_index; P3 = dis_digit; /刚开始时dis_digit为0Xfe,所以是先从P3口的最低位开始扫描 dis_digit = _crol_(dis_digit,1); dis_index+; if( dis_index=9) dis_index=0; dis_digit = 0xfe; / 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 void timer1() interrupt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论