#include<stdio.h>
#include<string.h>
#include<Regx52.h>
int temperature;
#define HIGH 0x01 // Active High Signal
#define LOW 0x00 // Active Low Signal
#define TRUE 0x01 // Active High State
#define FALSE 0x00 // Active Low State
void ready(void);
void command(int);
void display(char *);
void i2c_stop (void);
void i2c_start (void);
void i2c_write (unsigned char);
unsigned char i2c_read (void);
void convert (unsigned char);
#define DATA P1_6 // Serial data
#define CLOCK P1_7 // Serial clock
void main (void)
{
int tmp;
char str[16];
bit flag = FALSE;
unsigned char ch;
void command (int);
void display (char *);
command(0x3c);
command(0x0c);
command(0x06);
while(1)
{
i2c_start();
i2c_write(0x90);
i2c_write(0xEE);
i2c_stop();
i2c_start();
i2c_write(0x90);
i2c_write(0xAA);
i2c_start();
i2c_write(0x91);
ch = i2c_read();
//ch=0x31;
i2c_stop();
temperature = 0;
convert(ch);
if(flag == FALSE)
{
flag = TRUE;
tmp = temperature;
}
else
{
if(tmp != temperature)
{
tmp = temperature;
}
sprintf(str,"%s%d%s","T:",tmp," Kraadi");
command(0x01);
command(0x80);
display(str);
}
}
}
void command(int a)
{
void ready(void);
ready();
P0=a;
P3_6=0x00;
P3_5=0x00;
P3_7=0x01;
P3_7=0x00;
}
void display(char *str)
{
unsigned int i;
for(i=0;i<=strlen(str)-1;++i)
{
if(i == 16)
command(0xc0);
if(i == 32)
command(0x80);
ready();
P0 = str[i];
P3_6 = 0x01;
P3_5 = 0x00;
P3_7 = 0x01;
P3_7 = 0x00;
}}
void ready(void)
{
P3_7=0x00;
P0=0xff;
P3_6=0x00;
P3_5=0x01;
while(P0_7)
{
P3_7=0x00;
P3_7=0x01;
}
P3_7=0x00;
}
//Delay Servive Routine
void delay_time (void)
{
unsigned int i;
for(i=0;i<100;i++);
}
void i2c_start (void)
{
DATA = HIGH;
delay_time();
CLOCK = HIGH;
delay_time();
DATA = LOW;
CLOCK = LOW;
}
//I2C Stop Function
void i2c_stop (void)
{
unsigned char i;
CLOCK = LOW;
DATA = LOW;
CLOCK = HIGH;
delay_time();
DATA = HIGH;
i = DATA;
}
//I2C Data Write Function
void i2c_write (unsigned char j)
{
unsigned char i;
for(i=0;i<8;i++)
{
DATA = ((j & 0x80) ? 1 : 0);
j <<= 1;
CLOCK = HIGH;
delay_time();
CLOCK = LOW;
}
i = DATA;
CLOCK = HIGH;
delay_time();
CLOCK = LOW;
}
//I2C Data Read Function
unsigned char i2c_read (void)
{
unsigned char i,j;
j = 0;
i = DATA;
for(i=0;i<8;i++)
{
j <<= 1;
CLOCK = HIGH;
j |= DATA;
delay_time();
CLOCK = LOW;
}
return j;
}
//Binary to Decimal Conversion Function
void convert (unsigned char ch)
{
char x;
unsigned char arr[8]={128,64,32,16,8,4,2,1};
if(((ch & 0x80) ? 1 : 0)==0)
{
for(x=0;x<8;++x)
{
if(((ch & 0x80) ? 1 : 0))
temperature = temperature + arr[x] * ((ch & 0x80) ? 1 : 0);
ch <<= 1;
}
}
else
{
ch=~ch;
ch=ch+1;
for(x=0;x<8;++x)
{
if(((ch & 0x80) ? 1 : 0))
temperature = temperature + arr[x] * ((ch & 0x80) ? 1 : 0);
ch <<= 1;
}
temperature=-temperature;
}}