- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
无线传感网实验报告
一、引言
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于89C51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍, DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
二、实验内容
2.1传感器简介
本设计选择采用DS18B20温度场暗器,DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻比,他能够直接读出北侧温度并可以根据实际要求通过简单的编程实现9-12位的数字值读数方式。可以分别在93.75ms和750ms内完成九位和十二位的数字量,并且从18B20读出的信息或写入DS18B20的信息仅需要一根口线读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外加电源。
它的温度测量范围是-55~+1250C。使用DS18B20可使系统结构趋于简单,可靠性更高。他在测量精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。
2.2 电路原理图
图1
2.21 电机测速即驱动部分:
电机选用美国史普拉格公司生产的 3000 系列霍尔开关传感器 3013,它是一种硅单片 集成电路,器件的内部有稳压电路,霍尔电视发生器,放大器,施密特触发器和集成开路输出电路,具有工作电压范围宽,可靠性高,外电路简单,输出电平可与各种数字电 路兼容等特点。
电动机测试部分原理图如图2:
图2
2.22电路供电系部分
电路通过 12V 电源供电,由霍尔元件及外围器件组成的测速电路将电动机转速转换成脉冲信号送到单片机 89C51 的 P3.5 脚,作为 T1 计数器计数使用,得到的计数值。通过智能传感器再去控制电机的转速。
2.23显示部分
采用 LM016L作为显示屏
显示部分如图3:
图3
3.1 程序设计思路
程序框图
3.2源程序
#include <REGX52.H>
#include "lcd1206.h"
#include "DS18B20.h"
#include "Motor.h"
#define MotorRight() {IN1=1;IN2=0;}
#define MotorLeft() {IN1=0;IN2=1;}
#define MotorStop() {IN1=0;IN2=0;}
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit PWM=P1^2;
volatile int ltemp;
volatile float tt=0;
volatile uint n=0,pwm=0;
uchar code line[]="Temp:";
extern uchar code Dig[]="0123456789";
void Display(void);
void TimeInit(void);
void Control(void);
void main(void)
{
uint ii=0;
P1=0x00;
MotorStop();
pwm=0;
Lcd_Init();
TimeInit();
while(1)
{
tt=0;
ltemp=0;
tmpchange();
//delayms(50);
tt=tmp()*0.0625;
ltemp=tt*10+0.5;
Display();
Control();
}
}
void T0_time()interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
n++;
if(n==2000)n=0;
if(n<pwm)PWM=1;
else PWM=0;
}
void TimeInit(void)
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1;
}
void Display(void)
{
uchar i=0;
文档评论(0)