#include"reg52.h"
#include "temp.h"
#include"xianshi.h"
#include "fmq.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 DisPlayDate[8];
void datapros(int temp)
{
float tp;
if(temp<0)
{
DisPlayDate[0] = '-';
temp = temp-1;
temp=~temp;
tp =temp;
temp = tp*0.0625*100+0.5;//100为了保留两位小数
}
else
{
DisPlayDate[0] = '+';
tp = temp;
temp = tp*0.0625*100+0.5;//100为了保留两位小数
}
DisPlayDate[1] = temp/10000;
DisPlayDate[2] = temp%10000/1000;
DisPlayDate[3] = temp%1000/100;
DisPlayDate[4] = temp%100/10;
DisPlayDate[5] = temp%10;
if(temp/100>32)
{
beep();
}
lcd_w_cmd(0x82);
lcd_w_dat('0'+DisPlayDate[1]);
lcd_w_cmd(0x83);
lcd_w_dat('0'+DisPlayDate[2]);
lcd_w_cmd(0x84);
lcd_w_dat('0'+DisPlayDate[3]);
lcd_w_cmd(0x85);
lcd_w_dat('.');
lcd_w_cmd(0x86);
lcd_w_dat('0'+DisPlayDate[4]);
lcd_w_cmd(0x87);
lcd_w_dat('0'+DisPlayDate[5]);
}
void main()
{
init();
lcd_w_cmd(0x88);
lcd_w_dat('c');
while(1)
{
datapros(ds18b20readtemp());
}
}
#include "temp.h"
void delay1ms(uint y)
{
uint x;
for(;y>0;y--)
{
for(x=100;x>0;x--);
}
}
uchar DS18B20init()
{
uchar i=0;
DSPORT = 0;
i=70;
while(i--);//642us 480~960之间
DSPORT = 1;
i = 0;
while(DSPORT)
{
delay1ms(1);
i++;
if(i>5)
{
return 0;
}
}
return 1;//1为初始化成功,0为初始化失败
}
void ds18b20_write(uchar dat) //写字节函数
{
uchar i,j;
for(j=0;j<8;j++)
{
DSPORT = 0;
i++;
DSPORT = dat&0x01;
i=6;
while(i--);//大约68us
DSPORT = 1;
dat>>=1;
}
}
uchar ds18b20_read()
{
uint i,j;
uchar bi,byte;
for(j=8;j>0;j--)
{
DSPORT = 0;
i++;
DSPORT = 1;
i++;
i++;
bi = DSPORT;
byte = (byte>>1)|(bi<<7);
i = 4;
while(i--);
}
return byte;
}
void ds18b20change()
{
DS18B20init();
delay1ms(1);
ds18b20_write(0xcc);
ds18b20_write(0x44);
}
void ds18b20ReadTempCom()//发送温度转化
{
DS18B20init();
delay1ms(1);
ds18b20_write(0xcc);
ds18b20_write(0xbe);
}
int ds18b20readtemp()
{
int temp=0;
uchar tmh,tml;
ds18b20change();
ds18b20ReadTempCom();
tml = ds18b20_read();
tmh = ds18b20_read();
temp = tmh;
temp<<=8;
temp |= tml;
return temp;
}
#ifndef _TEMP_H
#define _TEMP_H
#include<reg52.h>
#ifndef uchar
#define uchar unsigned char
#endif
#ifndef uint
#define uint unsigned char
#endif
sbit DSPORT = P3^7;
int ds18b20readtemp();
#endif
#include"xianshi.h"
void delay(unsigned int k)
{
while(k--);
}
unsigned char lcd_r_start()
{
unsigned char s;
RW = 1;
delay(2);
RS = 0;
delay(2);
EN = 1;
delay(2);
s = P0;
delay(2);
EN = 0;
delay(2);
return s;
}
void lcd_w_cmd(unsigned char com)
{
unsigned char i;
do
{
i=lcd_r_start();
i&=0x80;
delay(2);
}while(i!=0);
RW = 0;
delay(2);
RS = 0;
delay(2);
EN = 1;
delay(2);
P0 = com;
delay(2);
EN = 0;
delay(2);
}
void lcd_w_dat(unsigned char dat)
{
unsigned char i;
do
{
i=lcd_r_start();
i&=0x80;
delay(2);
}while(i!=0);
RW = 0;
delay(2);
RS = 1;
delay(2);
EN = 1;
delay(2);
P0 = dat;
delay(2);
EN = 0;
delay(2);
}
void init()
{
lcd_w_cmd(0x38);
lcd_w_cmd(0x0c);
lcd_w_cmd(0x01);
lcd_w_cmd(0x06);
lcd_w_cmd(0x80);
}
#ifndef _XIANSHI_H
#define _XIANSHI_H
#include"reg52.h"
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
void init();
unsigned char lcd_r_start();
void lcd_w_cmd(unsigned char com);
void lcd_w_dat(unsigned char dat);
void delay(unsigned int k);
#endif
#include"fmq.h"
void delayws(unsigned int k)
{
while(k--);
}
void beep()
{
unsigned int i,j;
for(i=0;i<250;i++)
{
bp=0;
delayws(150);
bp=1;
delayws(150);
}
for(j=0;j<100;j++)
{
bp=0;
delayws(300);
bp=1;
delayws(300);
}
}
#ifndef _FMQ_H
#define _FMQ_H
#include"reg52.h"
sbit bp=P1^5;
void beep();
void delay(unsigned int k);
#endif
|