多点温度监测系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子设计自动化实训报告

题目:多点温度监测系统

****:***

学生学号:**********

学院:工学院

专业:电子信息工程

班级:2011级

指导教师:林君副教授

一、实训目的和意义

通过对多点温度检测系统的设计,可以更深入的了解MC5.2单片机的特点以及应用技巧,对单片机的应用可以温习其中的结构以及原理。而且proteus的强大功能也能通过此次试验反应出来,熟悉其界面的风格以及各种应用,又重新的认识了proteus在单片机方面的强大功能。

二、实训设计内容要求

➢ 1.实现4点温度实时采集,温度传感器采用DS18B20

➢ 2.采用LCD1602显示4个采集点温度

➢ 3.具有温度上下限报警功能:上限90°C,下限20°C

➢ 4.声音和光报警2种模式:

光报警采用4只发光LED;

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

三、系统设计

1.方案设计

2

(1)工作原理:

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

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

(c)单片机读取信号。

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

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

(2)硬件系统组成

(a)80C52

(b)晶振电路

(c)复位电路

(d)LED灯电路

(e)LCD1602

(f)温度检测ds18b20

3. 软件设计

(1)时间的设定:

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

延时程序如下:void tmpDelay(int num)

{

while(num--) ;

}

void Time0(void) interrupt 1 using 0

{

sound=~sound;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

}

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

读字节程序如下unsigned char ReadOneChar1()//

{

unsigned char i=0;

unsigned char dat1 = 0;

for (i=8;i>0;i--)

{

DQ1 = 0; // 给脉冲信号

dat1>>=1;

DQ1 = 1; // 给脉冲信号

if(DQ1)

dat1|=0x80;

tmpDelay(4);

return(dat1);

一共读四个字节,接下来是写字节程序如下

void WriteOneChar1(unsigned char dat1)//

{

unsigned char i=0;

for (i=8; i>0; i--)

{

DQ1 = 0;

DQ1 = dat1&0x01;

tmpDelay(5);

DQ1 = 1;

dat1>>=1;

}

注意度字节的返回值。

读取温度

unsigned int Readtemp1()//

{

unsigned char a=0;

unsigned char b=0;

unsigned int t=0;

float tt=0;

Init_DS18B201();

WriteOneChar1(0xCC);

WriteOneChar1(0x44);

Init_DS18B201();

WriteOneChar1(0xCC);

WriteOneChar1(0xBE);

a=ReadOneChar1();

b=ReadOneChar1(); //

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的显示

程序如下

void delay(uchar z)

{ uchar x,y;

for(x=1000;x>1;x--)

for(y=z;y>1;y--);

}

void write_com(uchar com) //写命令函数{ lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0; }

void write_date(uchar date) //写数据函数

{ lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0; }

void init_lcd() //初始化函数

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

lcdrw=0; //选择状态为写

write_com(0x0f);

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

write_com(0x01); //显示清屏,将上次的内容清除

write_com(0x0c); //显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪

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

write_com(0x80); //设置初始化数据指针

for(i=0;i<16;i++)

{ //显示The temperature

write_date(t0[i]);

delay(0);

}

write_com(0x80+0x40);

for(i=0;i<16;i++)

{ //显示is C

write_date(t1[i]);

delay(0);

}

相关文档
最新文档