基于单片机的恒温箱课程设计报告书Word下载.docx
- 文档编号:18936700
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:14
- 大小:89.03KB
基于单片机的恒温箱课程设计报告书Word下载.docx
《基于单片机的恒温箱课程设计报告书Word下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的恒温箱课程设计报告书Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
该系统具有实时温度显示和温度设定功能,还具有温度上、下限报警和自动控制功能。
当温度高于或低于设定值一定程度时,发出生光报警,消除由于单片机系统意外失控所造成的危险,提高了恒温箱工作的可靠性和使用安全性。
设计任务为:
用单片机设计一个控制温度范围在30℃~80℃的智能温度控制系统。
设计要求:
完成该系统的软硬件设计,学习掌握单片机采集测控系统的设计方法,提高学习新知识、新技能的能力,培养独立设计的能力。
1系统设计分析
1.1设计题目要求
根据《计算机控制技术》课程的知识点,设计一个基于单片机的恒温箱控制系统。
设计任务书要求设计一个以8088CPU或PC总线为核心,以AI、DI和AO、DO通道为主要接口,外配LED显示、键盘操作以及包括传感变送器及执行器的小型计算机控制系统。
在Proteus下仿真进行验证。
1.2设计方案选择
本设计的目的在于使箱内有一个恒温环境,当温度过高时要使温度能够降低,当温度过低时要使温度能够升高。
温度传感器DS18B20是“一线总线”接口,且可以直接读出被测温度,测温范围大,因此选择DS18B20来采集温度。
半导体制冷片是用直流电流使其运转的,可以连续的工作,且既有加热和制冷两种功能,使用两个继电器改变半导体的电流方向以实现加热(制冷)工作。
显示方面则选用LCD1602,可以显示英文及数字,质量轻,耗电小,而且显示内容多。
整个系统选择由STC89C51最小系统控制,STC89C51系列单片机具有强抗干扰、高速、低功耗的功能,且指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择。
2硬件电路设计
2.1硬件电路设计
图2.1系统总体框图
2.1.1传感器
温度采集器件使用温度传感器,温度传感器包括热电偶、热敏电阻、RTD和IC温度传感器等几种,本设计中采用DS18B20温度传感器,该温度传感器应用时不需要任何外部器件即可实现测温电路,只通过一条数据线即可实现通信,精度可达到0.0625℃,测量温度可从-55℃~+125℃,且内部设有温度上、下限告警功能。
设计如图2.2所示:
图2.2DS18B20温度传感器
2.1.2温度传感器DS18B20
温度传感器DS18B20是数字式温度传感器,是一种改进型的只能温度传感器,“一线总线”接口,相对于传统温度传感器精度高、稳定性好、电路简单、控制方便。
能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点:
①.可通过数据线供电,电压范围:
3.0~5.5V;
②.测温范围:
-55~+125℃;
③.无须外部器件,独特的单线接口仅需要一个端口引脚进行通信;
④.多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
⑤.零待机功耗;
⑥.用户可定义的非易失性温度报警设置;
⑦.报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
⑧.可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃0.25℃、0.125℃和0.0625℃;
⑨.负压特性:
电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
DS18B20的引脚图和内部结构分别如图2.3所示:
图2.3DS18B20封装图
2.1.3LED数码管显示电路
显示方式可选择LED数码管,也可选择字符型LCD显示。
本设计采用共阳极LED数码管显示,LED数码管价格便宜,电路简单,质量轻,可以显示简单的英文和数字,能够满足系统要求。
设计如图2.4所示:
图2.4LED数码管
2.2硬件总电路图
图2.5系统总电路图
3程序设计
3.1程序设计介绍
程序编写使用KEIL4软件,使用C语言编写。
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。
它的应用范围广泛,具备很强的数据处理能力,不仅仅在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,二维,三维图形和动画,具有应用比如单片机以及嵌入式系统开发。
3.2程序编写
#include"
reg52.h"
#include"
absacc.h"
/*****DuLiang201120307202****/
/****2014.6.18***/
#defineuintunsignedint
#defineulintunsignedlongint
#defineucharunsignedchar
sbitP20=P2^0;
//数码管位选
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitds=P2^7;
//DS18B20引脚
sbitHEAT=P2^5;
//加热引脚
sbitCOOLING=P2^6;
//降温引脚
sbitH_warn=P1^0;
//高温报警引脚
sbitL_warn=P1^1;
//低温报警引脚
bittime20ms=0;
unsignedintwendu_value=0;
floatf_temp;
uinttemp;
uintset_temp_H=55,set_temp_L=45;
//温度设定
uinttemp_shi=0,temp_ge=0,temp_xiaoshu=0;
uchartemp_wela=0;
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0~9不带小数点
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
//0~9带小数点
//共阳极数码管
ucharkeyscan_num;
/*子程序声明*/
voiddelay(uintdelay_x);
voiddisplay();
voiddsreset(void);
bittempreadbit(void);
uchartempread(void);
voidtempwritebyte(uchardat);
voidtempchange(void);
uintget_temp();
ucharkeyscan(void);
/*定时器0和中断系统初始化*/
voidinit()
{
HEAT=1;
TMOD=0x11;
TH0=(65536-1000)/256;
//1ms时基
TL0=(65536-1000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
ET0=1;
ET1=1;
EA=1;
TR0=1;
}
voidmain()
init();
while
(1)
{
switch(keyscan_num)
{
case0:
{
P20=1;
P21=1;
P22=1;
P23=1;
P0=0xbf;
}break;
case1:
if(wendu_value<
(set_temp_L*10))
{
HEAT=0;
L_warn=0;
}
else{HEAT=1;
L_warn=1;
if(wendu_value>
(set_temp_H*10))
COOLING=0;
H_warn=0;
else{COOLING=1;
H_warn=1;
}
}
}
voidtimer0(void)interrupt1
staticuchartimecount=0,timecount1=0,timecount3=0;
TR0=0;
timecount++;
timecount1++;
timecount3++;
if(timecount==5)
{
timecount=0;
if(keyscan_num==1)
display();
}
if(timecount1==200)
timecount1=0;
tempchange();
wendu_value=get_temp();
if(timecount3==50)
timecount3=0;
keyscan_num=keyscan();
voidtimer1(void)interrupt3
{
staticuchartimecount2=0;
TR1=0;
timecount2++;
if(timecount2==200)
timecount2=0;
time20ms=!
time20ms;
TR1=1;
/*****数码管显示子程序******/
voiddisplay()
temp_shi=wendu_value/100;
temp_ge=wendu_value%100/10;
temp_xiaoshu=wendu_value%100%10;
P20=0;
P21=0;
P22=0;
P23=0;
if(temp_wela==0)
P0=table[temp_shi];
P20=1;
if(temp_wela==1)
P0=table[temp_ge+10];
P21=1;
if(temp_wela==2)
P0=table[temp_xiaoshu];
P22=1;
temp_wela++;
if(temp_wela==3)
{
temp_wela=0;
}
/*温度读取子程序*/
voiddelay(uintdelay_x)
uintx,y;
for(x=delay_x;
x>
0;
x--)
for(y=110;
y>
y--);
voiddsreset(void)//DS18B20复位,初始化函数
uinti;
ds=0;
i=103;
while(i>
0)i--;
ds=1;
i=4;
bittempreadbit(void)//读一位数据函数
bitdat;
i++;
dat=ds;
i=8;
while(i>
return(dat);
uchartempread(void)//读1个字节数据函数
uchari,j,dat;
dat=0;
for(i=1;
i<
=8;
i++)
j=tempreadbit();
dat=(j<
<
7)|(dat>
>
1);
//读出的数据最低位在最前面,这样刚好一个字节在dat里
voidtempwritebyte(uchardat)//向DS18B20写一个字节数据函数
ucharj;
bittestb;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)//写1
ds=0;
i++;
ds=1;
i=8;
else
//写0
voidtempchange(void)//DS18B20开始获取温度并转换
dsreset();
delay
(1);
tempwritebyte(0xcc);
//写跳过读ROM指令
tempwritebyte(0x44);
//写温度转换指令
uintget_temp()//读取寄存器中存储的温度数据
uchara,b;
tempwritebyte(0xbe);
a=tempread();
//读低8位
b=tempread();
//读高8位
temp=b;
temp<
temp=temp|a;
f_temp=temp*0.0625;
temp=f_temp*10+0.5;
f_temp=f_temp+0.05;
returntemp;
//temp是整型
/*键盘子程序*/
ucharkeyscan(void)
staticuchark=0;
ucharTrg,Cont,ReadData;
P3=0xff;
ReadData=P3^0xff;
Trg=ReadData&
(ReadData^Cont);
Cont=ReadData;
switch(Trg)
case0x01:
{k=1;
break;
case0x02:
{k=2;
case0x04:
{k=3;
case0x08:
{k=4;
return(k);
4总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 恒温箱 课程设计 报告书