⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 keilc关于LM75A温度计的使用例程
💻 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 + -