基于单片机的定时器设计.docx
- 文档编号:15705017
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:24
- 大小:4.41MB
基于单片机的定时器设计.docx
《基于单片机的定时器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的定时器设计.docx(24页珍藏版)》请在冰点文库上搜索。
基于单片机的定时器设计
电气信息学院
课程设计任务书
课题名称
基于单片机的定时器设计
姓名
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)《微型计算机原理及应用》许立梓编机械工业出版社2002
2)《微型计算机接口技术及应用》刘乐善编华中理工大学出版社2000
3)《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社2000
4)《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社2000
5)《微型计算机原理与接口技术》吴秀清编中国科学技术出版社2001
6)《微型计算机接口技术》邓亚平编清华大学出版社2001
7)《单片机原理及及应用》王迎旭编机械工业出版社2001
8)《单片机应用程序设计技术》周航慈著北京航空航天大学出版社2002
9)《单片机实用技术问答》谢宜仁主编人民邮电出版社2002
2.2系统软件方案设计2
第3章系统软件设计3
3.1主控芯片AT89C523
3.2振荡电路设计3
3.3复位电路设计4
3.4按键电路设计4
3.5显示电路设计5
3.6报警电路设计6
4.1键盘程序设计7
4.3数码管显示程序设计9
4.4报警程序设计9
第5章系统调试10
5.1程序下载10
设计总结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章系统方案设计
2.1系统硬件方案设计
系统的组成原理框图如图2.1所示,定时器在硬件部分应该具有振荡电路、复位电路、按键电路、显示电路、报警电路,从而实现定时器的操作和执行。
此定时器设计具有的功能为:
1.1-60分钟可调倒数计时并报警。
2.5分钟倒数计时并报警。
3.20分钟倒数计时并报警。
4.60分钟倒数计时并报警。
图2.1系统的组成原理框图
2.2系统软件方案设计
本系统软件方案设计由主程序模块、数码管显示程序模块、按键程序模块、播放音乐程序和延时程序模块等组成。
主程序主要完成定时器初始化,显示数值,检查有无按键按下、报警程序等等。
系统程序结构图如图2.2所示:
图2.2系统程序结构图
第3章系统硬件设计
3.1主控芯片AT89C52
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。
图3.1AT89C52芯片管脚图
3.2振荡电路设计
在MCS-51芯片内部有一个高增益反向放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2,在芯片外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成一个稳定的自激振荡器,如图3-2所示:
图3.2振荡电路
3.3复位电路设计
复位操作有上电复位和按键手动复位两种方式。
上电自动复位是通过外部复位的电容来实现的,其电路如图4-5所示。
只要电源
的上升时间不超过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报警电路设计
报警电路由蜂鸣器组成,到时间后蜂鸣器放出音乐。
图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初值计算
定时器初始化程序如下
voidsystem_Ini()
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
IE=0x8A;
TR0=1;
}
中断响应程序如下,循环200次后为定时一秒,LedNumVal减一,到时间后一直执行beep();报警程序。
voidT0zd(void)interrupt1
{
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控制数码管位选,采用动态显示,先选定数码管,将数据对应显示,延时后进行下一位数码管选定,重复程序直至四位数码管显示完毕。
voidDigDisplay1()
{
unsignedintj;
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报警程序设计
当到时间后,一直执行蜂鸣器程序,并将数码管显示----图形,代表已到时间。
voidbeep()
{
a=b=c=d=0;
P0=~0x40;
T=1;
Delay10ms(50);
T=0;
Delay10ms(50);
}
第5章系统调试
5.1程序下载
将程序下载线与PC机接好,运行stc-isp-15xx-v6.85H.exe
(1)运行stc-isp-15xx-v6.85H出现如图5.8界面:
图5.1.1程序下载界面
(2)按照图中左边提示的步骤,分别选择单片机型号、打开待下载的程序文件(.HEX文件)、选择通信口和通信波特率;
(3)下载程序,先关电源点击DownLoad/下载框,然后再接通电源(冷启动),在左下框中若出现如下信息则程序下载成功。
图5.1.2程序下载
5.2实物调试
单片机上电后数码管显示初始状态05.00(默认计时5分钟)。
如图5.2.1
图5.2.1初始状态
按下K3键后计时20分钟如图5.2.2
图5.2.220分钟计时
按下K4键后计时60分钟如图5.2.3
图5.2.360分钟计时
按下K1键后计时1-60分钟可调,如图5.2.4
图5.2.41-60分钟可调计时
计时结束时如下,此时蜂鸣器持续响,如图5.2.5
图5.2.51-60分钟可调计时
设计总结
这次的课程设计,自我感觉收获良多,学会了用keil软件进行编程、AD软件进行原理图的绘制,检查程序是否能运行其功能和定时器的初值计算,由于之前学过一点单片机,所以这次的单片机实习还是蛮得心应手的,经过几天的坚持设计后终于完成,其中也遇到了一些问题,在调试过程中数码管显示得不是很好,延时时间对显示有很大的关系,太大了显示就断断续续,太小了就分辨不清显示的数值,所以应延时一个恰当的时间,报告做到这里,我的课设就告一段落了。
过程中也让我深深地体会到,很多问题也许一次两次都解决不了,但是只要还有时间,我们就可以再尝试,因为一次又一次的尝试也许就是一种进步。
附录A实物图
附录B电路图
附录C程序清单
#include
#include
sbita=P1^0;
sbitb=P1^1;
sbitc=P1^2;
sbitd=P1^3;
sbitT=P2^0;
sbitK1=P1^4;
sbitK2=P1^5;
sbitK3=P1^6;
sbitK4=P1^7;
#defineGPIO_DIGP0
unsignedcharcodeDIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsignedintLedNumVal,g,m,DisplayData[4];
voidDelay10ms(unsignedintc);
voidDigDisplay1();
voidbeep();
voidsystem_Ini()
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
IE=0x8A;
TR0=1;
}
voidmain()
{
unsignedchari;
system_Ini();
LedNumVal=300;
g=0;
while
(1)
{
i=0;
DisplayData[0]=~DIG_CODE[LedNumVal/60/10];
DisplayData[1]=~(DIG_CODE[LedNumVal/60%10]|0x80);
DisplayData[2]=~DIG_CODE[LedNumVal%60/10];
DisplayData[3]=~DIG_CODE[LedNumVal%10];
DigDisplay1();
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);
}
}
if(K3==0)
{
Delay10ms
(1);
if(K3==0)
{
LedNumVal=1200;
while(!
K3);
}
}
if(K4==0)
{
Delay10ms
(1);
if(K4==0)
{
LedNumVal=3600;
while(!
K4);
}
}
}
}
voidT0zd(void)interrupt1
{
TH0=0xee;
TL0=0x00;
g++;
if(g==200)
{
g=0;
LedNumVal--;
if(LedNumVal==-1)
while
(1)
beep();
}
}
voidbeep()
{
a=b=c=d=0;
P0=~0x40;
T=1;
Delay10ms(50);
T=0;
Delay10ms(50);
}
voidDelay10ms(unsignedintc)
{
unsignedchara,b;
for(;c>0;c--)
{
for(b=38;b>0;b--)
{
for(a=130;a>0;a--);
}
}
}
voidDigDisplay1()
{
unsignedintj;
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;
}
电气信息学院课程设计评分标准
环节
项目
评价
优
良
中
及格
不及格
实践环节(70%)
1、设计方案合理性与创造性
2、开发板焊接及其调试完成情况
3、硬件设计或软件编程完成情况
4、硬件测试或软件调试结果*
5、解决问题能力及答辩情况
6、纪律和出勤情况
设计报告(30%)
1、设计报告内容完整、规范,
2、图纸正确、清晰,
3、设计步骤规范、正确,
4、设计结果可行
综合评价
课程设计成绩评定为:
□优□良□中□及格□不及格
指导老师签名:
________________
日期:
________________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 定时器 设计