根据51单片机的厨房定时器(可预置分秒倒计时装置)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

相关文档
最新文档