《main.c》
# include"1602.h"
#include<intrins.h>
#include"delay.h"
sbit DQ=P3^7;
unsigned char time;
unsigned char TD,TN;
bit DS18B20_INIT(void)
{
bit DS18B20_OK;
DQ=1;
for(time=0;time<2;time++);
DQ=0;
for(time=0;time<200;time++);
DQ=1;
for(time=0;time<10;time++);
DS18B20_OK=DQ;
for(time=0;time<200;time++);
return DS18B20_OK;
}
unsigned char Read_DS18B20_Byte(void)
{
unsigned char i;
unsigned char value;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
_nop_();
DQ=1;
for(time=0;time<2;time++);
value>>=1;
if(DQ) value|=0x80;
for(time=0;time<8;time++);
}
return value;
}
void Write_DS18B20_Byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
DQ=dat&0x01;
for(time=0;time<10;time++);
DQ=1;
for(time=0;time<1;time++);
dat>>=1;
}
for(time=0;time<4;time++);
}
void ReadyRead(void)
{
DS18B20_INIT();
Write_DS18B20_Byte(0xcc);
Write_DS18B20_Byte(0x44);
delayxms(200);
DS18B20_INIT();
Write_DS18B20_Byte(0xcc);
Write_DS18B20_Byte(0xbe);
}
void main (void)
{
unsigned char TH,TL;
LcdInt();
DS18B20_INIT();
while(1)
{
ReadyRead();
TL=Read_DS18B20_Byte();
TH=Read_DS18B20_Byte();
TN=(TH<<4)+(TL>>4);
TD=(TL&0x0f)*10/16;
WriteAddress(0x00);
WriteData(TN/10+0x30);
WriteData(TN%10+0x30);
WriteData('.');
WriteData(TD+0x30);
delayxms(500);
}
}
<1602.c>
#include"1602.h"
bit BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
void Write_com (unsigned char dictate)
{
while(BusyTest==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void WriteAddress(unsigned char x)
{
Write_com(x|0x80);
}
void WriteData (unsigned char y)
{
RS=1;
RW=0;
E=0;
_nop_();
_nop_();
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void LcdInt(void)
{
delayxms(15);
Write_com(0x38);
delayxms(5);
Write_com(0x38);
delayxms(5);
Write_com(0x38);
delayxms(5);
Write_com(0x0c);
delayxms(5);
Write_com(0x06);
delayxms(5);
Write_com(0x01);
delayxms(5);
}
void Print_1602(unsigned char Address,unsigned char *str)
{
Write_com(Address);
while(*str!='\0')
{
WriteData(*str++);
}
}
<1602.h>
#ifndef __1602_H_
#define __1602_H_
#include <reg51.h>
#include <intrins.h>
#include "delay.h"
extern void LcdInt(void);
extern void WriteAddress (unsigned char x);
extern void Write_com (unsigned char dictate);
extern void WriteData (unsigned char y);
extern bit BusyTest(void);
sbit BF=P0^7;
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
#endif
<delay.c>
# include"delay.h"
void delay1ms(void)
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}
void delayxms(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
delay1ms();
}
<dealy.h>
#ifndef __DELAY_H_
#define __DELAY_H_
extern void delayxms(unsigned int n);
extern void delay1ms(void);
#endif
# include"1602.h"
#include<intrins.h>
#include"delay.h"
sbit DQ=P3^7;
unsigned char time;
unsigned char TD,TN;
bit DS18B20_INIT(void)
{
bit DS18B20_OK;
DQ=1;
for(time=0;time<2;time++);
DQ=0;
for(time=0;time<200;time++);
DQ=1;
for(time=0;time<10;time++);
DS18B20_OK=DQ;
for(time=0;time<200;time++);
return DS18B20_OK;
}
unsigned char Read_DS18B20_Byte(void)
{
unsigned char i;
unsigned char value;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
_nop_();
DQ=1;
for(time=0;time<2;time++);
value>>=1;
if(DQ) value|=0x80;
for(time=0;time<8;time++);
}
return value;
}
void Write_DS18B20_Byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ=1;
_nop_();
DQ=0;
DQ=dat&0x01;
for(time=0;time<10;time++);
DQ=1;
for(time=0;time<1;time++);
dat>>=1;
}
for(time=0;time<4;time++);
}
void ReadyRead(void)
{
DS18B20_INIT();
Write_DS18B20_Byte(0xcc);
Write_DS18B20_Byte(0x44);
delayxms(200);
DS18B20_INIT();
Write_DS18B20_Byte(0xcc);
Write_DS18B20_Byte(0xbe);
}
void main (void)
{
unsigned char TH,TL;
LcdInt();
DS18B20_INIT();
while(1)
{
ReadyRead();
TL=Read_DS18B20_Byte();
TH=Read_DS18B20_Byte();
TN=(TH<<4)+(TL>>4);
TD=(TL&0x0f)*10/16;
WriteAddress(0x00);
WriteData(TN/10+0x30);
WriteData(TN%10+0x30);
WriteData('.');
WriteData(TD+0x30);
delayxms(500);
}
}
<1602.c>
#include"1602.h"
bit BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
void Write_com (unsigned char dictate)
{
while(BusyTest==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void WriteAddress(unsigned char x)
{
Write_com(x|0x80);
}
void WriteData (unsigned char y)
{
RS=1;
RW=0;
E=0;
_nop_();
_nop_();
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void LcdInt(void)
{
delayxms(15);
Write_com(0x38);
delayxms(5);
Write_com(0x38);
delayxms(5);
Write_com(0x38);
delayxms(5);
Write_com(0x0c);
delayxms(5);
Write_com(0x06);
delayxms(5);
Write_com(0x01);
delayxms(5);
}
void Print_1602(unsigned char Address,unsigned char *str)
{
Write_com(Address);
while(*str!='\0')
{
WriteData(*str++);
}
}
<1602.h>
#ifndef __1602_H_
#define __1602_H_
#include <reg51.h>
#include <intrins.h>
#include "delay.h"
extern void LcdInt(void);
extern void WriteAddress (unsigned char x);
extern void Write_com (unsigned char dictate);
extern void WriteData (unsigned char y);
extern bit BusyTest(void);
sbit BF=P0^7;
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^7;
#endif
<delay.c>
# include"delay.h"
void delay1ms(void)
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++);
}
void delayxms(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
delay1ms();
}
<dealy.h>
#ifndef __DELAY_H_
#define __DELAY_H_
extern void delayxms(unsigned int n);
extern void delay1ms(void);
#endif