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

📄 main.c

📁 用c语言编的时钟芯片DS12c887驱动程序
💻 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 + -