基于单片机的厨房定时器可预置分秒倒计时装置.docx
《基于单片机的厨房定时器可预置分秒倒计时装置.docx》由会员分享,可在线阅读,更多相关《基于单片机的厨房定时器可预置分秒倒计时装置.docx(14页珍藏版)》请在冰点文库上搜索。
基于单片机的厨房定时器可预置分秒倒计时装置
基于51单片机的厨房定时器
设计报告
学院:
信息光电子科技学院
专业:
光电信息科学与工程
年级:
姓名:
学号:
一、设计报告概述
日常生活中熬个汤、煮个蛋……都需要预定一定的时间,设计一个厨房定时器,用户预设倒计时的时长,启动后系统开始倒计时,当时间为0后,启动蜂鸣器报警。
本设计报告中的厨房定时器,是以单片机(STC89C52),四位七段数码管、按键开关和蜂鸣器等组成的综合设计系统电路。
上电,电源指示灯点亮,数码管显示为0000,用户可以通过按键开关预设定时时间,启动后系统开始倒计时,当时间为0后,蜂鸣器报警。
数码管显示分、秒,计时时间上限为99分钟,按键开关以10分钟或1分钟单位调整时间。
二、设计总体框图
图1系统设计结构图
本系统组成如图1系统设计结构图所示,主要由五个部分组成。
1.AT89C52单片机——控制芯片
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52为8位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52相同,其主要用于会聚调整时的功能控制。
图2AT98C52引脚图
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
//定义函数变量
intsec;
unsignedcharbeepset;
unsignedcharnum;
unsignedcharn;
unsignedcharminu10;
unsignedcharminu;
unsignedcharsec10;
unsignedcharnum;
//定义数组,共阳数码管的段位码
Unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定义引脚
sbitstart=P3^4;//将start定义为P3.4启动计时
sbitmin1=P3^5;//将min1定义为P3.5分加10
sbitmin2=P3^6;//将min2定义为P3.6分加1
sbitmin3=P3^7;//将min3定义为P3.5分减1
sbitbeep=P3^0;//将beep定义为P3.0
sbitled=P3^1;//将led定义为P3.1
sbitmin11=P2^0;//控制位选码
sbitmin22=P2^1;
sbitsec33=P2^2;
sbitsec44=P2^3;
//预先定义显示子函数
voiddisp();
//延时子函数
voiddelay(unsignedintms)
{
unsignedinti,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
//键盘扫描子函数
voidkey_scan()
{
if(P3!
=0xff)//判断是否有按键按下
{
delay
(2);disp();//延时处理,进行键盘消抖
delay
(2);disp();
delay
(2);disp();
delay
(2);disp();
delay
(2);disp();
if(P3!
=0xff)//再次判断按键
{
if(min1==0){while(!
min1);//按键2,功能为加10分钟
sec=sec+600;
if(sec>5940)sec=0;
}
elseif(min2==0){while(!
min2);//按键3,功能为加1分钟
sec=sec+60;
if(sec>5940)sec=0;
}
elseif(min3==0){while(!
min3);//按键4,功能为减1分钟
sec=sec-60;
if(sec<60)sec=0;
}
elseif(start==0){while(!
start);//按键1,功能为开始倒计时
TR0=1;
}
}
}
}
//数码管扫描显示子函数
voiddisp()
{
minu10=sec/600;//对计数值进行预处理,分别得出每个数码管显示的值
minu=sec%600/60;
sec10=sec%600%60/10;
num=sec%600%60%10;
switch(n)//扫描显示,分别选中位选码之后显示段选码,再熄灭跳出
{
case0x01:
min11=1;P0=table[minu10],delay
(1);min11=0;break;
case0x02:
min22=1;P0=table[minu],delay
(1);min22=0;break;
case0x03:
sec33=1;P0=table[sec10],delay
(1);sec33=0;break;
case0x04:
sec44=1;P0=table[num],delay
(1);sec44=0;break;
}
if(n==0x04){n=0;}
elsen++;
}
//主函数
voidmain()
{
sec=0;//设置初值
num=0;
n=0;
beepset=0;
EA=1;
ET0=1;
EX0=1;
TMOD=0x01;//使用定时器T0,工作模式1
TH0=0x3c;//定时器高八位赋初值TH0=(65536-50000)/256,即50ms
TL0=0xb0;//定时器低八位赋初值TH0=(65536-50000)%256
while
(1)
{
if(TR0==0){key_scan();disp();}
elseif(TR0==1)
{
if(num==20)//20*50ms,定时时间为1秒
{
num=0;
if(sec!
=0){sec--;}
if(sec==0)
{beepset++;
beep=0;
if(beepset==10)
{
beepset=0;
beep=1;
TR0=0;
}
}
}
}
disp();
}
}
voidT0_time()interrupt1
{
TH0=0x3c;
TL0=0xb0;
num++;
}
voidEx()interrupt0
{TR0=0;}
附:
电子元件个别说明(以下元件焊接要注意引脚的正确与否)
(1)四位共阳数码管SR420561K:
4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。
1af23b
。
。
。
。
。
。
。
。
。
。
。
。
eddpcg4
(2)PNP三极管:
(3)其他:
一般两脚的电子元件,正极一端较长。