/*liyongchao Y.C.LI*/
/*HeBi HeNan china*/
/*E_mail :liyongchao0504@163.com*/
/*ver 0.0.1*/
#include <reg51.h>
#include <intrins.h>
#define delay10us() _nop_();_nop_();_nop_();_nop_();_nop_(); \
_nop_();_nop_();_nop_();_nop_(); _nop_()
#define uchar unsigned char
sbit DS18B20=P3^2;
sbit BIT7=ACC^7;
bit Error_DS18B20=0;
sfr16 DPTR=0X82;
bit DQ;
/*定义数码管显示字符跟数字的对应数组关系*/
uchar code mun_to_char[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
/* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
#define dp 0x7f //小数点值
/*定义需要点亮的数码管*/
uchar code sled_bit_table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar data sled_data[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; /*0-7号SLED缓冲值*/
uchar data led_lighten_bit=0 ; /*LED灯点亮标志位0-7*/
uchar SN1,SN0;
void delay_1ms(unsigned int x)
{uchar j;
while (x--)
for(j=0;j<124;j++)
{;}
}
void Delay15(n) //延时n个15us
unsigned char n; //延时参数
{
do{
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
_nop_ ();
n--;
}while(n);
}
// 功能: 初始化DS18B20,读存在脉冲,无存在脉冲则置位错误标志
// 输入: 无
// 返回: 无
void RST18B20(void)
{
DS18B20=0; //复位脉冲
Delay15(32); // 延时540 μs
DS18B20=1; //恢复
Delay15(2); // 延时30 μs
Error_DS18B20=DS18B20; //读存在脉冲
Delay15(30); // 延时450us
}
// 功能:写DS18B20
//输入:待写字节
// 返回:无
void WR18B20(d)
{
unsigned char i; //循环变量
for(i=8;i>0;i--)
{
DS18B20=0; //起始
DQ=d&0x01;
DS18B20=DQ; //送出数据
Delay15(3) ; //延时45us
DS18B20=1; //1bit 数据传输完毕,回到初始状态
d>>=1;
}
}
// 功能: 读DS18B20
// 输入: 无
// 返回: 读出的1 字节数据
unsigned char RD18B20(void)
{
unsigned char i; //循环变量
ACC=0; // 清ACC
for(i=8;i>0;i--)
{
ACC=ACC>>1; //右移位
DS18B20=0; //起始
_nop_ ();
DS18B20=1; //释放总线
delay10us();
BIT7=DS18B20; //读第i 位
Delay15(3) ; //延时45us
}
return(ACC); //返回1 字节数据
}
// 功能: 启动DS18B20 的1 次温度转换
// 输入: 无
// 返回: 无
void ConvertT(void)
{
RST18B20(); //初始化
WR18B20(0xcc); //Skip R O M ,跳过多传感器识别
WR18B20(0x44); //C onvert T ,启动温度转换
}
void Read_rom(void)
{RST18B20(); //初始化
WR18B20(0X33); //读DS18b20ROM信息
SN0=RD18B20();
SN1=RD18B20();
}
// 功能: 读取DS18B20 并返回温度值
// 输入: 无
// 返回: D PT R -温度值,2 字节
int ReadT(void)
{
RST18B20(); //初始化
WR18B20(0xcc); //skip R O M ,跳过多传感器识别
WR18B20(0xbe); //read scratchpad,读DS18B20暂存器
DPL=RD18B20(); //温度值低位
DPH=RD18B20();//温度值高位
return(DPTR); //返回读出的温度值,2 字节
}
void UART_Init()
{TMOD=0X21;
TH1=0XFD;
TL1=0XFD;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
TR1=1;
TR0=1;
ET0=1;
EA=1;
SCON=0x50;
PCON=0X80;
}
/*liyongchao Y.C.LI*/
/*HeBi HeNan china*/
/*E_mail :liyongchao0504@163.com*/
/*ver 0.0.1*/
void WRITE_SCRATCHPAD() // 写暂存器
{ RST18B20(); //初始化
WR18B20(0xcc); //skip R O M ,跳过多传感器识别
WR18B20(0x4e);
WR18B20(0xff); // 写暂存器TH
WR18B20(0xff); // 写暂存器TL
WR18B20(0x7f); //更改分辨率
}
void READ__SCRATCHPAD() //读暂存器
{uchar i=0;
RST18B20(); //初始化
WR18B20(0xcc); //skip R O M ,跳过多传感器识别
WR18B20(0xbe); //读暂存器内容
do{
SBUF = RD18B20();
while(TI==0);{ TI=0;i++;}
}
while(i<2);
}
void COPY_SCRATCHPAD() //复制暂存器内容到eeprom
{
bit flag;
RST18B20(); //初始化
WR18B20(0xcc); //skip R O M ,跳过多传感器识别
WR18B20(0x48); //复制暂存器内容到eeprom
do{
DS18B20=0; //起始
delay10us();
DS18B20=1; //恢复
flag=DS18B20; //读第i 位
Delay15(3) ; //延时45us
}
while(!flag);
return;
}
void display() interrupt 1 using 3
{ EA=0;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
P2 = 0xff; /*关闭显示*/
P0 = sled_data[led_lighten_bit]; /*输出段码数据到数码管*/
P2 = sled_bit_table[led_lighten_bit]; /*输出位码数据到数码管*/
led_lighten_bit++;
if(led_lighten_bit >=8) led_lighten_bit=0; /*8位数码管全动态输出*/
EA=1;
}
/*liyongchao Y.C.LI*/
/*HeBi HeNan china*/
/*E_mail :liyongchao0504@163.com*/
/*ver 0.0.1*/
void main()
{float tt=0;
bit flag=1;
uchar temp1;
unsigned int temp=0,t=0;
UART_Init();
WRITE_SCRATCHPAD();
//COPY_SCRATCHPAD();
//READ__SCRATCHPAD() ;
READ__SCRATCHPAD() ;
do{
ConvertT();
do{
DS18B20=0; //起始
delay10us();
DS18B20=1; //恢复
flag=DS18B20; //读第i 位
Delay15(3) ; //延时45us
}
while(!flag);
temp=ReadT();
temp1=temp/16;
if(temp1==0xff) temp=~temp+1; //0度以下温度处理
tt=temp*0.0625;
t=tt*10+0.5;
sled_data[0] = mun_to_char[t/100]; //温度的高位
sled_data[1] = mun_to_char[t%100/10]&dp; //温度的个位并显示小数点
sled_data[2] = mun_to_char[t%10]; //温度的小数位
}
while(1);
}
DS18B20 精度可调 数码管输出
3星 · 超过75%的资源 需积分: 16 191 浏览量
2010-12-26
21:47:01
上传
评论
收藏 527KB RAR 举报
hnhblyc
- 粉丝: 8
- 资源: 4