基于dsb的数字温度计Word文档格式.doc

上传人:wj 文档编号:3987020 上传时间:2023-05-02 格式:DOC 页数:14 大小:184KB
下载 相关 举报
基于dsb的数字温度计Word文档格式.doc_第1页
第1页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第2页
第2页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第3页
第3页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第4页
第4页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第5页
第5页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第6页
第6页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第7页
第7页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第8页
第8页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第9页
第9页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第10页
第10页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第11页
第11页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第12页
第12页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第13页
第13页 / 共14页
基于dsb的数字温度计Word文档格式.doc_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于dsb的数字温度计Word文档格式.doc

《基于dsb的数字温度计Word文档格式.doc》由会员分享,可在线阅读,更多相关《基于dsb的数字温度计Word文档格式.doc(14页珍藏版)》请在冰点文库上搜索。

基于dsb的数字温度计Word文档格式.doc

DS18B20的一线工作协议流程是:

初始化→ROM操作指令→存储器操作指令→数据传输。

其工作时序包括:

初始化时序,写时序,读时序

初始化时序

主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。

若无低电平出现一直都是高电平说明总线上无器件应答。

  做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。

若没有检测到就一直在检测等待。

LCD1602:

1602LCD主要技术参数:

显示容量:

16×

2个字符

芯片工作电压:

4.5—5.5V

工作电流:

2.0mA(5.0V)

模块最佳工作电压:

5.0V

字符尺寸:

2.95×

4.35(W×

H)mm

引脚功能说明

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

背光源负极

第1脚:

VSS为地电源。

第2脚:

VDD接5V正电源。

第3脚:

VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:

RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:

R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:

E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:

D0~D7为8位双向数据线。

第15脚:

背光源正极。

第16脚:

背光源负极。

LCD1602的一般初始化(复位)过程

延时15mS

写指令38H(不检测忙信号)

延时5mS

以后每次写指令、读/写数据操作均需要检测忙信号

写指令38H:

显示模式设置

写指令08H:

显示关闭

写指令01H:

显示清屏

写指令06H:

显示光标移动设置

写指令0CH:

显示开及光标设置

#include<

reg51.h>

//包含单片机寄存器的头文件

intrins.h>

//包含_nop_()函数定义的头文件

unsignedcharcodedigit[10]={"

0123456789"

};

//定义字符数组显示数字

unsignedcharcodeStr[]={"

TestbyDS18B20"

//说明显示的是温度

unsignedcharcodeError[]={"

Error!

Check!

"

//说明没有检测到DS18B20

unsignedcharcodeTemp[]={"

Temp:

//说明显示的是温度

unsignedcharcodeCent[]={"

Cent"

//温度单位

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

以下是对液晶模块的操作程序

*******************************************************************************

sbitRS=P2^0;

//寄存器选择位,将RS位定义为P2.0引脚

sbitRW=P2^1;

//读写选择位,将RW位定义为P2.1引脚

sbitE=P2^2;

//使能信号位,将E位定义为P2.2引脚

sbitBF=P0^7;

//忙碌标志位,,将BF位定义为P0.7引脚

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

函数功能:

延时1ms

(3j+2)*i=(3×

33+2)×

10=1010(微秒),可以认为是1毫秒

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

voiddelay1ms()

{

unsignedchari,j;

for(i=0;

i<

10;

i++)

for(j=0;

j<

33;

j++)

;

}

延时若干毫秒

入口参数:

n

voiddelaynms(unsignedcharn)

{

unsignedchari;

for(i=0;

n;

delay1ms();

判断液晶模块的忙碌状态

返回值:

result。

result=1,忙碌;

result=0,不忙

bitBusyTest(void)

{

bitresult;

RS=0;

//根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1;

//E=1,才允许读写

_nop_();

//空操作

//空操作四个机器周期,给硬件反应时间

result=BF;

//将忙碌标志电平赋给result

E=0;

//将E恢复低电平

returnresult;

}

将模式设置指令或显示地址写入液晶模块

dictate

voidWriteInstruction(unsignedchardictate)

{

while(BusyTest()==1);

//如果忙就等待

RS=0;

//根据规定,RS和R/W同时为低电平时,可以写入指令

RW=0;

E=0;

//E置低电平(根据表8-6,写指令时,E为高脉冲,

//就是让E从0到1发生正跳变,所以应先置"

0"

_nop_();

//空操作两个机器周期,给硬件反应时间

P0=dictate;

//将数据送入P0口,即写入指令或地址

//空操作四个机器周期,给硬件反应时间

E=1;

//E置高电平

E=0;

//当E由高电平跳变成低电平时,液晶模块开始执行命令

指定字符显示的实际地址

x

voidWriteAddress(unsignedcharx)

WriteInstruction(x|0x80);

//显示位置的确定方法规定为"

80H+地址码x"

将数据(字符的标准ASCII码)写入液晶模块

y(为字符常量)

voidWriteData(unsignedchary)

RS=1;

//RS为高电平,RW为低电平时,可以写入数据

RW=0;

//E置低电平(根据表8-6,写指令时,E为高脉冲,

//就是让E从0到1发生正跳变,所以应先置"

P0=y;

//将数据送入P0口,即将数据写入液晶模块

_nop_();

_nop_();

_nop_();

//空操作四个机器周期,给硬件反应时间

E=1;

//E置高电平

//空操作四个机器周期,给硬件反应时间

//当E由高电平跳变成低电平时,液晶模块开始执行命令

对LCD的显示模式进行初始化设置

voidLcdInitiate(void)

delaynms(15);

//延时15ms,首次写指令时应给LCD一段较长的反应时间

WriteInstruction(0x38);

//显示模式设置:

2显示,5×

7点阵,8位数据接口

delaynms(5);

//延时5ms ,给硬件一点反应时间

//延时5ms ,给硬件一点反应时间

WriteInstruction(0x38);

//连续三次,确保初始化成功

WriteInstruction(0x0c);

显示开,无光标,光标不闪烁

WriteInstruction(0x06);

光标右移,字符不移

WriteInstruction(0x01);

//清屏幕指令,将以前的显示内容清除

//延时5ms ,给硬件一点反应时间

}

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

以下是DS18B20的操作程序

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

sbitDQ=P3^3;

unsignedchartime;

//设置全局变量,专门用于严格延时

将DS18B20传感器初始化,读取应答信号

出口参数:

flag

bitInit_DS18B20(void)

bitflag;

//储存DS18B20是否存在的标志,flag=0,表示存在;

flag=1,表示不存在

DQ=1;

//先将数据线拉高

for(time=0;

time<

2;

time++)//略微延时约6微秒

;

DQ=0;

//再将数据线从高拉低,要求保持480~960us

200;

time++)//略微延时约600微秒

//以向DS18B20发出一持续480~960us的低电平复位脉冲

//释放数据线(将数据线拉高)

for(time=0;

time++)

//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)

flag=DQ;

//让单片机检测是否输出了存在脉冲(DQ=0表示存在)

time++)//延时足够长时间,等待存在脉冲输出完毕

;

return(flag);

//返回检测成功标志

}

从DS18B20读取一个字节数据

dat

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

unsignedcharReadOneChar(void)

unsignedchari=0;

unsignedchardat;

//储存读出的一个字节数据

for(i=0;

8;

{

DQ=1;

//先将数据线拉高

_nop_();

//等待一个机器周期

DQ=0;

//单片机从DS18B20读书据时,将数据线从高拉低即启动读时序

dat>

>

=1;

//等待一个机器周期

DQ=1;

//将数据线"

人为"

拉高,为单片机检测DS18B20的输出电平作准备

for(time=0;

;

//延时约6us,使主机在15us内采样

if(DQ==1)

dat|=0x80;

//如果读到的数据是1,则将1存入dat

else

dat|=0x00;

//如果读到的数据是0,则将0存入dat

//将单片机检测到的电平信号DQ存入r[i]

;

//延时3us,两个读时序之间必须有大于1us的恢复期

}

return(dat);

//返回读出的十进制数据

向DS18B20写入一个字节数据

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

WriteOneChar(unsignedchardat)

unsignedchari=0;

for(i=0;

i<

i++)

DQ=1;

//先将数据线拉高

_nop_();

//等待一个机器周期

DQ=0;

//将数据线从高拉低时即启动写时序

DQ=dat&

0x01;

//利用与运算取出要写的某位二进制数据,

//并将其送到数据线上等待DS18B20采样

for(time=0;

time++)

;

//延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样

DQ=1;

//释放数据线

for(time=0;

1;

;

//延时3us,两个写时序间至少需要1us的恢复期

dat>

//将dat中的各二进制位数据右移1位

}

for(time=0;

4;

;

//稍作延时,给硬件一点反应时间

以下是与温度有关的显示设置

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

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

显示没有检测到DS18B20

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

voiddisplay_error(void)

unsignedchari;

WriteAddress(0x00);

//写显示地址,将在第1行第1列开始显示

i=0;

//从第一个字符开始显示

while(Error[i]!

='

\0'

)//只要没有写到结束标志,就继续写

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

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2