基于单片机的温度显示器DOCWord文档下载推荐.docx

上传人:b****2 文档编号:13520396 上传时间:2022-10-11 格式:DOCX 页数:12 大小:118.93KB
下载 相关 举报
基于单片机的温度显示器DOCWord文档下载推荐.docx_第1页
第1页 / 共12页
基于单片机的温度显示器DOCWord文档下载推荐.docx_第2页
第2页 / 共12页
基于单片机的温度显示器DOCWord文档下载推荐.docx_第3页
第3页 / 共12页
基于单片机的温度显示器DOCWord文档下载推荐.docx_第4页
第4页 / 共12页
基于单片机的温度显示器DOCWord文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

基于单片机的温度显示器DOCWord文档下载推荐.docx

《基于单片机的温度显示器DOCWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度显示器DOCWord文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

基于单片机的温度显示器DOCWord文档下载推荐.docx

P3口:

8位准双向I/O口线,名称为P3.0-P3.7。

本文单片机模块如图所示,主要是由单片机芯片与晶振和复位电路组成的。

是由单片机来控制整个系统,让我们的系统可以正常的运行。

2、显示模块

LM016L液晶模块采用HD44780控制器,HD44780具有功能较强而又简单的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用4位或8位并行传输两种方式,HD44780控制器是由2个8bit的寄存器、显示数据存储(DDRAM)、指令寄存器(IR)、RAM(DR)、地址计数器RAM(AC)、忙标志(BF)、字符发生器ROMA(CGOROM)以及字符发生器RAM(CGRAM)组成。

其中,DR是用来寄存数据的;

IR是用来寄存指令码的,它只能够写入而不能够读出。

其数据是由内部操作自动地写入到CGRAM和DDRAM中来,或者是暂存从CGRAM以及DDRAM中读出的数据,BF为1时,LED模块工作于内部模式,既不会接受数据也不会响应外部的操作指令,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,可以查看参考文献(30)中的表4.CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM但愿,LM016L液晶模块的引脚图如图3.5所示。

图3.51601引脚图

LM016L引脚介绍:

Vss(1脚):

一般接地。

Vdd(2脚):

接电源。

Vee(3脚):

LED显示器对比度调整端口,接地时,其对比度达到最高(当对比度过高时,就会产生“鬼影”,若要正常工作,则可以通过使用一个大小为10K的电位器来调整对比度),接电源时,其对比度降至最弱。

RS(4脚):

RS是寄存器选择端口。

当接低电平时,选择指令寄存器;

接高电平时,选择数据寄存器。

R/W(5脚):

R/W为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

E(6脚):

E(或EN)端为使能(enable)端,下降沿使能。

Lcd1602与单片机的接口

3、温度传感器

DS18B20 

产品的特点 

(1)、只要求一个端口即可实现通信。

(2)、在DS18B20中的每个器件上都有独一无二的序列号。

(3)、实际应用中不需要外部任何元器件即可实现测温。

(4)、测量温度范围在-55。

C到+125。

C之间。

(5)、数字温度计的分辨率用户可以从9位到12位选择。

(6)、内部有温度上、下限告警设置。

DS18B20的引脚介绍 

TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1 

四、软件设计

1、ds18b20模块设计

Ds18b20.h

#ifndef__DS18B20_H__

#define__DS18B20_H__

#include<

reg51.h>

intrins.h>

//---重定义关键词---//

#ifndefuchar

#defineucharunsignedchar

#endif

#ifndefuint

#defineuintunsignedint

sbitDQ=P3^7;

#definedelay_4us();

{_nop_();

_nop_();

_nop_();

}

ucharinit_ds18b20();

ucharreadbyte();

voidwritebyte(uchardat);

ucharread_tem();

voiddelay_ms(uchari);

voiddelay_8us(uchari);

Ds18b20.c

#include"

ds18b20.h"

inttemp;

voiddelay_8us(uchari)

{

while(i--);

voiddelay_ms(uchari)

{

ucharm;

while(i--)

{

for(m=0;

m<

120;

m++);

}

ucharinit_ds18b20()

ucharstatus;

DQ=1;

delay_8us(8);

DQ=0;

delay_8us(90);

delay_8us(5);

status=DQ;

delay_8us(90);

DQ=1;

returnstatus;

voidwritebyte(uchardat)

uchari;

for(i=0;

i<

8;

i++)

{

DQ=0;

dat>

>

=1;

DQ=CY;

DQ=1;

ucharreadbyte()

uchari,dat=0x00;

for(i=0x01;

i!

=0x00;

<

=1)

_nop_();

if(DQ)dat=dat|i;

returndat;

ucharread_tem()

uchartml,tmh;

if(init_ds18b20()==1)return0;

else

writebyte(0XCC);

writebyte(0X44);

delay_8us(500);

init_ds18b20();

writebyte(0XBE);

tml=readbyte();

tmh=readbyte();

temp=tmh;

temp<

=8;

temp|=tml;

return1;

}

2、lcd1602显示模块

Lcd1602.h

#ifndef__LCD1602_H__

#define__LCD1602_H__

sbitrs=P2^6;

sbitrw=P2^5;

sbiten=P2^7;

voiddelay(ucharms);

voidbusy_wait();

voidwrite_lcd_command(ucharcmd);

voidwrite_lcd_data(uchardat);

voidinit_lcd();

voidlcd_showstring(ucharr,ucharc,uchar*str);

Lcd1602.c

lcd1602.h"

codeucharddram[]={0x80,0xc0};

voiddelay(ucharms)

while(ms--)

10;

i++);

voidbusy_wait()

ucharlcd_status;

do

P0=0xff;

en=0;

rs=0;

rw=1;

en=1;

lcd_status=P0;

}while(lcd_status&

0x80);

voidwrite_lcd_command(ucharcmd)

busy_wait();

en=0;

rw=0;

P0=cmd;

en=1;

en=0;

voidwrite_lcd_data(uchardat)

rs=1;

P0=dat;

voidinit_lcd()

write_lcd_command(0x38);

delay

(1);

write_lcd_command(0x01);

write_lcd_command(0x06);

write_lcd_command(0x0c);

voidlcd_showstring(ucharr,ucharc,uchar*str)

uchari=0;

write_lcd_command(ddram[r]|c);

str[i]&

&

16;

write_lcd_data(str[i]);

for(;

write_lcd_data('

'

);

3、主函数程序设计

Main.c

stdio.h>

externtemp;

uchartemp_buff[17];

externinttemp;

voidmain()

floatn=0.0;

init_lcd();

lcd_showstring(0,0,"

DS18B20TEST"

lcd_showstring(1,0,"

Waiting..."

);

read_tem();

delay_ms(1500);

while

(1)

if(read_tem())

{

n=temp*0.0625;

sprintf(temp_buff,"

TEMP:

%5.1f\Xdf\x43"

n);

lcd_showstring(1,0,temp_buff);

}

else

{sprintf(temp

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

当前位置:首页 > 总结汇报 > 学习总结

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

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