谁有AT89C51 与DS18S20的数字温度计的电路图 及程序 有可以控制的报警器更好 本文介绍了基于AT89C51单片机

qq:476505757
2024-12-17 15:35:25
推荐回答(3个)
回答1:

已发 请查收 这个程序我做个几个板子了 很好用

回答2:

这是基于数码管的一个ds18b20的程序,希望能帮助到你的
#include
#define uchar unsigned char
#define uint unsigned int

uchar P0_scan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar dis[3];
uchar TEMP;

//管脚定义
sbit dq = P2^6;

/*************** 短延时 ****************/
void delay(uint s)
{
while(s--);
}

/**************** 延时1ms *****************/
void delay_1ms(unsigned int t)
{
unsigned char i,j;
for(t;t>0;t--)
{
for(i=34;i>0;i--)
for(j=13;j>0;j--);
}
}

/****************** DS18B20 *********************/
void rst(void)
{
dq=1;
delay(8);
dq=0;
delay(80);
dq=1;
delay(14);
delay(20);
}

uchar readbyte(void)
{
uchar i=0;
uchar date=0;
for(i=8;i>0;i--)
{
dq=0;
date>>=1;
dq=1;
if(dq) date|=0x80;
delay(4);
}
return(date);
}

void writebyte(uchar date)
{
uchar i=0;
for(i=8;i>0;i--)
{
dq=0;
dq=date&0x01;
delay(5);
dq=1;
date>>=1;
}
}
uchar readtemp(void)
{
uchar a=0;
uchar b=0;
uchar temp1;
uint t=0;
float tt;
rst();
writebyte(0xcc);
writebyte(0x44);
rst();
writebyte(0xcc);
writebyte(0xbe);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
tt=t*0.5;
temp1=(uchar)tt;
return(temp1);
}

/************************ 主函数 *************************/

void main()
{
while(1)
{
TEMP = readtemp()-5; //读出温度值
dis[0]=TEMP%10;dis[1]=(TEMP/10)%10;dis[2]=TEMP/100;

P0 = P0_scan[dis[0]];
P2 = 0xf7;
delay_1ms(5);
P2 = 0xff;

P0 = P0_scan[dis[1]];
P2 = 0xfb;
delay_1ms(5);
P2 = 0xff;

P0 = P0_scan[dis[2]];
P2 = 0xfd;
delay_1ms(5);
P2 = 0xff;
}
}

回答3:

你好,能不能也发我一份啊?我的QQ:1269449040