sbit DS18B20_DATA=P3^7;
sbit BUZZ=P1^0;
//************************常量数组(段码表)声明*********************
uint8 code SegCodeTable[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//****************************全局变量声明***************************
int Temperature;
//****************************函数原型声明***************************
void DS18B20Init();
void DS18B20BitWrite(bit Bit);
bit DS18B20BitRead();
void DS18B20ByteWrite(uint8 Byte);
uint8 DS18B20ByteRead();
void GetTemperature();
void DispTemperature();
void Delay(uint16 ms);
void AlarmCheck();
//*******************************主函数******************************
void main()
{
while(1)
{
GetTemperature(); //采集当前温度
DispTemperature(); //显示当前温度
AlarmCheck();
}
}
//*************************DS18B20初始化函数*************************
void DS18B20Init()
{
uint16 i;
while(1)
{
DS18B20_DATA=0;
i=640;
while(–i); //延时800us(STC12C5A60S2,11.0592MHz,代码5级优化)
DS18B20_DATA=1;
i=56;
while(–i); //延时70us
if(DS18B20_DATA1) continue; //无响应则重发复位脉冲
i=224;
while(–i); //延时280us
if(DS18B20_DATA1) break; //复位成功
}
i=160;
while(–i); //延时200us
}
//***********************DS18B20位写操作函数*************************
void DS18B20BitWrite(bit Bit)
{
uint16 i;
DS18B20_DATA=0;
i=4;
while(–i); //延时5us
DS18B20_DATA=Bit; //发送1位数到DS18B20
i=48;
while(–i); //延时60us
DS18B20_DATA=1;
}
//**********************DS18B20位读操作函数**************************
bit DS18B20BitRead()
{
bit temp;
uint16 i;
DS18B20_DATA=0;
i=4;
while(–i); //延时5us
DS18B20_DATA=1;
i=4;
while(–i); //延时5us
temp=DS18B20_DATA; //读来自DS18B20的1位数
i=48;
while(–i); //延时60us
return temp;
}
//**********************DS18B20字节写操作函数************************
void DS18B20ByteWrite(uint8 Byte)
{
uint8 i;
for(i=0;i<8;i++) //一共发送8位
{
if( Byte&0x01==1 ) //先发最低位
DS18B20BitWrite(1); //发送1
else
DS18B20BitWrite(0); //发送0
Byte>>=1;
}
}
//**********************DS18B20字节读操作函数************************
uint8 DS18B20ByteRead()
{
uint8 i,temp=0;
for(i=0;i<8;i++) //一共读8位
{
temp>>=1; //字节变量右移
if(DS18B20BitRead()1) //读取1位数据并存入临时变量temp中
temp|=0x80; //temp最高位置1
}
return temp; //返回读到的8位数
}
//*****************************温度采集函数**************************
void GetTemperature()
{
uint8 Buff[2],i;
DS18B20Ini
STC89C52RC单片机额外篇 06 - 认识高内聚、低耦合的模块化编程_单片机关于模块间解决耦合问题
最新推荐文章于 2024-11-12 13:35:26 发布