电气信息学院课程设计任务书课题名称基于单片机的定时器设计姓名Front专业班级学号校内指导老师企业指导老师课程设计时间2017年3月6日-2017年3月17日(3、4周)教研室意见意见:审核人:一、设计任务及要求1、设计任务:以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间修改、音乐演奏等功能。
可作为微电脑倒数计数器,做一小段时间计时,放在家中使用,例如煮泡面、煮开水或小睡片刻等;用于全自动洗衣机洗涤完毕音乐提示定时器。
设计4个按键设置现在想要倒数的时间:K1--可调整倒数时间为1-60分钟;K2—设置倒数计时时间为5分钟,显示为“05”;K3—设置倒数计时时间为20分钟,显示为“20”;K4—设置倒数计时时间为60分钟,显示为“60”;一旦按键后则开始倒计时,当计时为0则演奏一曲音乐;内定倒数计时时间为5分钟,显示为05。
2、设计要求:1)设计方案要合理、正确;2)系统硬件设计;3)系统软件设计及调试;4)系统联调;5)写出设计报告。
二、进度安排第一周:周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。
周二~周三:完成硬件设计和电路连接周四~周日:完成软件设计第二周:周一~周三:程序调试周四~周五:设计报告撰写。
周五进行答辩和设计结果检查。
三、参考文献1)《微型计算机原理及应用》许立梓编机械工业出版社 20022)《微型计算机接口技术及应用》刘乐善编华中理工大学出版社 20003)《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社 20004)《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社20005)《微型计算机原理与接口技术》吴秀清编中国科学技术出版社 20016)《微型计算机接口技术》邓亚平编清华大学出版社 20017)《单片机原理及及应用》王迎旭编机械工业出版社 20018)《单片机应用程序设计技术》周航慈著北京航空航天大学出版社 20029)《单片机实用技术问答》谢宜仁主编人民邮电出版社 2002目录第1章系统概述................................................................ 错误!未定义书签。
1.1定时器简介 ...................................................................... 错误!未定义书签。
1.2设计内容及要求 .............................................................. 错误!未定义书签。
第2章系统方案设计 ........................................................ 错误!未定义书签。
2.1 系统硬件方案设计 ......................................................... 错误!未定义书签。
2.2 系统软件方案设计 (2)第3章系统软件设计 (3)3.1主控芯片AT89C52 (3)3.2振荡电路设计 (3)3.3复位电路设计 (4)3.4 按键电路设计 (4)3.5 显示电路设计 (5)3.6 报警电路设计 (6)第4章系统软件设计....................................................... 错误!未定义书签。
4.1键盘程序设计 (7)4.2定时程序设计 ................................ 错误!未定义书签。
4.3数码管显示程序设计 (9)4.4报警程序设计 (9)第5章系统调试 (10)5.1程序下载 (10)5.2实物调试 .......................................................................... 错误!未定义书签。
设计总结 . (13)附录A实物图 (14)附录B电路图 (15)附录C程序清单 (16)第1章系统概述1.1定时器简介人类最早使用的定时工具是沙漏或水漏,但在钟表诞生发展成熟之后,人们开始尝试使用这种全新的计时工具来改进定时器,达到准确控制时间的目的。
1876年,英国外科医生索加取得一项定时装置的专利,用来控制煤气街灯的开关。
它利用机械钟带动开关来控制煤气阀门。
定时器确实是一项了不起的发明,使相当多需要人控制时间的工作变得简单了许多,家用电器都安装了定时器来控制开关或工作时间。
1.2设计内容及要求设计任务:以单片机为核心设计一个音乐提示定时器,具备倒数计时、时间修改、音乐演奏等功能。
可作为微电脑倒数计数器,做一小段时间计时,放在家中使用,例如煮泡面、煮开水或小睡片刻等;用于全自动洗衣机洗涤完毕音乐提示定时器。
设计4个按键设置现在想要倒数的时间:K1--可调整倒数时间为1-60分钟;K2—设置倒数计时时间为5分钟,显示为“05”;K3—设置倒数计时时间为20分钟,显示为“20”;K4—设置倒数计时时间为60分钟,显示为“60”;一旦按键后则开始倒计时,当计时为0则演奏一曲音乐;内定倒数计时时间为5分钟,显示为05。
设计要求:(1)确定系统设计方案;(2)进行系统的硬件设计;(3)完成必要的参数计算与元器件选择;(4)开发板焊接及测试(5)完成应用程序设计;(6)应用系统的硬件和软件的调试2.1系统硬件方案设计系统的组成原理框图如图2.1所示,定时器在硬件部分应该具有振荡电路、复位电路、按键电路、显示电路、报警电路,从而实现定时器的操作和执行。
此定时器设计具有的功能为:1.1-60分钟可调倒数计时并报警。
2.5分钟倒数计时并报警。
3.20分钟倒数计时并报警。
4.60分钟倒数计时并报警。
图2.1 系统的组成原理框图2.2系统软件方案设计本系统软件方案设计由主程序模块、数码管显示程序模块、按键程序模块、播放音乐程序和延时程序模块等组成。
主程序主要完成定时器初始化,显示数值,检查有无按键按下、报警程序等等。
系统程序结构图如图2.2所示:图2.2 系统程序结构图3.1主控芯片AT89C52AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes 的可反复擦写的Flash 只读程序存储器和256 bytes 的随机存取数据存储器(RAM ),器件采用ATMEL 公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash 存储单元,AT89C52单片机在电子行业中有着广泛的应用。
图3.1 AT89C52芯片管脚图3.2振荡电路设计在MCS-51芯片内部有一个高增益反向放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成一个稳定的自激振荡器,如图3-2所示:C1C2图3.2 振荡电路复位操作有上电复位和按键手动复位两种方式。
上电自动复位是通过外部复位的电容来实现的,其电路如图4-5所示。
只要电源cc v的上升时间不超过1ms,就可以实现自动上复位,即接通电源就完成了系统的复位操作,在此系统中,我们只需要进行上电复位即可。
3.4按键电路设计由于本设计所用到的按键只有4个。
采用的是独立按键键盘,按键的一端接到地,另外一端接到单片机的P1^4、P1^5、P1^6、P1^7口。
定时模式由键盘输入完成。
图3.4 按键电路3.5显示电路设计显示电路由P0口和P1.0~P1.3控制,其为八段共阴极数码管,由P0口控制,当输入信号为高电平时其对应的数码管会发亮。
图3.5 显示电路报警电路由蜂鸣器组成,到时间后蜂鸣器放出音乐。
图3.6 蜂鸣器第4章系统软件设计4.1键盘程序设计程序包括判别有无按键按下、对LedNumVal重新赋值,延时消除抖动等。
其中K1为1-60分可调定时的赋值,K2,K3,K4分别为5,20,60分定时的赋值,下面列举了K2。
if (K1==0){Delay10ms(1);if (K1==0){TR0 = 0;LedNumVal=(LedNumVal/60+1)*60+30;if(LedNumVal>3601)LedNumVal=30;while (!K1);TR0 = 1;}}if (K2==0){Delay10ms(1);if (K2==0){LedNumVal=300;while (!K2);}}4.2定时程序设计定时程序利用T0定时间采用方式1定时,定时5ms,采用软件计算初值为 TH0 = 0xee;TL0 = 0x00;图4.2 初值计算定时器初始化程序如下void system_Ini(){TMOD = 0x01;TH0 = 0xee;TL0 = 0x00;IE = 0x8A;TR0 = 1;}中断响应程序如下,循环200次后为定时一秒,LedNumVal减一,到时间后一直执行beep();报警程序。
void T0zd(void) interrupt 1{TH0 = 0xee;TL0 = 0x00;g++;if(g==200){g=0;LedNumVal--;if(LedNumVal==-1)while(1)beep();}}4.3数码管显示程序设计此程序与外设电路P0口连接,P0控制数码管段选,P1^0,P1^1,P1^2,P1^3控制数码管位选,采用动态显示,先选定数码管,将数据对应显示,延时后进行下一位数码管选定,重复程序直至四位数码管显示完毕。
void DigDisplay1(){unsigned int j;a=0,b=1,c=1,d=1;GPIO_DIG = DisplayData[0];j = 100;while(j--);GPIO_DIG = 0xff;a=1,b=0,c=1,d=1;GPIO_DIG = DisplayData[1];j = 100;while(j--);GPIO_DIG = 0xff;a=1,b=1,c=0,d=1;GPIO_DIG = DisplayData[2];j = 100;while(j--);GPIO_DIG = 0xff;a=1,b=1,c=1,d=0;GPIO_DIG = DisplayData[3];j = 100;while(j--);GPIO_DIG = 0xff;}4.4报警程序设计当到时间后,一直执行蜂鸣器程序,并将数码管显示 - - - - 图形,代表已到时间。