#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7; sbit P2_0=P2^0; sbit k2=P2^2; sbit k4=P2^4; sbit k3=P2^3; uchar timp,F=0; float c; uchar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; uchar b[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; void delay5(uchar n) { do { _nop_(); _nop_(); _nop_(); n--; } while(n); } void init_DS18B20() { uchar x=0; DQ=0; delay5(120); DQ=1; delay5(16); delay5(80); } uchar readbyte() { uchar i=0; uchar date=0; for(i=8;i>0;i--) { DQ=0; delay5(1); DQ=1; date>>=1; if(DQ) date|=0x80; delay5(11); } return(date); } void writebyte(uchar dat) { uchar i=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay5(12); DQ=1; dat>>=1; delay5(5); } } uchar retemp() { uchar a,b,tt; uint t; init_DS18B20(); writebyte(0xCC); writebyte(0x44); init_DS18B20(); writebyte(0xCC); writebyte(0xBE); a=readbyte(); b=readbyte(); t=b; t<<=8; t=t|a; if((t&0xf800)!=0xf800) { F=0; c=t*0.0625; tt=t*0.0625; timp=t*0.625-tt*10; } else { F=1; t=(~t)+1; c=t*0.0625; tt=t*0.0625; timp=t*0.625-tt*10; } return tt; } void main() { uchar i,temp; delay5(1000); while(1) { temp=retemp(); if(c>=25&&F==0) P2_0=0; else P2_0=1; for(i=0;i<15;i++) { k2=1;k3=1;k4=1; if(F==0) P0=a[temp/100]; else P0=a[10]; delay5(1000); // P2=0xfb;//11111011,0xfb k2=0;k3=1;k4=1; P0=a[temp%100/10]; delay5(1000); //P2=0xf7;//11110111,0xf7 k2=1;k3=0;k4=1; P0=b[temp%10]; delay5(1000); //P2=0xf3;//11110011,0xf3 k2=0;k3=0;k4=1; P0=a[timp]; delay5(1000); } if(c>=25&&F==0) P2_0=1; else P2_0=1; } }在这个代码的基础上利用串口把数据发送到电脑上的串口助手
时间: 2023-08-04 07:06:16 浏览: 176
好的,我帮您修改一下程序,添加串口通信代码,您可以将数据发送到电脑上的串口助手中:
```
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;
sbit P2_0=P2^0;
sbit k2=P2^2;
sbit k4=P2^4;
sbit k3=P2^3;
uchar timp,F=0;
float c;
uchar a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar b[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
void delay5(uchar n)
{
do
{
_nop_();
_nop_();
_nop_();
n--;
} while(n);
}
void init_DS18B20()
{
uchar x=0;
DQ=0;
delay5(120);
DQ=1;
delay5(16);
delay5(80);
}
uchar readbyte()
{
uchar i=0;
uchar date=0;
for(i=8;i>0;i--)
{
DQ=0;
delay5(1);
DQ=1;
date>>=1;
if(DQ)
date|=0x80;
delay5(11);
}
return(date);
}
void writebyte(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay5(12);
DQ=1;
dat>>=1;
delay5(5);
}
}
uchar retemp()
{
uchar a,b,tt;
uint t;
init_DS18B20();
writebyte(0xCC);
writebyte(0x44);
init_DS18B20();
writebyte(0xCC);
writebyte(0xBE);
a=readbyte();
b=readbyte();
t=b;
t<<=8;
t=t|a;
if((t&0xf800)!=0xf800)
{
F=0;
c=t*0.0625;
tt=t*0.0625;
timp=t*0.625-tt*10;
}
else
{
F=1;
t=(~t)+1;
c=t*0.0625;
tt=t*0.0625;
timp=t*0.625-tt*10;
}
return tt;
}
void init_uart()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
}
void send_data(uchar dat)
{
SBUF=dat;
while(!TI);
TI=0;
}
void main()
{
uchar i,temp;
delay5(1000);
init_uart(); //初始化串口
while(1)
{
temp=retemp();
if(c>=25&&F==0)
P2_0=0;
else
P2_0=1;
for(i=0;i<15;i++)
{
k2=1;k3=1;k4=1;
if(F==0)
P0=a[temp/100];
else
P0=a[10];
delay5(1000);
k2=0;k3=1;k4=1;
P0=a[temp%100/10];
delay5(1000);
k2=1;k3=0;k4=1;
P0=b[temp%10];
delay5(1000);
k2=0;k3=0;k4=1;
P0=a[timp];
delay5(1000);
}
if(c>=25&&F==0)
P2_0=1;
else
P2_0=1;
//将温度值发送到串口助手
printf("Temperature is: %.2f\r\n", c);
}
}
```
注意:这里添加了头文件 `stdio.h`,需要在编译器中设置支持此头文件。另外,串口助手的波特率需要与代码中的波特率一致,这里设置为 9600。
阅读全文