多点温度监测系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}