根据51单片机的厨房定时器(可预置分秒倒计时装置)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的厨房定时器
设计报告
学院:信息光电子科技学院
专业:光电信息科学与工程
年级:
姓名:
学号:
一、设计报告概述
日常生活中熬个汤、煮个蛋……都需要预定一定的时间,设计一个厨房定时器,用户预设倒计时的时长,启动后系统开始倒计时,当时间为0后,启动蜂鸣器报警。
本设计报告中的厨房定时器,是以单片机(STC89C52),四位七段数码管、按键开关和蜂鸣器等组成的综合设计系统电路。
上电,电源指示灯点亮,数码管显示为0000,用户可以通过按键开关预设定时时间,启动后系统开始倒计时,当时间为0后,蜂鸣器报警。数码管显示分、秒,计时时间上限为99分钟,按键开关以10分钟或1分钟单位调整时间。
图1 系统设计结构图
本系统组成如图1 系统设计结构图所示,主要由五个部分组成。
报警电路 (蜂鸣器)
1.AT89C52单片机——控制芯片
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
图2 AT98C52引脚图
2.时钟震荡电路
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。如果使用石英晶体,电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10pF,可以使系统更稳定,避免噪音干扰而死机。此设计采用的是12MHz的石英晶振。
图3 晶振震荡电路图
3.按键控制电路
本设计共有5个按键,功能依次为复位、启动、增加10分钟定时时间、增加1分钟定时时间、减少1分钟定时时间,由于按键较少,故直接连接I/O口。
复位键原理:当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。
随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。
图4 复位电路图
图5 按键电路图
4.数码管显示电路
数码管主要有共阴极和共阳极两种型号,共阴极的数码管就是公共端接地,共阳极的数码管就是公共端接电源。此设计采用的是4位一体共阳数码管。
数码管显示分为静态显示与动态显示,此设计中采用的是动态显示。动态显示是按位轮流点亮各位数码管的显示方式。在多位显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个8位I/O口实现控制,形成段选线的多路复用。而各位的共阳极分别由相应的I/O口线控制,实现各位的分时选能,在任一时段,只有一位数码管显示,其它的数码管都处于熄灭状态。
图6 数码显示电路图
5.蜂鸣器报警电路
蜂鸣器有无源蜂鸣器和有源蜂鸣器两种类型,区别在于有源蜂鸣器只需加入一个触发电平就可以发声,而无源蜂鸣器需要输入一定频率的脉冲才可以发声。此设计中采用的是有源蜂鸣器,从而选择简单高效的有源蜂鸣器。
图7 蜂鸣器报警电路图
三、设计图示
1.整体仿真电路
2.实物展示
四、源程序(C语言)
#include
//定义函数变量
int sec;
unsigned char beepset;
unsigned char num;
unsigned char n;
unsigned char minu10;
unsigned char minu;
unsigned char sec10;
unsigned char num;
//定义数组,共阳数码管的段位码
Unsigned char code
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit start=P3^4; //将start定义为P3.4 启动计时sbit min1=P3^5; //将min1定义为P3.5 分加10 sbit min2=P3^6; //将min2定义为P3.6 分加1 sbit min3=P3^7; //将min3定义为P3.5 分减1 sbit beep=P3^0; //将beep定义为P3.0
sbit led=P3^1; //将led定义为P3.1
sbit min11=P2^0; //控制位选码
sbit min22=P2^1;
sbit sec33=P2^2;
sbit sec44=P2^3;
//预先定义显示子函数
void disp();
void delay(unsigned int ms)
{
unsigned int i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
//键盘扫描子函数
void key_scan()
{
if(P3!=0xff)//判断是否有按键按下
{
delay(2); disp();//延时处理,进行键盘消抖
delay(2);disp();