基于C51的倒计时器设计.docx
- 文档编号:28805605
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:19
- 大小:615.59KB
基于C51的倒计时器设计.docx
《基于C51的倒计时器设计.docx》由会员分享,可在线阅读,更多相关《基于C51的倒计时器设计.docx(19页珍藏版)》请在冰豆网上搜索。
基于C51的倒计时器设计
广州理工学院
《单片机原理与应用》课程设计报告
设计课题:
基于C51的倒计时器设计
学院:
电气与电子工程学院
班级:
姓名:
学号:
指导教师:
日期:
2020.11.6---2020.11.19
评分:
摘要
本系统采用STC89C52单片机,设计一款可调倒计时器,该倒计时器数字可以通过按键加KEY1/减KEY2自由设定数字,4位数码管显示计时数字,可选择倒计时范围在(1-9999),设定时间后,按下按键KEY3开始倒计时,当倒计时为0时,蜂鸣器接收到信号,发出警报声。
关键词:
STC89C52;数码管显示;可控倒计时器
ABSTRACT
STC89C52microcontrollerisappliedinthissystem,designanadjustabletimer,thecountdowntimernumbercanfreelythroughthebuttonstoaddKEY1/minusKEY2Numbers,thefourdigitaltubedisplaytimingNumbers,canchoosethecountdownrangein(1-9999),settingtime,pressthebuttonKEY3startthecountdown,whenthecountdowntozero,buzzertoreceivesignals,sendsoutthealarm.
KEYWORDS
STC89C52;Digitaltubedisplay;Controlledcountdowntimer
概述
本项目是由单片机通过执行设定设定的程序,设计的一款可调倒计时器,该倒计时器数字可以通过按键加KEY1/减KEY2自由设定数值,由4位数码管显示计时数值,选择在(1-9999)的倒计时范围内,设定时间,按下按键KEY3开始倒计时,当倒计时为0时,蜂鸣器接收到信号,发出警报声。
该设计可应用于倒计时警报,设置闹钟,交通灯,定时器等。
基于C51的倒计时器设计
一、方案设计
基于STC89S52单片机的数码管显示模块显示的倒计时器。
主要是以单片机来控制,用按键来设定倒计时初始时刻的值,按键来进行倒计时初值的选择。
采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
1.1设计任务及其要求
设计任务及其要求:
使用STC89C52单片机进行课程设计,按KEY1/KEY2调整数码管时间,按KEY3开始倒计时,时间结束蜂鸣器响。
1.2器材选定
STC89C51是一种低功耗,高性能CMOS8位为微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用控制系统提供高灵活,超有效的解决方案。
具有以下标准功能:
8k字节F1ash,512字节RAM,32位I/0口线,看门狗定时器,内置4EEPROM,MAX810复位电路,2个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至OHz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Hz6T/12T可选。
二、硬件设计
硬件组成
2.1复位电路
在单片机上电复位的操作过程中,控制CPU的复位状态:
这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止防止CPU发出错误指令,执行错误操作,也可以提高电磁兼容性能。
只需给AT89C52的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位,复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。
除了进入系统的正常初始化之外由于程序运行出错或操作错误而使系统处于死锁状态,为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。
图2.1复位电路
2.2按键电路
按键电路的按键功能说明:
(1)KEY1用于增加数值。
(2)KEY2用于减小数值。
(3)K3用于设置分钟和闹钟的分钟。
(4)K4用于设置完成退出。
图2.2按键电路
2.3时钟振荡电路
单片机必须在时钟的驱动下才能工作。
在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度本系统使用的是内部时钟方式。
时钟电路如下图2所示。
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1、C2的作用有两个,一是帮助振荡器起振;二是对振荡器的频率进行微调。
本系统的C1、C2的值为30pf。
图2.3晶振电路
2.4单片机最小系统模块电路
单片机选用Atmel公司的单片机芯片STC89C52,它完全可以满足本设计中采集控制和数据处理的需要。
它小巧灵活、成本低、可靠性好、适应温度范围宽,易于扩展等优点,在工业自动化、智能仪器仪表、家用电器等方面得到了广泛应用。
图2.4单片机最小系统模块电路
三、软件设计
3.1程序流程图
程序如下:
if(KEY1==0)
{
num++;
Delay_nms(200);
}
if(KEY2==0)
{
num--;
Delay_nms(200);
}
程序如下:
voidTimer0Init(void)//5毫秒@11.0592MHz
{
TMOD=0xF0;//设置定时器模式
TL0=0x00;//设置定时初值
TH0=0xEE;//设置定时初值
TF0=0;//清除TF0标志
ET0=1;//打开定时器0中断
TR0=1;//定时器0开始计时
}
intmain()
{
//intmode=1;//局部变量(函数内)
Timer0Init();
//配置外部中断1
IT1=1;//设置外部中断1触发条件(1:
下降沿0:
低电平)
EX1=1;//打开外部中断1
EA=1;//打开总中断
//死循环
num=0000;
程序如下:
while
(1)
{
num--;
Delay_nms(1000);
if(num<=0)
{
ET0=0;
BELL=0;
Delay_nms(1000);
break;
}
}
单片机总程序:
#include
#include
sbitBELL=P0^7;
sbitKEY1=P3^3;
sbitKEY2=P3^4;
sbitkey3=P3^6;
//数码管位选
sbitWEI0=P1^0;
sbitWEI1=P1^1;
sbitWEI2=P1^2;
sbitWEI3=P1^3;
intmode=1;//当前模式
//数码管数字编码(0~9)
unsignedchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
intnum;//数码管显示数字(4位数)
intpos=0;//数码管显示位置
//stc-isp软件中自动生成软件延时
voidDelay1ms()//@11.0592MHz
{
unsignedchari,j;
_nop_();
i=2;
j=199;
do
{
while(--j);
}while(--i);
}
voidDelay_nms(intn)
{
inti;
for(i=0;i { Delay1ms(); } } voidTimer0Init(void) { TMOD=0xF0;//设置定时器模式 TL0=0x00;//设置定时初值 TH0=0xEE;//设置定时初值 TF0=0;//清除TF0标志 ET0=1;//打开定时器0中断 TR0=1;//定时器0开始计时 } intmain() { Timer0Init(); IT1=1;//设置外部中断1触发条件(1: 下降沿0: 低电平) EX1=1;//打开外部中断1 EA=1;//打开总中断 //死循环 num=0000; while (1) { ET0=1; if(KEY1==0) { num++; Delay_nms(200); } if(KEY2==0) { num--; Delay_nms(200); } if(key3==0) { while (1) { num--; Delay_nms(1000); if(num<=0) { ET0=0; BELL=0; Delay_nms(800); break; } } } } } //外部中断1服务函数(触发时机: 指定IO口产生了下降沿) voidexint1()interrupt2 { //1.判断用户是否按下按键1, if(KEY1==0) { //按键去抖时间不能太短,也不能太长。 (根据不同开发板按键而定) Delay_nms(100); if(KEY1==0) { //修改状态值: 1->22->1 if(mode==1) mode=2; else mode=1; } } } //定时器中断服务函数(触发时机: 每隔5毫秒,用于显示数码管) voidt0int()interrupt1 { TL0=0x00;//设置定时初值 TH0=0xEE;//设置定时初值 WEI0=1; WEI1=1; WEI2=1; WEI3=1; pos++; if(pos>4) pos=1; switch(pos) { case1: P0=table[num%10]; WEI0=0; break; case2: P0=table[num/10%10]; WEI1=0; break; case3: P0=table[num/100%10]; WEI2=0; break; case4: P0=table[num/800]; WEI3=0; break; } } 四、调试与实现 应用系统设计完成之后,要进行硬件调试和软件调试。 软件调试可以利用开发及仿真系统进行。 1.硬件调试 硬件的调试主要是把电路各种参数调整到符合设计要求。 具体如下: (1)先排除硬件电路故障,包括设计性错误和工艺性故障。 一般原则是先静态后动态。 (2)利用万用表或逻辑测试仪器,检查电路中的各个器件以及引脚是否连接正确,是否有短路故障。 (3)先要将单片机STC89C52芯片取下,对电路板进行通电检查,通过观察看是否有异常,然后用万用表测试各电源电压,若这些都没有问题,则接上仿真机进行联机调试观察各接口线路是否正常。 2.软件调试 软件调试是利用仿真工具Proteus进行在仿真调试,除发现和解决程序错误以外,也可以发现硬件故障。 4.1实物连线 图4.1.1CAD连接图 图4.1.2实物连接图 4.2连线步骤 数码管 WEI0----DB1----P1.0(T2) WEI1----DB2----P1.1(T2EX) WEI2----DB3----P1.2 WEI3----DB4----P1.3 D0----P0.0(AD0) D1----P0.1(AD01) D2----P0.2(AD2) D3----P0.3(AD3) D4----P0.4(AD4) D5----P0.5(AD5) D6----P0.6(AD6) D7----P0.7(AD7) 独立按键 KEY1----P3.3 KEY2----P3.4 KEY3----P3.6 复位电路 RST----RST 晶振电路 X1----XTAL2 X2----XTAL1 蜂鸣器电路 FM---P0.7(AD7) 电源电路 VCC----VCC 4.3测试模块 在测试数码管计时模块,蜂鸣器模块,按键加减倒计时模块中,各个模块能够正常工作,实现各自的功能。 4.4功能实现 能够实现在设定的时间内,开始倒计时,并在结束后蜂鸣器发出响声。 4.5最终调试 图4.5最终测试图 五、课程设计体会与总结 5.1总结 单片机的应用正在不断深入人们的生活,同时带动传统控制检测日新月异。 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。 在这次单片机课程设计中,我觉得最大的收获就是提高了自己的动手及思考解决问题的能力,平常以为很明白的程序,在仿真过程中却发现并不是想象的那么简单,设计的过程中失败了很多次,但通过自己的不懈努力最终获得设计的成功! 本次设计虽然是一个简单的应用项目,但让我掌握学习了单片机的方法,为以后的学习实践打下了基础。 在设计过程当中也发现了自己经验的不足,尤其是在编程序方面还需要大量的练习,为以后的学习打下基础。 万事开头难,在这次课程设计后我对自己的动手能力更加有信心。 我相信我所学的东西在以后的工作学习中会起很大的作用。 最后,在本次设计中指导老师给予了我很多的帮助,在此表示衷心的感谢! 参考文献 [1]林小茶著.C语言程序设计(第四版)[M].中国铁道出版社,2016 [2]李精华,李云.51单片机原理及应用[M].中国工信出版集团,2020 [3]李广弟.单片机基础[M].北京航天航空出版社,2010 附录 表1倒计时器元件清单 元件名称 型号 数量/个 用途 单片机 AT89C52 1 控制核心 晶振 12MHz 1 晶振电路 按键 4 按键电路 数码管 共阳 4 显示器 集成块 74LS245 3 驱动 三极管 2N5088 1 蜂鸣器 喇叭 8Ω/0.5W 1 蜂鸣器 电阻 1kΩ 2 蜂鸣器 电阻 100Ω 1 蜂鸣器 电阻 2.7kΩ 4 上拉电阻 电阻 330Ω 8 上拉电阻 电源 +5V/0.5A 1 提供+5V
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 C51 计时器 设计