#include “reg52.h”
#include “absacc.h”
#include “onewire.h”
unsigned char code SMG_NoDot[18] = {0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,
0xc0,0x86,0x8e,0xbf,0x7f};
unsigned char code SMG_IsDot[10] = {0x40,0x79,0x24,
0x30,0x19,0x12,0x02,0x78,0x00,0x10};
unsigned int T_dat;
void Delay(unsigned int t);
void DelaySMG(unsigned int t);
void DisplaySMG_Bit(unsigned char pos, unsigned char value);
void DisplaySMG_Temperature(unsigned int dat);
void Read_Temperature();
void main()
{
while(1)
{
Read_Temperature();
DisplaySMG_Temperature(T_dat);
}
}
void Delay(unsigned int t)
{
while(t–)
{
DisplaySMG_Temperature(T_dat);
}
}
void DelaySMG(unsigned int t)
{
while(t–);
}
void DisplaySMG_Bit(unsigned char pos, unsigned char value)
{
XBYTE[0xE000] = 0xff;
XBYTE[0xC000] = 0x01 << pos;
XBYTE[0xE000] = value;
}
void DisplaySMG_ALL(unsigned char value)
{
XBYTE[0xE000] = value;
XBYTE[0xC000] = 0xff;
}
void DisplaySMG_Temperature(unsigned int dat)
{
DisplaySMG_Bit(7, SMG_NoDot[dat%10]);
DelaySMG(100);
DisplaySMG_Bit(6, SMG_IsDot[(dat/10)%10]);
DelaySMG(100);
DisplaySMG_Bit(5, SMG_NoDot[(dat/100)%10]);
DelaySMG(100);
DisplaySMG_ALL(0xff);
}
void Read_Temperature()
{
unsigned char LSB,MSB ;
Init_DS18B20();
Write_DS18B20(0xCC);
Write_DS18B20(0x44);
Delay(1000);
Init_DS18B20();
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);
LSB = Read_DS18B20();
MSB = Read_DS18B20();
Init_DS18B20();
T_dat = 0x0000;
T_dat = MSB;
T_dat <<= 8;
T_dat = T_dat | LSB;
//temp>>=4;
if((T_dat & 0xf800) == 0x0000)
{
T_dat >>= 4;
T_dat = T_dat*10;
T_dat = T_dat + (LSB&0x0f)*0.625;
}
}