传感器终期报告第三版Word格式文档下载.docx

上传人:b****5 文档编号:21204725 上传时间:2023-01-28 格式:DOCX 页数:30 大小:1.71MB
下载 相关 举报
传感器终期报告第三版Word格式文档下载.docx_第1页
第1页 / 共30页
传感器终期报告第三版Word格式文档下载.docx_第2页
第2页 / 共30页
传感器终期报告第三版Word格式文档下载.docx_第3页
第3页 / 共30页
传感器终期报告第三版Word格式文档下载.docx_第4页
第4页 / 共30页
传感器终期报告第三版Word格式文档下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

传感器终期报告第三版Word格式文档下载.docx

《传感器终期报告第三版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《传感器终期报告第三版Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。

传感器终期报告第三版Word格式文档下载.docx

在常温下,LM35不需要额外的校准处理即可达到±

1/4℃的准确率。

其电源供应模式有单电源与正负双电源两种,其引脚如图一所示。

图4.1LM35封装

规格参数

1、工作电压:

直流4~30V;

2、工作电流:

小于133μA

3、输出电压:

+6V~-1.0V

4、输出阻抗:

1mA负载时0.1Ω;

5、精度:

0.5℃精度(在+25℃时);

6、漏泄电流:

小于60μA;

7、比例因数:

线性+10.0mV/℃;

8、非线性值:

±

1/4℃;

9、校准方式:

直接用摄氏温度校准;

10、额定使用温度范围:

-55~+150℃。

11、引脚说明:

①电源负GND;

②电源正VCC;

③信号输出S;

传感器参数

供电电压35V到-0.2V

输出电压6V至-1.0V

输出电流10mA

指定工作温度范围

LM35D0℃to+100℃

计算公式:

2.41602LCD液晶屏

1602LCD尺寸图

引脚功能说明

1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据

2

VDD

电源正极

10

D3

3

VL

液晶显示偏压

11

D4

4

RS

数据/命令选择

12

D5

5

R/W

读/写选择

13

D6

6

E

使能信号

14

D7

7

D0

15

BLA

背光源正极

8

D1

16

BLK

背光源负极

引脚接口说明表

1602液晶模块内部的控制器共有11条控制指令,如下表所示:

序号

指令

清显示

光标返回

*

置输入模式

I/D

S

显示开/关控制

D

C

B

光标或字符移位

S/C

R/L

置功能

DL

N

F

置字符发生存贮器地址

字符发生存贮器地址

置数据存贮器地址

显示数据存贮器地址

读忙标志或地址

BF

计数器地址

写数到CGRAM或DDRAM)

要写的数据内容

从CGRAM或DDRAM读数

读出的数据内容

控制命令表

仿真截图:

2.4蓝牙模块

蓝牙模块应用领域:

该模块主要用于短距离的数据无线传输领域。

可以方便的和PC机(PDA手机)的蓝牙设备相连,也可以两个模块之间的数据互通。

避免繁琐的线缆连接,能直接替代现有的串口线。

蓝牙模块封装信息:

<

BF10模块引脚图>

系统框图及应用电路图:

系统框图

应用电路图

注:

蓝牙模块供电推荐使用AMS1117等纹波小的稳压芯片

2.5触摸按键模块

TTP223是触摸键检测IC,提供1个触摸键。

触摸检测IC是为了用可变面积的键取代传统的按钮键而设计的。

低功耗和宽工作电压是触摸键的DC和AC特点。

1.工作电压2.0V~5.5V

2.工作电流@VDD=3V,无负载,SLRFTB=1

低功耗模式下典型值1.5uA,最大值3.0uA

快速模式下典型值3.5uA,最大值7.0uA@VDD=3V,无负载,SLRFTB=0

低功耗模式下典型值2.0uA,最大值4.0uA

快速模式下典型值6.5uA,最大值13.0uA

3.最长响应时间大约为快速模式下60mS,低功耗模式下220mS@VDD=3V

4.灵敏度可由外部电容(0~50pF)调节

5.由选择管脚(SLRFTB管脚)提供两个采样长度的选择

6.人体触摸检测稳定,可取代传统的直接的开关键

7.由选择管脚(LPMB管脚)提供快速模式和低功耗模式的选择

8.由选择管脚(TOG管脚)提供直接模式、触发模式的选择

同时还保留漏极开路(OpenDrain)输出模式,OPDO管脚为漏极开路(OpenDrain)输出,Q管脚为CMOS输出

9.各输出模式都可通过选择管脚(AHLB管脚)选择高电平或者低电平有效

10.由选择管脚(MOTB管脚)提供100sec最长输出时间选择

11.有外部上电复位管脚(RST管脚)

12.上电之后需要约0.5sec的稳定时间,此时间段内不要对键进行触摸,

此时所有功能都被禁止

13.始终进行自校准

三、硬件电路设计

整体框图:

仿真图;

3.1粉尘传感器电路设计

3.2LM35D温度传感器电路设计

3.3DS1302电路

3.41602LCD模块电路设计

3.5按键电路

3.6报警电路

四、程序设计及软件应用

五、实验数据

从串口助手读数据:

用示波器观察烟尘传感器的输出

实际侧视图片:

附件:

程序清单

/**************************

**函数名称:

pm2.5检测传输

**函数功能:

接收pm2.5传感器数值串口发送出去

**王明祥张春婷2015.11.18

**************************/

#include<

stc12c5a60s2.h>

LCD1602.h>

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitSCLK=P1^0;

//DS1302始终控制总线

sbitDATA=P1^1;

//DS1302数据传输总线

sbitRESET=P1^2;

//DS1302复位总线

uchartable2[8];

ucharsecond,minute,hour,day,month,year;

//定义秒分时日月年变量

voiddelay1ms(void)//误差-0.018084490741us

{

unsignedchara,b;

for(b=18;

b>

0;

b--)

for(a=152;

a>

a--);

_nop_();

//ifKeil,requireuseintrins.h

}

voiddelaynms(ucharm)

while(m--)

{

delay1ms();

}

/***********************

延时函数

***********************/

voiddelay()

/*******************************

单片机小精灵生成的延时1us代码

*******************************/

voiddelay1us(void)//误差-0.005353009259us

unsignedchara;

for(a=1;

/***********************************

延时nus

***********************************/

voiddelaynus(uinti)

while(i--)

delay1us();

/************************************

函数功能:

串口初始化

波特率:

2400

工作方式:

工作方式1

************************************/

voidUART_Init()

TMOD=0x20;

//定时器1工作方式2八位自动重装模式

TL1=0xF4;

//波特率2400

TH1=0xF4;

//

TR1=1;

//开启定时器1

SM0=0;

SM1=1;

//串行口通信方式1八位uart波特率可变

REN=1;

//允许串行口接收

ES=0;

//关闭串行口中断

ADC初始化

voidADC_Init()

P1M0=0x08;

//P1.3开漏模式00001000P1.3因为按键用到了P1.4-P1.7而时钟用到了P10-P12

P1M1=0x08;

//P1.0开漏

ADC_CONTR&

=0xF8;

//设置转换速度最快

ADC_CONTR|=0x03;

//设置P1.3引脚为输入模拟量

delaynms(5);

//等待输入稳定

ucharAD_Change()

ucharresult;

ADC_CONTR|=0x88;

//启动转换

while((ADC_CONTR&

0x10)==0);

//等待转换结束

=0xE7;

//清标志位,停止AD转换

result=ADC_RES;

result<

=2;

result=result+(ADC_RESL&

0x03);

//结果只取高八位

return(result);

/*****************************

向DS1302中写入一个字节的函数

*****************************/

voidDS1302_WriteByte(uchardat)

uchari;

for(i=0;

i<

8;

i++)//8位计数器

SCLK=0;

//时钟线拉低

delay();

//延时等待

dat>

>

=1;

//移出数据

DATA=CY;

//送出到端口

SCLK=1;

//时钟线拉高

/**************************************

从DS1302读1字节数据

**************************************/

ucharDS1302_ReadByte()

uchardat=0;

SCLK=0;

delay();

//数据右移一位

if(DATA)dat|=0x80;

//读取数据

SCLK=1;

returndat;

/**********************************

向DS1302某个地址写入一个数据

**********************************/

voidWriteDat(ucharAddr,ucharData)

RESET=0;

SCLK=0;

RESET=1;

delaynus

(2);

//延时2us使硬件做好准备

DS1302_WriteByte(Addr);

//写入命令字

DS1302_WriteByte(Data);

//写入数据

SCLK=1;

//禁止数据传输

从1302某个地址读取一个字节的数据

***************************C*********/

ucharReadDat(ucharAddr)

unsignedchardat;

//拉低RST

//确保写数居前SCLK被拉低

//启动数据传输

//写入命令字

dat=DS1302_ReadByte();

//读出数据

//将时钟电平置于已知状态

//禁止数据传递

//将读出的数据返回

/*************************************

1302初始化

初始化时间:

15年11月3日

voidInit_DS1302(void)

WriteDat(0x8E,0x00);

//根据写状态寄存器命令字,写入不保护指令

WriteDat(0x80,((0/10)<

4|(0%10)));

//根据写秒寄存器命令字,写入秒的初始值

WriteDat(0x82,((5/10)<

4|(5%10)));

//根据写分寄存器命令字,写入分的初始值

WriteDat(0x84,((19/10)<

4|(19%10)));

//根据写小时寄存器命令字,写入小时的初始值

WriteDat(0x86,((3/10)<

4|(3%10)));

//根据写日寄存器命令字,写入日的初始值

WriteDat(0x88,((11/10)<

4|(11%10)));

//根据写月寄存器命令字,写入月的初始值

WriteDat(0x8c,((15/10)<

4|(15%10)));

//根据写年寄存器命令字,写入小时的初始值

读数据

voidRead_Data(void)

ucharReadValue;

ReadValue=ReadDat(0x81);

//读取1302的秒数据

second=((ReadValue&

0x70)>

4)*10+(ReadValue&

0x0F);

//将读出的BCD码转化成10进制数据

ReadValue=ReadDat(0x83);

//从分寄存器读

minute=((ReadValue&

4)*10+(ReadValue&

//将读出数据转化

ReadValue=ReadDat(0x85);

hour=((ReadValue&

ReadValue=ReadDat(0x87);

day=((ReadValue&

ReadValue=ReadDat(0x89);

month=((ReadValue&

ReadValue=ReadDat(0x8d);

year=((ReadValue&

//有争议,不确定是否是&

0x70也许是0xf0

table2[0]=0x30+hour/10;

table2[1]=0x30+hour%10;

table2[2]='

:

'

;

table2[3]=0x30+minute/10;

table2[4]=0x30+minute%10;

table2[5]='

table2[6]=0x30+second/10;

table2[7]=0x30+second%10;

时钟显示函数

**

voidShow_Data()

uinti;

Write_1602_Com(0x48|0x80);

for(i=0;

i<

i++)

Write_1602_Data(table2[i]);

/************************

**蜂鸣器

************************/

voidbeep()//产生1KHZ频率声音的函数

P36=0;

delaynus(500);

P36=1;

voidmain()

{uinti,j;

uchardat,AD_result;

floatpm25_result,tempurature;

ucharup2=80;

ucharcal[7]={0};

UART_Init();

LCD_1602_Init();

ADC_Init();

Init_DS1302();

while

(1)

AD_result=AD_Change();

tempurature=(AD_result*5.0)/1024*100;

Write_1602_Com(0x40|0x80);

Write_1602_Data('

T'

);

Write_1602_Data(0x30+tempurature/100);

Write_1602_Data(0x30+tempurature/10);

Write_1602_Data(0x30+(uchar)tempurature%10);

.'

Write_1602_Data(0x30+(uchar)(tempurature*10)%10);

C'

dat=SBUF;

while(!

RI);

RI=0;

if(dat==170)

i=0;

cal[i]=dat;

else

i=i+1;

if(i==6)

for(j=0;

j<

7;

j++)

SBUF=cal[j];

TI);

TI=0;

pm25_result=(float)(cal[1]*256+cal[2])/1024*5.0*250;

Write_1602_Com(0x00|0x80);

P'

M'

2'

5'

Write_1602_Data(0x30+pm25_result/100);

Write_1602_Data(0x30+(uchar)pm25_result%100/10);

Write_1602_Data(0x30+(uchar)pm25_result%10);

Write_1602_Data(0x30+(uchar)(pm25_result*10)%10);

u'

g'

/'

m'

3'

//

////delaynms(1000);

if((p

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

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1