数字体温计protues仿真图和程序Word文档格式.docx

上传人:b****5 文档编号:15838271 上传时间:2022-11-16 格式:DOCX 页数:27 大小:355.35KB
下载 相关 举报
数字体温计protues仿真图和程序Word文档格式.docx_第1页
第1页 / 共27页
数字体温计protues仿真图和程序Word文档格式.docx_第2页
第2页 / 共27页
数字体温计protues仿真图和程序Word文档格式.docx_第3页
第3页 / 共27页
数字体温计protues仿真图和程序Word文档格式.docx_第4页
第4页 / 共27页
数字体温计protues仿真图和程序Word文档格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数字体温计protues仿真图和程序Word文档格式.docx

《数字体温计protues仿真图和程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字体温计protues仿真图和程序Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。

数字体温计protues仿真图和程序Word文档格式.docx

sbitIcden=卩2八7;

sbitIcdrw=P2A5;

sbitAN=P2A0;

sbitAM=P2A1;

ucharcodeTemp_Disp_Title[]={"

CurrentTemp:

"

};

uchartemp_buffer[]={"

TEMP:

ucharcodexs[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};

/小、数位

ucharTemp_value[]={0x00,0x00};

〃为DS18B20读取的字节分配地址

ucharDisplay_Digit[]={0,0,0,0};

uintT;

voiddelay(uint);

voiddelay1602(uint);

voidinit_ds18b20();

voidwrite_byte(uchardate);

voiddisplay_temp();

voidwrite_com(uchar);

voidwrite_2(uchar);

voidinit1602();

ucharread_byte();

voidread_temp();

voidmain()

{bitzhi=0;

AN=1;

init1602();

//1602初始化read_temp();

//读取温度delay(50000);

while

(1)

{read_temp();

if(zhi==0)

display_temp();

//按键没有按下时显示温度if(Display_Digit[2]>

2)//设定报警温度if(zhi==0)

BUFFER=0;

delay(2000);

BUFFER=1;

delay1602

(1);

if(AN==0)//检测按键

{delay1602(5);

//去抖if(AN==0)//按下按键{zhi=~zhi;

//while

(1);

//保持当前温度while(!

AN);

//松手检测

}

voiddelay(uintt)

{

while(t--);

voiddelay1602(uintz)

uintx,y;

for(x=z;

x>

0;

x--)for(y=110;

y>

y--);

/****************************初始化,检测DS18B20是否在线*****************************/voidinit_ds18b20()

DQ=1;

delay(8);

DQ=0;

delay(85);

delay(14);

delay(5);

voidwrite_byte(uchardate)

uchari;

for(i=0;

i<

8;

i++)

//写数据前将数据线拉低DQ=date&

0x01;

//从最低位开始写delay(5);

//留出ds18b20采样时间DQ=1;

//采样完将数据拉高,等待下一次采样date»

=1;

//date右移一位

delay(5);

ucharread_byte()

uinti,value;

value>

>

〃右移一位,同时起延时作用

if(DQ==1)

value|=0x80;

//从高位开始读delay(5);

returnvalue;

voidread_temp()

{init_ds18b20();

write_byte(0xcc);

〃跳过ROMwrite_byte(0x44);

〃启动温度测量delay(200);

〃给出温度测量时间

init_ds18b20();

〃跳过ROMwrite_byte(0xbe);

//读取温度

voiddisplay_temp()

uinti;

Temp_value[0]=read_byte();

Temp_value[1]=read_byte();

Display_Digit[0]=xs[Temp_value[0]&

0x0f];

//显示小数位

T=((Temp_value[0]&

0xf0)>

4)|((Temp_value[1]&

0x07)<

<

4);

Display_Digit[3]=T/100;

//百位

Display_Digit[2]=T%100/10;

//十位

Display_Digit[1]=T%10;

//个位temp_buffer[11]=Display_Digit[0]+'

0'

;

temp_buffer[10]='

.'

;

temp_buffer[9]=Display_Digit[1]+'

temp_buffer[8]=Display_Digit[2]+'

temp_buffer[7]=Display_Digit[3]+'

if(Display_Digit[3]==0)

temp_buffer[7]='

'

//如果百位为0,则显示空格if(Display_Digit[2]==0&

&

Display_Digit[3]==0)

temp_buffer[8]='

//如果百位和十位同时为0,则十位处显示空格write_com(0x80);

15;

{write_2(Temp_Disp_Title[i]);

}write_com(0x80+0x40);

for(i=0;

12;

{write_2(temp_buffer[i]);

delay1602(10);

}write_com(0x80+0x4d);

write_2(0xdf);

write_2('

C'

);

voidwrite_com(ucharcom)

lcdrs=0;

P0=com;

delay1602(5);

lcden=1;

lcden=0;

voidwrite_2(ucharda)

lcdrs=1;

P0=da;

delay1602(5);

lcden=1;

voidinit1602()

lcden=0;

lcdrw=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

仿真图

C1

•U1

XT.4L1

X

LSI

XTAL2

RST

TEXT>

psaq

ALE

EA

CRYST细

R2..

10k•-

--■■

22p<

D2:

LED-8F

ftTS^51<

LCD1

16L

thetemperature

is38.0

P0.0/AD0P0.1/AD1

P0.2WD2

P03AD3

P0.4/AD4

P0.5WD5

P0.6WD6

P0.7/AD7

P2D/A8

P2.1/A9P22/A10P23/A11P2.4/A12P25/A13P2B/A14P2.7/A15

P3.0KXDP3.1/TXDP32匝

P33^NfT

P3.4fT0

P3.5fT1_

P3.6匝

P3.7莎

fj.

■21

■22

(0Oiu>

QOOOOOOO

XCW寸£

9*

■24■2E■2E

■27

■2E

■1C

■ii

OP2.0

OP2.1

OP2.2

OP2.3

OP2.4

OP2.5

OP2.6

OP2.7

ORS

ORW

U4

VCC

DQ

GND••

DS1S820<

.

程序清单

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedintuchari;

sbitlcdrs=P39

sbitlcdrw=P3A1;

sbitIcden=卩3八2;

sbitd1=P1A0;

sbitd2=P1A1;

ucharcodet0[]="

thetemperature"

ucharcodet1[]="

is"

//利用一个温度表解决温度显示

ucharcodewendu[]="

0123456789"

乱码

sbitDQ=P3A7;

//定义ds18B20总线IO

//液晶显示模块

voiddelay(uintz)

for(x=100;

1;

x--)for(y=z;

y--);

P2=com;

voidwrite_date(uchardate)

P2=date;

voidinit_lcd()

write_com(0x01);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

16;

{write_date(t0[i]);

delay(0);

}write_com(0x80+0x40);

write_date(t1[i]);

//温度采集模块

voidtmpDelay(intnum)//延时函数

{while(num--);

}/****************************************************************

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

voidInit_DS18B20()〃初始化ds1820

unsignedcharx=0;

DQ=1;

〃DQ复位

tmpDelay(8);

//稍做延时

DQ=0;

//单片机将DQ拉低

tmpDelay(80);

//精确延时大于480us

//拉高总线

tmpDelay(14);

x=DQ;

//稍做

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

当前位置:首页 > 经管营销 > 销售营销

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

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