基于单片机的恒温箱课程设计文档格式.docx

上传人:b****3 文档编号:17802037 上传时间:2022-12-10 格式:DOCX 页数:14 大小:89.01KB
下载 相关 举报
基于单片机的恒温箱课程设计文档格式.docx_第1页
第1页 / 共14页
基于单片机的恒温箱课程设计文档格式.docx_第2页
第2页 / 共14页
基于单片机的恒温箱课程设计文档格式.docx_第3页
第3页 / 共14页
基于单片机的恒温箱课程设计文档格式.docx_第4页
第4页 / 共14页
基于单片机的恒温箱课程设计文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于单片机的恒温箱课程设计文档格式.docx

《基于单片机的恒温箱课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的恒温箱课程设计文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

基于单片机的恒温箱课程设计文档格式.docx

系统的全部输入输出控制集中由单片机统一管理,各有关运行参数的设定,可通过键盘输入,设定温度、箱温实时值在液晶显示模块上显示,操作方便。

该系统具有实时温度显示和温度设定功能,还具有温度上、下限报警和自动控制功能。

当温度高于或低于设定值一定程度时,发出生光报警,消除由于单片机系统意外失控所造成的危险,提高了恒温箱工作的可靠性和使用安全性。

设计任务为:

用单片机设计一个控制温度范围在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"

/*****DuLiang2****/

/****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总结

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1