📄 text1.c
字号:
#include<reg51.h>
#include <string.h>
#include <intrins.h>
sbit P15=P1^5;
sbit DQ=P1^0;
#define COUNT 10
#define NODE_ADDR 64
#define uchar unsigned char
uchar data shidu1,shidu2;
uchar data temp_data[2]={0x00,0x00};
uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
unsigned char buffer[COUNT];
int pointer;
/********************************************************/
void DelayM(unsigned int a);
void DelayM(unsigned int a){//延时函数 1MS/次
unsigned char i;
while( --a != 0){
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
} //i 从0加到125,CPU大概就耗时1毫秒
}
/**********************************************************************/
//延迟函数 11us
void delay(int t)
{
for(;t>0;t--);
}
//18B20复位函数
ow_reset(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();
DQ=0;
delay(50);
DQ=1;
delay(6);
presence=DQ;
}
delay(45);
presence= ~DQ;
}
DQ=1;
}
//18B20写命令函数 向总线上写一个比特
void write_byte(uchar val)
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
DQ=val&0x01;
delay(6);
val=val/2;
}
DQ=1;
delay(1);
}
//18B20读1比特函数,从总线上读取一个字节
uchar read_byte(void)
{
uchar i;
uchar value=0;
for (i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;
_nop_();_nop_();_nop_();_nop_();
DQ=1;_nop_();_nop_();_nop_();_nop_();
if(DQ)value|=0x80;
delay(6);
}
DQ=1;
return(value);
}
//读取温度函数
read_temp()
{
ow_reset();
write_byte(0xCC);
write_byte(0xBE);
temp_data[0]=read_byte();
temp_data[1]=read_byte();
ow_reset();
write_byte(0xCC);
write_byte(0x44);
}
work_temp()
{
uchar n=0;
if (temp_data[1]>127)
{
temp_data[1]=(256-temp_data[1]);
temp_data[0]=(256-temp_data[0]);
n=1;
}
display[4]=temp_data[0]&0x0f;
display[0]=ditab[display[4]];//xiao
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
display[3]=display[4]/100;//+-
display[1]=display[4]%100;//
display[2]=display[1]/10;//shi
display[1]=display[1]%10;//ge
if(!display[3])
{
display[3]=0x00;
if(!display[2])
{
display[2]=0x00;
}
}
if(n)
{
display[3]=0x0a;
}
}
main()
{
P15=1;
ow_reset();
write_byte(0xcc);
write_byte(0x44);
while(1)
{
read_temp();
work_temp();
// buffer[0]=(0x30);
// buffer[1]=(0x31);
// buffer[2]=(0x32);
// buffer[3]=(0x33);
while(pointer<COUNT)
{
buffer[pointer]='A'+pointer;
pointer++;
}
// buffer[0]='S';
buffer[0]=(0x30+display[2]);
buffer[1]=(0x30+display[1]);
buffer[2]=('.');
buffer[3]=(0x30+display[0]);
SCON=0xc0;
TMOD=0x20;
TH1=0xfd;
TR1=1;
ET1=0;
ES=1;
EA=1;
pointer=-1;
TB8=1;
SBUF=NODE_ADDR;
while(pointer<COUNT);
}
}
void send(void) interrupt 4 using 3
{
TI=0;
pointer++;
if(pointer>=COUNT)
return;
else
{
TB8=0;
SBUF=buffer[pointer];
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -