- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多点温度监测系统
电子设计自动化
实 训 报 告
一、实训目的和意义
通过对多点温度检测系统的设计,可以更深入的了解MC5.2单片机的特点以及应用技巧,对单片机的应用可以温习其中的结构以及原理。而且proteus的强大功能也能通过此次试验反应出来,熟悉其界面的风格以及各种应用,又重新的认识了proteus在单片机方面的强大功能。
二、实训设计内容要求
1.实现4点温度实时采集,温度传感器采用DS18B20
2.采用LCD1602显示4个采集点温度
3.具有温度上下限报警功能:上限90°C,下限20°C
4.声音和光报警2种模式:
光报警采用4只发光LED;
声音报警采用扬声器,报警音调采用2KHz方波。
三、系统设计
1.方案设计
2.硬件电路设计
(1)工作原理:
(a)()()()()80C52
(b)晶振电路
(c)复位电路
(d)LED灯电路
(e)LCD1602
(f)温度检测ds18b20
3. 软件设计
(1)时间的设定:
延时程序如下{
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;i0;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; i0; i--)
{
DQ1 = 0;
DQ1 = dat10x01;
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=b;
t=8;
t=t|a;
tt=t*0.0625;
t= tt*10;
if((t900)|(t200))
{
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;x1;x--)
for(y=z;y1;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); //显示功能
文档评论(0)