定时加热器设计资料.docx
《定时加热器设计资料.docx》由会员分享,可在线阅读,更多相关《定时加热器设计资料.docx(35页珍藏版)》请在冰豆网上搜索。
![定时加热器设计资料.docx](https://file1.bdocx.com/fileroot1/2023-2/7/f7e46be9-eab3-4919-8b93-73c080c5c424/f7e46be9-eab3-4919-8b93-73c080c5c4241.gif)
定时加热器设计资料
时间
1月14日
任务
设计定时报警加热控制器,实现按键可设置定时时间,并控制水温加热器工作。
内容
第一步:
在仿真上实现四位数码管可调篮球计分器,要求四个按键分成两组分别可以控制四位数码管高两位和低两位数据在00~30之间加减1显示。
第二步:
根据提供的实验板电路原理图,推算出四位数码管显示0~9对应的数据码,并实现程序延时和定时器延时两种方式的最高位数码管0~9每隔1S钟加1显示。
第三步:
根据提供的实验板按键电路图在实验板上实现第一步篮球计分器的效。
第四步:
在仿真实现单片机内部定时器控制可调节60分钟倒计时报警器,要求开机默认显示12.00两个按键可以设置倒计时分钟数字加减1,另一个按键可以启动倒计时,启动后数码管高两位显示分钟时间,低两位显示秒钟时间。
当数码管显示时间为00.00蜂鸣器长鸣3S钟,并显示12.00可以重新设置倒计时时间。
第五步:
在实验板上实现单片机内部定时器控制可调节60分钟倒计时报警器,要求开机默认显示12.00两个按键可以设置倒计时分钟数字加减1,另一个按键可以启动倒计时,启动后数码管高两位显示分钟时间,低两位显示秒钟时间。
当数码管显示时间为00.00蜂鸣器长鸣3S钟,并显示12.00可以重新设置倒计时时间。
第六步:
掌握继电器的编程及使用方法在万能板上练习焊接技术,焊接继电器控制转接电路实现继电器开关(练习的时可用蜂鸣器控制电路替代)。
第七步:
实验板结合继电器模块,实现定时加热报警器的功能。
所需材料:
SFC51V3实验板
STC-USB下载器
继电器控制模块(5V-2500W继电器1个、S9012三极管1个、1K电阻1个、2控接线柱1个)
单空杜邦线
专用220V接线板1个
800W热得快加热器1个
第一步:
在仿真上实现四位数码管可调篮球计分器,要求四个按键分成两组分别可以控制四位数码管高两位和低两位数据在00~30之间加减1显示。
P3.2和P3.3两个按键控制高两位数码管的数据加减1显示,P3.1和P3.0两个按键控制低两位数码管数据加减1显示,每组数据的显示范围是00~3。
第二步:
根据提供的实验板电路原理图,推算出四位数码管显示0~9对应的数据码,在SFC51-V3并实现程序延时和定时器延时两种方式的最高位数码管0~9每隔1S钟加1显示。
SFC51-V3实验板数码管数码管部分电路图
四位共阳数码管负极连接的电阻与8个LED负极所连接的电阻共用,为了让PCB板上的电路更加明了,布线采用的是单面板,但是这样数码管每一段的负极引脚与单片机的引脚连接并没有一一对应,也即是P0.0不一定对应A段的负极,P0.1也不一定对应B段的负极,数码管每一段的负极分别与P0口连接,数码管四个公共正极分别有三极管控制单片机的P2口的低四位引脚控制数码管的位选端。
根据这个电路图推测出数码管显示数据0~9对应的驱动代码。
程序延时方式和定时方式实现的效果
单片机的型号是STC12C08S2,在用程序方式延时的时候一定要注意,在使用时注意将数码管旁边的插针用跳冒将上面两个相连。
第三步:
根据提供的实验板按键电路图在实验板上实现第一步篮球计分器的效果。
实物效果图
按键从下到上分别分别控制高两位数据的加减1显示和低两位数据的加减1显示。
第四步:
在仿真实现单片机内部定时器控制可调节60分钟倒计时报警器,要求开机默认显示12.00两个按键可以设置倒计时分钟数字加减1,另一个按键可以启动倒计时,启动后数码管高两位显示分钟时间,低两位显示秒钟时间。
当数码管显示时间为00.00蜂鸣器长鸣3S钟,并显示12.00可以重新设置倒计时时间。
仿真效果图
按键P1.0控制启动,P1.1和P1.2控制高两位数码管数据的设置加减1显示,显示的时候中间有小数点显示。
第五步:
在实验板上实现单片机内部定时器控制可调节60分钟倒计时报警器,要求开机默认显示12.00两个按键可以设置倒计时分钟数字加减1,另一个按键可以启动倒计时,启动后数码管高两位显示分钟时间,低两位显示秒钟时间。
当数码管显示时间为00.00蜂鸣器长鸣3S钟,并显示12.00可以重新设置倒计时时间。
实物效果图
从下到上第一个按键为启动按键,第二和第三个为加减1按键,扩展要求:
1、实现时间到报警数码管闪烁显示3次与报警声音同步。
2、在每秒钟走动的时候小数点也跟着闪动。
3、每秒钟走动的时候蜂鸣器发出微小的点滴声。
第五步:
掌握继电器的编程及使用方法在万能板上练习焊接技术,焊接继电器控制转接电路实现继电器开关(练习的时可用蜂鸣器控制电路替代)。
焊接好的实物图
正面图,连接出来的三个导线通过杜邦线与插针相连,分别是电源正负极,三极管基极引脚。
通过杜邦线可以与实验板对接进行扩展。
背面焊接注意点焊接继电器与220V导线相连的连接线一定要加粗,该继电器的功率是25000W,如果线细的话会出现断路现象。
扩展板的电源正负极引脚通过杜邦线与实验板的扩展电源连接,三极管基极引脚通过杜邦线与单片机P0.1扩展引脚连接。
第六步:
实验板结合继电器模块,实现定时加热报警器的功能。
实物效果图
继电器转接控制接线板,插头与220V市电接线板连接,接线板控制一个白炽灯。
继电器转接控制接线板,插头与220V市电接线板连接,接线板控制一个加热器。
其他知识点:
一、常用元器件介绍
1、按键电路工作原理仿真讲解
按键也即开关:
活动冒按下则两端点导通,活动冒释放则两端点断开。
设计电路可以将两种状态对应输出高低电平信号。
经过测试对角可以正常使用。
2、测试程序
按键按下LED一直亮编程。
#include
sbitLED=P2^0;
sbitKEY=P1^0;
main()
{
while
(1)
{
if(KEY==0)
LED=0;
else
LED=1;
}
}
3、SFC51入门实验板按键部分
从图可知四个按键分别与单片机引脚的P3.3、P3.4、P3.5、P3.6连接。
定义P3.6为1号按键,P3.3为4号按键。
4、蜂鸣器工作原理仿真讲解
图1测试蜂鸣器额定电压与电流分别为5V,20MA
图2输出高电平控制蜂鸣器。
(电流流出)蜂鸣器不能正常工作。
图3输出低电平控制蜂鸣器。
(电流流进)蜂鸣器不能正常工作。
5、三极管间接控制
S9012为PNP三极管基极接收高电平信号E级与C级导通。
S9013为NPN三极管基极接收低电平信号C级与E级导通。
基极链接1K的电阻可以测试流过C级与E级的电流。
6、三极管的用法
三极管分为PNP和NPN。
有三个引脚组成分别是基极b,发射极e,集电极c。
PNP三极管b极串联1k电阻接低电平e和c极导通,电流方向与箭头方向相同,为高电平则断开。
经过测试与字符S靠近的为e极,中间的为b极。
7、蜂鸣器电路图与控制程序
#include
sbitSPK=P3^7;//控制引脚
delay()//延时0.1S
{
inti,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
main()
{
while
(1)
{
SPK=0;//蜂鸣器报警
delay();
SPK=1;//蜂鸣器不报警
delay();
}
}
8、一键多功能控制编程讲解
一个按键按不同的次数输出不同的信号,控制3个彩色LED点亮。
#include
sbitKEY=P1^0;
main()
{
intt=0;
while
(1)
{
if(KEY==0)
{
while(KEY==0);//如果KEY仍然为低电平,则执行;
t=t+1;
if(t>=4)
t=1;
}
if(t==1)P2=0xfe;
if(t==2)P2=0xfd;
if(t==3)P2=0xfb;
}
}
二、多位数码管使用
1、四位数码管使用必要性
“垃圾桶”变身为实用高科技设备
2、共阳数码管介绍
LED数码管是由多个LED发光二极管封在一起组成“8”字型的器件,8个发光二极管的负极对外引出,正极连接在一起形成公共端,即为共阳数码管内部如图。
共阳数码管显示字段:
7段数码管可以利用7个LED组合显示0~9的数字。
平面图如下:
a和b段亮显示数字“1”;
3、动态扫描原理仿真讲解
程序1:
直接显示
#include
charSEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90};//数码管显示0~9驱动码
voiddelay(intx)
{
inti,j;
for(i=0;ifor(j=0;j<110;j++);//12M晶振普通51单片机1ms
}
main()
{
while
(1)
{
P2=0x01;
P0=SEG[1];
delay(4);
P2=0x02;
P0=SEG[2];
delay(4);
P2=0x04;
P0=SEG[3];
delay(4);
P2=0x08;
P0=SEG[4];
delay(4);
}
}
程序2数据分离简化程序
数据分离讲解
已知道x=1987,如果将x的个位、十位、百位、千位进行分离并存放在a,b,c,d中。
d=1987/1000;
c=1987/100%10
b=1987/10/%10
a=1987%10
“/”求商“%”求余10/3==310%3=1
while
(1)
{
P2=0x01;
P0=SEG[d];
delay(4);
P2=0x02;
P0=SEG[c];
delay(4);
P2=0x04;
P0=SEG[b];
delay(4);
P2=0x08;
P0=SEG[a];
delay(4);
}
源程序:
•#include
•charSEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
•0x82,0xf8,0x80,0x90};//数码管显示0~9驱动码
•voiddelay(intx)
•{
•inti,j;
•for(i=0;i•for(j=0;j<110;j++);//12M晶振普通51单片机1ms
•}
•main()
•{
•intx,a,b,c,d;
•x=1987;
•d=x/1000;
•c=x/100%10;
•b=x/10%10;
•a=x%10;
•while
(1)
•{
•P2=0x01;
•P0=SEG[d];
•delay(4);
•P2=0x02;
•P0=SEG[c];
•delay(4);
•P2=0x04;
•P0=SEG[b];
•delay(4);
•P2=0x08;
•P0=SEG[a];
•delay(4);
•}
•}
程序简化
voiddisp(intx)
{
inti,temp=0x01;
DAT[0]=x/1000;
DAT[1]=x/100%10;
DAT[2]=x/10/%10;
DAT[3]=x%10;
for(i=0;i<4;i++)
{
P2=temp;//P2
P0=SEG[DAT[i]];//P0
delay(5);
temp=temp<<1;
}
}
三、外部中断
1、单片机外部中断概念分析
所谓“中断”,是指CPU执行正常程序时,系统出现特殊请求,CPU暂时中止当前的程序,转去处理更紧急的事件(执行中断服务程序),处理完毕(中断服务完成)后,CPU自动返回原程序的过程。
提高CPU效率(实时响应外界信息)、实现并行工作。
(看书的同时等待电话铃响)
2、生活中雨中断有关的列子
在家里看书,门铃响了,开门,继续看书
在家里看书,电话铃响了,接电话,继续看书
看书(主程序)
电话铃、门玲(中断信号,中断源头)
开门、接电话(中断服务子程序)
大脑如果没有中断机制,则必须看完书再去开门,或者不看书就在等待敲门去开门,这样做显然效率很低。
即实现同步运行。
3、51单片机中断源分类
MCS-51的中断源51允许5个中断源:
(1)2个外部中断源由P3.2P3.3按键接收的信号
(2)3个内部中断源内部定时时间到的2个中断,串口通讯收到数据,或则要发送数据的1个串口中断。
高级的51单片机还有更多的中断源。
(人类生活一样看书饿、门铃)
4、外部中断触发信号
从外部引脚P3.2或者P3.3引脚接收到的信号称为中断源。
(比如在看书时,敲门声和电话声就是两种中断源)
外部中断信号由两种类型(敲门门铃,直接手敲门,看书手机短信、电话)。
电平触发:
低电平有效边缘触发:
高电平变为低电平有效。
5、中断申请寄存器IE介绍
中断允许寄存器IE(可以打开和屏蔽相应的中断,可位控制也可以字节控制)
EX0/EX1ET1/ET0ES位:
分别是外部中断、定时中断、
串口中断允许控制位。
=0:
禁止中断;
=1:
允许中断。
EA:
总的中断允许控制位(总开关):
=0:
禁止全部中断;
=1:
允许中断。
6、方式及标志寄存器TCON
定时器控制寄存器TCON(高四位与定时中断有关,低四位与外部中断有关)
IE0/IE1:
外部中断申请标志位(由硬件自动置位,中断响应后转向中断服务程序时,由硬件自动清0)。
=0:
没有外部中断申请;
=1:
有外部中断申请。
(与用户无关,是单片机判断有效中断信号的唯一标志)
IT0/IT1:
外部中断请求的触发方式控制位(可由用户通过软件设置)。
=0:
在INT0/INT1端申请中断的信号低电平有效;
=1:
在INT0/INT1端申请中断的信号脉冲有效。
7、单片机外部中断编程讲解
确立对应中断源入口地址。
申请中断,中断方式设置
确立主程序和中断服务子程序。
外部中断0interrupt0//P3.2进来的信号
定时中断0interrupt1
外部中断1interrupt2//P3.3进来的信号
定时中断1interrupt3
串口中断interrupt4
voidint_0()interrupt0
{中断服务子程序}
程序格式
Main()
{
中断寄存器设置;
主程序任务;
}
voidint_0()interruptx中断服务子程序
{中断服务子程序}
程序1:
仿真实现不带中断抽奖机
#include
sbitKEY1=P3^2;
charSEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitSPK=P2^7;
voiddelay(intx)
{
inti,j;
for(i=0;ifor(j=0;j<120;j++);
}
main()
{
while
(1)
{
inti;
charj;
for(i=0;i<10;i++)
{
P0=SEG[i];
delay(1000);
if(KEY1==0)
{
for(j=0;j<3;j++)
{
SPK=0;
P0=SEG[i];
delay(100);
SPK=1;
P0=0xff;
delay(100);
}
}
//us时间响应我按键信号。
。
。
}
}
}
程序2:
仿真实现带中断抽奖机
#include
intSEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitSPK=P2^7;
intx;
voidint_it()
{
EX0=1;//打开外部中断0开关
IT0=1;//脉冲触发
EA=1;
}
voiddelay(intx)
{inti,j;
for(i=0;ifor(j=0;j<120;j++);
}
voidmain()
{
int_it();
while
(1)
{
for(x=0;x<10;x++)
{
P0=SEG[x];
delay(1000);
}
}
}
voidextern_1()interrupt0
{
intt;
for(t=0;t<3;t++)
{
SPK=0;
P0=SEG[x];
delay(100);
SPK=1;
P0=0xff;
delay(100);
}
}
四、定时器中断
1、定时器引题-生活中的例子_水满敲钟
打开闸门-等待水满-水满了-关掉闸门-敲一次钟-倒掉水杯的水-打开闸门
假设往下滴一滴水的时间是1S,如果100滴水可以将杯子装满,那么水满溢出则说明100S时间已经到。
接下来,就是敲一次钟,并准备下一个的到来。
问题:
60S敲一次钟怎么设置?
100分钟敲一次钟怎设置?
设置方法:
水满一次的时间为60S。
如果要进行100分钟的定时如何解决?
用两个变量x和y来计数:
第一个变量x记录设置杯子的初始化水滴数,如果比如要60S水满一次的话,就实现设置杯子有40滴水。
只要水满就说明60到了。
如果要继续定时则继续设置x的值。
第二个变量y记录杯子水杯装满的次数,如果y的值为100则,说明100分钟已经到。
2、水钟分析
准备条件:
稳定的滴水水源设置
装水的水杯(根据需要可以事先装一定量的水)。
准备充分,打开闸门开始滴水。
水杯水满,说明指定的时间已经到。
(z中断的概念。
。
。
。
内部中断)
根据需要处理一件事情。
(中断服务子程序)定时器0interruptn//n=1
准备下一次定时
3、定时原理分析
晶振电路正常工作,产生脉冲(水滴)。
设置计数寄存器(水杯)。
计数寄存器满,产生信号(中断信号)。
执行一个动作(中断服务子程序)。
准备下一次计数。
单片机外部振荡器既晶振:
它给单片机工作提供一个标准的时序脉冲,定时计数器就是对这个脉冲进行计数,在12M晶振下定时器的脉冲周期为1us。
4、计数寄存器理解
STC单片机为8位单片机,即内部的每个寄存器为8位。
8位寄存器就相当于C语言的一个字符变量。
用8位寄存器作为脉冲的次数记录最大能记录多少次?
256。
256us如果用两个8位寄存器,组成16位的寄存器作为脉冲的次数记录最大能记录多少次?
65536us
8位寄存器如果赋初值为0,计数达到最大值溢出时记录的次数是多少,延时的时间是多少?
如果要用8位寄存器实现200us的延时,初始值该赋多少?
(求出十进制和十六进制)
16位寄存器如果赋初值为0,计数达到最大值溢出时记录的次数是多少,延时的时间是多少?
如果要用16位寄存器实现50ms的延时,初始值该赋多少?
(求出十进制和十六进制)
5、计数寄存器THx和TLx(变量x)
51单片机提供了两个八位的寄存器组成了一个十六位的寄存器分别THx(高八位)和TLx(低八位)
定时器0对应于TH0和TL0
定时器1对应于TH1和TL1
定时器0实现溢出一次定时时间为50ms,那么TH0和TL0的值分别是多少?
TH0==0X3CTL0==0XB0
6、中断功能申请寄存器IE介绍
中断允许寄存器IE(可以打开和屏蔽相应的中断)
EX0/EX1ET1/ET0ES位:
分别是外部中断、定时中断、
串口中断
允许控制位。
=0:
禁止中断;
=1:
允许中断。
EA:
总的中断允许控制位(总开关):
=0:
禁止全部中断;
=1:
允许中断。
模式设置(杯子的大小)
工作方式寄存器TMOD
高四位对于定时器1,低四位对应定时器0
M1,M0:
工作方式选择位。
工作方式0=00:
13位定时器/计数器;
工作方式1=01:
16位定时器/计数器(常用);
工作方式2=10:
可自动重装的8位定时器/计数器(常用);
工作方式3=11:
T0分为2个8位定时器/计数器;仅适用于T0。
C/T:
定时方式/计数方式选择位。
=0:
内部提供信号脉冲。
=1:
外部提供信号脉冲。
GATE:
定时器启动控制位
=0:
程序控制。
=1:
硬件控制。
例如:
TMOD=00000001=0x01;//设定时器0为16位模式1
例如:
TMOD=00010000=0x10;//设定时器1为16位模式1
如何选择16位内部脉冲计数寄存器,并选择定时器0作为为定时器,且用软件方式实现定时器启动控制。
TMOD的值为多少?
定时0,选择低四位(高四位全为0)
16位计数寄存器选工作方式1即M1M0值为01
内部脉冲C/T值为0
软件启动定时器GATE值为0
TMOD=00000001=0x01
定时器控制寄存器TCON(高四位与定时器中断有关,低四位与外部中断有关)
TR0/TR1:
定时器运行启停控制位(可由用户通过软件设置)。
=0:
定时器停止运行;
=1:
定时器启动运行。
TF0/TF1:
定时器溢出中断申请标志位(由硬件自动置位)。
=0:
定时器未溢出;
=1:
定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。
7、如何启动定时器和判断是否溢出
TRx赋值为1,即可启动相应的定时器
如果TFx的值为1,即可以判断计数寄存器的值已经溢出。
可以用位赋值。
TCON=00010000=0x10代表什么?
即TR0的值为1,TF0的值为0。
定时器已经启动,并且计数寄存器的计数值还没有溢出。
(不能产生有效的内容中断信号)
程序1:
仿真实现定时器1SLED闪烁一次
#include
sbitLED=P2^0;
intcount=0;//50ms次数记录
timer_csh()//定时中断初始化函数
{
IE=0x82;//允许CPU中断和定时计数器0中断开关10000010
TMOD=0x01;//设定时器0和1为16位模式1
TH0=0x3C;//12M晶振定时50ms
TL0=0xB0;
}
voidmain()
{
timer_csh();//定时中断初始化
TR