文档库 最新最全的文档下载
当前位置:文档库 › 飞思卡尔LM75温度传感器

飞思卡尔LM75温度传感器

#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */



#define ser PTGD_PTGD2 //595引脚定义
#define srclk PTGD_PTGD1
#define rclk PTGD_PTGD0
#define LEDEN PTGD_PTGD3 //74HC138使能端
#define SDA PTCD_PTCD1 //LM75接口
#define SCLK PTCD_PTCD0

void shift595(unsigned char a);
void delay(unsigned char x);
void Write_Data(unsigned char data);
unsigned char Read_data(void) ;
void yingda(unsigned char i) ;
void wait();
void start_lm75();
void end_lm75();

unsigned char LED[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极段码表说明
unsigned char LED_dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点的共阳极段码表
unsigned char LED_LCA[]={0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e};//位码
unsigned char res[4]={0};


void main(void)
{ unsigned char i,temp_l,temp_h,temp1,temp2,temp3,temp4;
unsigned int x,y,temp, z ;
PTDDD=0xfe; //D口控制位码
PTGDD=0xff; //G口控制段码
PTCDD=0x03; //SDA SCLK都为输出
LEDEN=1;
PTDD=0x00;
i=0;

EnableInterrupts; /* enable interrupts */

* start_lm75(); //设置配置寄存器
Write_Data(0x90);
wait();
Write_Data(0x01);
wait();
Write_Data(0x00);
end_lm75();
*/

for(;;)
{


start_lm75(); //读温度
Write_Data(0x90);
wait();
Write_Data(0x00);
wait();
start_lm75();
Write_Data(0x91);
wait();
temp_h=Read_data();
yingda(1);
temp_l=Read_data();
yingda(0);
end_lm75();

x=temp_h;
x<<=3;
temp_l>>=5;
y=x+(unsigned int)temp_l;
z=((float)y)*12.5+0.5;


temp1=z/1000;
temp2=(z%1000)/100;
temp3=(z%100)/10;
temp4=z%10;

res[0]=temp1;
res[1]=temp2;
res[2]=temp3;
res[3]=temp4;

if(i<4)
{if(i!=1)
shift595(LED[res[i]]);
else
shift595(LED_dot[res[i]]);
PTDD=LED_LCA[i];
i++;
}
else i=0;


__RESET_WATCHDOG(); /* feeds the dog */
}
}


void shift595(unsigned char a)
{ unsigned char j;
for(j=0;j<8;j++)
{ if(a&0x80)
ser=1;
else ser=0;
a=a<<1;
srclk=0;
srclk=1;
}
rclk=0;
rclk=1;

}



void delay(unsigned char x)
{
unsigned char i;
for(i=1;i<=5;i++);
__RESET_WATCHDOG();

}


void Write_Data(unsigned char data)
{
unsigned char i;
PTCDD|=0x02;
for(i=0;i<8;i++)
{
if(data&0x80)
SDA=1;
else
SDA=0;
delay(1);
SCLK=1;
delay(1);
SCLK=0;
delay(1);
data<<=1;
}
}

unsigned char Read_data(void)
{
unsigned char i;
unsigned char a,b;
b=0;
PTCDD&=0xfD; //将SDA设为输


for(i=0;i<8;i++)
{ SCLK=1;
delay(1);
b<<=1;
a=SDA;
if(a!=0)
b|=0x01;
else
b&=0xfe;
delay(1);
SCLK=0;
}
PTCDD|=0x02; //将SDA设为输出
return(b);

}


void yingda(unsigned char i)
{ PTCDD|=0x02;
if(i==1)
SDA=0;
else
PTCDD&=0XFD;
delay(1);
SCLK=1;
delay(1);
SCLK=0;
delay(1);

}

void wait()
{
PTCDD&=0xfD; //将SDA设为输入
SCLK=1;
delay(1);
SCLK=0;
delay(1);
PTCDD|=0x02; //将SDA设为输出
}


void start_lm75()
{ PTCDD|=0x02;
SDA=1;
SCLK=1;
delay(1);
SDA=0;
delay(1);
SCLK=0;
}



void end_lm75()
{ PTCDD|=0x02;
delay(1);
SDA=0;
SCLK=1;
delay(1);
SDA=1;
delay(1);
}

相关文档
相关文档 最新文档