数字体温计protues仿真图和程序.docx

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

数字体温计protues仿真图和程序.docx

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

数字体温计protues仿真图和程序.docx

数字体温计protues仿真图和程序

LU:

i*.

CurrentKenp-TEOPs諾冷*C

BSss^usiiik

阳咛—;・;;;制

WMMEM

03

'JI-IH

In-

FUTM-I

■卯

WJD

p-j-p-ji

y

“ji

 

 

系统程序

#include

#ineludevintrins.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitBUFFER=PM5;

sbitDQ=P3A7;

sbitlcdrs=P2A6;

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>0;y--);

}

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

{

DQ=1;

delay(8);

DQ=0;delay(85);

DQ=1;

delay(14);delay(5);

}

voidwrite_byte(uchardate)

{

uchari;

for(i=0;i<8;i++)

{

DQ=0;//写数据前将数据线拉低DQ=date&0x01;//从最低位开始写delay(5);//留出ds18b20采样时间DQ=1;//采样完将数据拉高,等待下一次采样date»=1;//date右移一位

delay(5);

}

ucharread_byte()

{

uinti,value;

for(i=0;i<8;i++)

{

DQ=0;

value>>=1;〃右移一位,同时起延时作用

DQ=1;

if(DQ==1)

value|=0x80;//从高位开始读delay(5);

}

returnvalue;

}

voidread_temp()

{init_ds18b20();

write_byte(0xcc);〃跳过ROMwrite_byte(0x44);〃启动温度测量delay(200);〃给出温度测量时间

init_ds18b20();

write_byte(0xcc);〃跳过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]+'0';

temp_buffer[8]=Display_Digit[2]+'0';

temp_buffer[7]=Display_Digit[3]+'0';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);

for(i=0;i<15;i++)

{write_2(Temp_Disp_Title[i]);

}write_com(0x80+0x40);for(i=0;i<12;i++)

{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;

delay1602(5);lcden=0;

}

voidwrite_2(ucharda)

lcdrs=1;P0=da;delay1602(5);lcden=1;delay1602(5);lcden=0;

}

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

psaq

ALE

EA

CRYST细

R2..

10k•-

--■■

22p

D2:

LED-8F

ftTS^51

LCD1

U«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*

■22

■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

#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)

{

uintx,y;

for(x=100;x>1;x--)for(y=z;y>1;y--);

}

voidwrite_com(ucharcom)

{

lcdrs=0;

P2=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidwrite_date(uchardate)

{

lcdrs=1;

P2=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

voidinit_lcd()

{

lcden=0;

lcdrw=0;

write_com(0x38);

write_com(0x01);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

for(i=0;i<16;i++)

{write_date(t0[i]);delay(0);

}write_com(0x80+0x40);for(i=0;i<16;i++)

{

write_date(t1[i]);delay(0);

}

}

//温度采集模块

voidtmpDelay(intnum)//延时函数

{while(num--);

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

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

voidInit_DS18B20()〃初始化ds1820

{

unsignedcharx=0;

DQ=1;〃DQ复位

tmpDelay(8);//稍做延时

DQ=0;//单片机将DQ拉低

tmpDelay(80);//精确延时大于480us

DQ=1;//拉高总线

tmpDelay(14);

x=DQ;//稍做

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

当前位置:首页 > 表格模板 > 合同协议

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

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