多点温度监测系统Word文件下载.docx

上传人:wj 文档编号:360843 上传时间:2023-04-28 格式:DOCX 页数:23 大小:81.48KB
下载 相关 举报
多点温度监测系统Word文件下载.docx_第1页
第1页 / 共23页
多点温度监测系统Word文件下载.docx_第2页
第2页 / 共23页
多点温度监测系统Word文件下载.docx_第3页
第3页 / 共23页
多点温度监测系统Word文件下载.docx_第4页
第4页 / 共23页
多点温度监测系统Word文件下载.docx_第5页
第5页 / 共23页
多点温度监测系统Word文件下载.docx_第6页
第6页 / 共23页
多点温度监测系统Word文件下载.docx_第7页
第7页 / 共23页
多点温度监测系统Word文件下载.docx_第8页
第8页 / 共23页
多点温度监测系统Word文件下载.docx_第9页
第9页 / 共23页
多点温度监测系统Word文件下载.docx_第10页
第10页 / 共23页
多点温度监测系统Word文件下载.docx_第11页
第11页 / 共23页
多点温度监测系统Word文件下载.docx_第12页
第12页 / 共23页
多点温度监测系统Word文件下载.docx_第13页
第13页 / 共23页
多点温度监测系统Word文件下载.docx_第14页
第14页 / 共23页
多点温度监测系统Word文件下载.docx_第15页
第15页 / 共23页
多点温度监测系统Word文件下载.docx_第16页
第16页 / 共23页
多点温度监测系统Word文件下载.docx_第17页
第17页 / 共23页
多点温度监测系统Word文件下载.docx_第18页
第18页 / 共23页
多点温度监测系统Word文件下载.docx_第19页
第19页 / 共23页
多点温度监测系统Word文件下载.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

多点温度监测系统Word文件下载.docx

《多点温度监测系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《多点温度监测系统Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。

多点温度监测系统Word文件下载.docx

光报警采用4只发光LED;

声音报警采用扬声器,报警音调采用2KHz方波。

三、系统设计1.方案设计

8052

采集温度 显示温度

系统处理

2.硬件电路设计

是否高于90C°

是 或低于20C°

相应的报警(灯光或蜂鸣器)

(1)工作原理:

(a)通过四个温度采集器采集数字温度输入到单片机的p2.0~p2.3口。

(b)初始化LCD1602使1602能够接受数据,并分配其显示位置,此处采用两行两列式显示。

(c)单片机读取信号。

(d)单片机向LCD1602写信号,并延时。

(e)判断是否有数据高于90度或低于20度,如果有点亮相应的led,并启动蜂鸣器。

(2)硬件系统组成

(a)0C52

(b)晶振电路

(c)复位电路

(d)LED灯电路

(e)LCD1602

(f)温度检测ds18b20

3.软件设计

(1)时间的设定:

从此采用中断T0方式延时,而且是基本单位,无论蜂鸣器还是led,或是显示温度都用到此延时程序。

延时程序如下:

voidtmpDelay(intnum)

{

while(num--);

}

voidTime0(void)interrupt1using0

sound=~sound;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

(2)信号的读入与写出:

读字节程序如下unsignedcharReadOneChar1()//

unsignedchari=0;

unsignedchardat1=0;

for(i=8;

i>

0;

i--)

DQ1=0;

//给脉冲信号dat1>

>

=1;

DQ1=1;

//给脉冲信号if(DQ1)

dat1|=0x80;

tmpDelay(4);

return(dat1);

一共读四个字节,接下来是写字节程序如下voidWriteOneChar1(unsignedchardat1)//

for(i=8;

i>

i--)

DQ1=dat1&

0x01;

tmpDelay(5);

dat1>

注意度字节的返回值。

读取温度

unsignedintReadtemp1()//

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

floattt=0;

Init_DS18B201();

WriteOneChar1(0xCC);

WriteOneChar1(0x44);

WriteOneChar1(0xBE);

a=ReadOneChar1();

b=ReadOneChar1();

//

t=b;

t<

<

=8;

t=t|a;

tt=t*0.0625;

t=tt*10;

if((t>

900)|(t<

200))

LED1=0;

EA=1;

TR0=1;

else

LED1=1;

EA=0;

TR0=0;

return(t);

}

(3)蜂鸣器以及led的显示程序如下

voiddelay(ucharz)

{ ucharx,y;

for(x=1000;

x>

1;

x--)

for(y=z;

y>

y--);

voidwrite_(uchar) //写命令函数

{ lcdrs=0;

P0=;

delay(5);

lcden=1;

delay(5);

lcden=0;

voidwrite_date(uchardate) //写数据函数

{ lcdrs=1;

P0=date;

voidinit_lcd() //初始化函数

{ lcden=0;

//默认开始状态为关使能端,见时序图lcdrw=0;

//选择状态为写

write_(0x0f);

write_(0x38);

//显示模式设置,默认为0x38,不用变。

write_(0x01);

//显示清屏,将上次的容清除

write_(0x0c);

//显示功能设置0x0f为开显示,显示光标,光标闪烁;

0x0c为开显示,不显光标,光标不闪

write_(0x06);

//设置光标状态默认0x06,为读一个字符光标加1.write_(0x80);

//设置初始化数据指针

for(i=0;

i<

16;

i++)

{ //显示Thetemperaturewrite_date(t0[i]);

delay(0);

write_(0x80+0x40);

for(i=0;

{ //显示is Cwrite_date(t1[i]);

(4)程序流程图如下图所示:

开始

初始化

是否大于90度

点亮相应

的led,启动蜂鸣器

是否小于20度

. 优质资料.

点亮相应

的led,启动蜂鸣器.

显示温度

结束

四、调试方法及步骤

1.用软件调试工具先调试设计好的程序,方法是打开调试工具后新建

项目,设计开发环境,选择单片机种类,建立 .c,然后加载到环境中,编写程序,生成 HEX,把他放虚拟单片机中,调试。

2出现错误,就要修改错误,编译全部通过后再接外围硬件电路,接上仿真头,硬件电路供电后再开启仿真头,然后正确设置好仿真器,最后全速运行,查看硬件电路显示结果是否与原设计思想一致。

3.显示结果正确后结束仿真,先停止运行程序,再关掉仿真头开关,最后断电,撬开仿真器。

五、结果与讨论.

查看结果是否与自己想的一样,如果不一样,可以向同学和老师讨教,如果一样就记录下。

六、实训心得

通过本次试验学会了如何使用虚拟工具来进行单片机的编辑,通过写c语言又温习了以前的所学,回味看单片机和c语言的魅力。

通过调试程序锻炼了个人的耐心恒,恒心,毅力,和理论联系实际的能力通过学习使得懂得了开发工具的使用,多了一门吃饭的的本领,多了一门学

习其他学科的实践基础。

经过这次实训课程设计,我学到了很多书本上没有的,比较实际、实用的东西,学会了怎样将理论知识运用到实际设计当中,对实验设备和设计软件的使用和分析问题解决问题的能力也有了很大的提高。

同时也明白了电路焊接和作品调试时,需要更多的耐心。

通过这次实训课程设计,不仅可以在专业上可以学到更多的知识,同时也对平时的学习和工作中产生了影响,那就是认认真真的去完成每一件事。

附录(程序清单)

#include<

reg52.h>

// 包含52单片机寄存器定义的头文件

/**************************************************程序功能:

LCD1602显示温度

***************************************************/#defineucharunsignedchar

#defineuintunsignedint

sbitlcdrs=P2^6;

//数据命令选择控制sbitlcdrw=P2^5;

//读/写选择控制

sbitlcden=P2^7;

//使能信号sbitLED1=P1^0;

sbitLED2=P1^1;

sbitLED3=P1^2;

sbitLED4=P1^3;

sbitsound=P1^4;

ucharcodet0[]="

T1:

T2:

"

;

ucharcodet1[]="

T3:

T4:

ucharcodedigital[]="

0123456789"

sbitDQ1=P2^0;

//定义温度DS18B20接口,详情见原理图sbitDQ2=P2^1;

//定义温度DS18B20接口,详情见原理图sbitDQ3=P2^2;

//定义温度DS18B20接口,详情见原理图sbitDQ4=P2^3;

//定义温度DS18B20接口,详情见原理图uchari;

/*****************************************函数功能:

DS18B20相关函数

*****************************************/voidtmpDelay(intnum)//延时函数

TH0=(65536-5000)/256;

//定时器T0的高8位重新赋初值TL0=(65536-5000)%256;

//定时器T0的高8位重新赋初值

voidInit_DS18B201()//初始化ds1820

unsignedcharx=0;

//DS复位tmpDelay(8);

//稍做延时

//单片机将DS拉低tmpDelay(80);

//精确延时大于480usDQ1=1;

//拉高总线tmpDelay(14);

x=DQ1;

//稍做延时后如果x=0则初始化成功x=1则初始化失败tmpDelay(20);

voidInit_DS18B202()//初始化ds1820

DQ2=1;

DQ2=0;

//精确延时大于480usDQ2=1;

//拉高总线tmpDelay(14);

x=DQ2;

//稍做延时后如果x=0则初始化成功x=1则初始化失败

tmpDelay(20);

voidInit_DS18B203()//初始化ds1820

DQ3=1;

DQ3=0;

//精确延时大于480usDQ3=1;

x=DQ3;

//稍做延时后如果x=0则初始化成功x=1则初始化失败tmpDelay(20);

voidInit_DS18B204()//初始化ds1820

DQ4=1;

DQ4=0;

//精确延时大于480usDQ4=1;

x=DQ4;

unsignedcharReadOneChar1()//读一个字节

unsignedcharReadOneChar2()//读一个字节

unsignedchardat2=0;

//给脉冲信号dat2>

//给脉冲信号if(DQ2)

dat2|=0x80;

return(dat2);

unsignedcharReadOneChar3()//读一个字节

unsignedchardat3=0;

//给脉冲信号dat3>

//给脉冲信号if(DQ3)

dat3|=0x80;

return(dat3);

unsignedcharReadOneChar4()//读一个字节

unsignedchardat4=0;

//给脉冲信号dat4>

//给脉冲信号if(DQ4)

dat4|=0x80;

return(dat4);

voidWriteOneChar1(unsignedchardat1)//写一个字节

voidWriteOneChar2(unsignedchardat2)//写一个字节

DQ2=dat2&

dat2>

voidWriteOneChar3(unsignedchardat3)//写一个字节

DQ3=dat3&

dat3>

voidWriteOneChar4(unsignedchardat4)//写一个字节

DQ4=dat4&

dat4>

unsignedintReadtemp1()//读取温度

//跳过读序号列号的操作WriteOneChar1(0x44);

//启动温度转换Init_DS18B201();

//跳过读序号列号的操作WriteOneChar1(0xBE);

//读取温度寄存器a=ReadOneChar1();

//连续读两个字节数据 //读低8位b=ReadOneChar1();

//读高8位t=b;

t<

//两字节合成一个整型变量。

tt=t*0.0625;

//得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度

t=tt*10;

//放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。

LED1=0;

unsignedintReadtemp2()//读取温度

unsignedintt=0;

Init_DS18B202();

WriteOneChar2(0xCC);

//跳过读序号列号的操作WriteOneChar2(0x44);

//启动温度转换Init_DS18B202();

//跳过读序号列号的操作WriteOneChar2(0xBE);

//读取温度寄存器a=ReadOneChar2();

//连续读两个字节数据 //读低8位b=ReadOneChar2();

if(t>

900|t<

200)

LED2=0;

LED2=1;

unsignedintReadtemp3()//读取温度

Init_DS18B203();

WriteOneChar3(0xCC);

//跳过读序号列号的操作WriteOneChar3(0x44);

//启动温度转换Init_DS18B203();

//跳过读序号列号的操作WriteOneChar3(0xBE);

//读取温度寄存器a=ReadOneChar3();

//连续读两个字节数据 //读低8位b=ReadOneChar3();

//读高8位

LED3=0;

LED3=1;

unsignedintReadtemp4()//读取温度

Init_DS18B204();

WriteOneChar4(0xCC);

//跳过读序号列号的操作WriteOneChar4(0x44);

//启动温度转换Init_DS18B204();

//跳过读序号列号的操作WriteOneChar4(0xBE);

//读取温度寄存器a=ReadOneChar4();

//连续读两个字节数据 //读低8位b=ReadOneChar4();

LED4=0;

EA=1;

LED4=1;

LCD相关函数

*****************************************/voiddelay(ucharz)

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2