📄 main.c
字号:
/*
main.c
LM75A数字温度计
*/
#include "Disp.h"
#include "I2C.h"
#include <reg51.h>
#include <string.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;
}
/*
函数:ByteToStr()
功能:字节型变量c转换为十进制字符串
*/
void ByteToStr(unsigned char idata *s, unsigned char c)
{
code unsigned char Tab[] = {100,10};
unsigned char i;
unsigned char t;
for ( i=0; i<2; i++ )
{
t = c / Tab[i];
*s++ = '0' + t;
c -= t * Tab[i];
}
*s++ = '0' + c;
*s = '\0';
}
/*
函数:DispTemp()
功能:在数码管上显示出温度值
参数:
t:补码,除以8以后才是真正温度值
*/
void DispTemp(int t)
{
code unsigned char Tab[8][4] =
{
"000",
"125",
"250",
"375",
"500",
"625",
"750",
"875"
};
unsigned char buf[4];
bit s; //符号位
unsigned char i; //整数部分
unsigned char d; //小数部分
unsigned char x; //临时变量
//分离出符号
s = 0;
if ( t < 0 )
{
s = 1;
t = -t;
}
//分离出整数和小数部分
i = t / 8;
d = t % 8;
//整数部分转换成字符串
ByteToStr(buf,i);
x = 4 - strlen(buf);
//清除所有显示
DispClear();
//显示符号
if ( s ) DispChar(x,'-');
x++;
//显示整数部分
DispStr(x,buf);
//显示小数点
DispDotOn(4);
//显示小数部分
DispStr(5,Tab[d]);
}
void main()
{
int t;
SysInit();
for (;;)
{
t = LM75A_GetTemp();
DispTemp(t);
Delay(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -