📄 main.c
字号:
/*******************************************************************************
程序名称:LM75温度传感器
硬件接法:SCL接P1.6,SDA接P1.7
运行效果:数码管显示当前温度
*******************************************************************************/
#include "Disp.h"
#include "I2C.h"
#include <reg51.h>
#include <string.h>
#include <stdio.h>
/*
函数:Delay()
功能:延时1ms~65.536s
参数:
t>0时,延时(t*0.001)s
t=0时,延时65.536s
*/
void Delay(unsigned int t)
{
do
{
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while ( !TF0 );
TR0 = 0;
TF0 = 0;
} while ( --t != 0 );
}
/*
函数:SysInit()
功能:系统初始化
*/
void SysInit()
{
TMOD &= 0xF0;
TMOD |= 0x01; //设置T0为16位定时器
DispInit(); //数码管扫描显示初始化
I2C_Init(); //初始化I2C总线
}
/*
函数:LM75A_GetTemp
功能:读出LM75A的温度值
返回:LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)
*/
int LM75A_GetTemp()
{
unsigned char buf[2];
int t;
I2C_Gets(0x90,0x00,2,buf);
t = buf[0];
t <<= 8;
t += buf[1];
t >>= 5; //去掉无关位
return t;
}
/*
函数:DispTemp()
功能:在数码管上显示出温度值
参数:
t:补码,除以8以后才是真正温度值
*/
void DispTemp(int t)
{
bit f = 1;
unsigned char i;
unsigned char c;
float x;
unsigned char s[10];
x = (float)t / 8.0;
sprintf(s,"%g",x);
for ( i=0; i<4; i++ )
{
c = s[i];
if ( c == '\0' ) break;
if ( c == '.' )
{
DispDotOn(i-1);
f = 0;
}
else
{
if ( !f )
{
switch(c)
{
case '3':
c = '0';
break;
case '8':
c = '5';
break;
default:
break;
}
}
DispChar(c);
}
}
if ( f )
{
DispDotOn(i-1);
DispChar('0');
}
}
void main()
{
int t;
SysInit();
for (;;)
{
t = LM75A_GetTemp();
DispClear();
DispTemp(t);
Delay(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -