温度测量及显示报告(3)

2018-12-29 22:52

p2_1=0; saomiao();

//取反

//扫描看有没有按键按下

}

}

}

}

else if(p2_1==0) }

{ }

BB--; TF1=0; TH1=0xFE; TL1=0x0C; if(BB==0) { }

p2_0=0; p2_1=1; saomiao();

//其他位为零 //取反

//扫描看有没有按键按下

2、温度测量及显示(LCD)

软件首先进行LCD的初始化,然后进温度的读取,温度值的读取又包括

DS18B20的初始化及命令的写入和数据的读取,然后进行温度值的显示,温度显示包括LCD的命令写入及数据的写入,其中用到一些器件的命令及寄存器知识。

上面所示的是LCD的显示位置的地址,通过命令可以调整LCD显示的字母的位置,下面是LCD各个引脚的功能及定义:

编号 符号 引脚说明 编号 符号 引脚说明 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脚:背光源负极。

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

序号 1 2 3 4 5 6 7 8 9 10 11

指令

清显示 光标返回 置输入模式 显示开/关控制 光标或字符移位 置功能

置字符发生存贮器地址 置数据存贮器地址 读忙标志或地址 写数到CGRAM或DDRAM)

从CGRAM或DDRAM读数

RS 0 0 0 0 0 0 0 0 0 1 1

R/W 0 0 0 0 0 0 0 0 1 0 1

D7 D6 0 0 0 0

0 0 0 0

D5 D4 0 0 0 0

0 0 0 0

D3 D2 D1 D0

0 1 I/D C * *

1 * S B * *

0 0 0 0 0 1 1 D S/R/

0 0 0 1

C L

0 0 1 DL N F 0 1 字符发生存贮器地址 1 显示数据存贮器地址 BF 计数器地址 要写的数据内容 读出的数据内容

DS18B20读取温度后温度是以16进制存储的,其存储结构如下图,其中低字节的低四位存储温度的小数部分,高字节的高五位S为符号位,其余位为温度的个位、十位、百位。

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

初始化→ROM操作指令→存储器操作指令→数据传输。 其工作时序包括:

初始化时序 写时序 读时序

总程序如下:

#include #include

//头文件包含 //头文件包含 //定义变量

#define uint unsigned int #define uchar unsigned char

#define delayNOP() {_nop_();_nop_();_nop_();_nop_();} //定义4条空语句延时

sbit DQ = P2^2;

//定义特殊功能寄存器的位变量 //同上

sbit LCD_RS = P3^0; sbit LCD_RW = P3^1; sbit LCD_EN = P3^2; sbit flag=P3^4;

//定义位变量,为标志位,显示单片机已经工作

uchar code Temp_Disp_Title[]={\ uchar Current_Temp_Display_Buffer[]={\ %uchar Current_Temp_unit[]={\

uchar code df_Table[]=

{0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9}; uchar CurrentT = 0;

uchar Temp_Value[]={0x00,0x00}; uchar Display_Digit[]={0,0,0,0}; bit DS18B20_IS_OK = 1;

void DelayXus(uint x) {

uchar i; while(x--)

{for(i=0;i<200;i++);}

//延时程序

//温度暂存

//温度单位

//定义数组为标题 //定义数组温度数据暂存

//转换为十进制后温度各个位的值存放数组 //DS18B20是否已经响应

}

bit LCD_Busy_Check() { }

void Write_LCD_Command(uchar cmd) { }

void Write_LCD_Data(uchar dat) //写数据给LCD

while(LCD_Busy_Check()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P1 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;

//写命令给LCD

bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();

result = (bit)(P1&0x80); LCD_EN=0; return result;

//根据上面的表,检测LCD是否处于忙状态


温度测量及显示报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:17春西南交《应用写作》在线作业一

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: