?? main.c
字號(hào):
/*
main.c
LM75A數(shù)字溫度計(jì)
*/
#include "Disp.h"
#include "I2C.h"
#include <reg51.h>
#include <string.h>
/*
函數(shù):Delay()
功能:延時(shí)1ms~65.536s
參數(shù):
t>0時(shí),延時(shí)(t*0.001)s
t=0時(shí),延時(shí)65.536s
*/
void Delay(unsigned int t)
{
do
{
TH0 = 0xFC;
TL0 = 0x66;
TR0 = 1;
while ( !TF0 );
TR0 = 0;
TF0 = 0;
} while ( --t != 0 );
}
/*
函數(shù):SysInit()
功能:系統(tǒng)初始化
*/
void SysInit()
{
TMOD &= 0xF0;
TMOD |= 0x01; //設(shè)置T0為16位定時(shí)器
DispInit(); //數(shù)碼管掃描顯示初始化
I2C_Init(); //初始化I2C總線
}
/*
函數(shù):LM75A_GetTemp
功能:讀出LM75A的溫度值
返回:LM75A溫度寄存器的數(shù)值(乘以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; //去掉無(wú)關(guān)位
return t;
}
/*
函數(shù):ByteToStr()
功能:字節(jié)型變量c轉(zhuǎn)換為十進(jìn)制字符串
*/
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';
}
/*
函數(shù):DispTemp()
功能:在數(shù)碼管上顯示出溫度值
參數(shù):
t:補(bǔ)碼,除以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; //符號(hào)位
unsigned char i; //整數(shù)部分
unsigned char d; //小數(shù)部分
unsigned char x; //臨時(shí)變量
//分離出符號(hào)
s = 0;
if ( t < 0 )
{
s = 1;
t = -t;
}
//分離出整數(shù)和小數(shù)部分
i = t / 8;
d = t % 8;
//整數(shù)部分轉(zhuǎn)換成字符串
ByteToStr(buf,i);
x = 4 - strlen(buf);
//清除所有顯示
DispClear();
//顯示符號(hào)
if ( s ) DispChar(x,'-');
x++;
//顯示整數(shù)部分
DispStr(x,buf);
//顯示小數(shù)點(diǎn)
DispDotOn(4);
//顯示小數(shù)部分
DispStr(5,Tab[d]);
}
void main()
{
int t;
SysInit();
for (;;)
{
t = LM75A_GetTemp();
DispTemp(t);
Delay(1000);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -