main.c

来自「温度传感器ds18b20的操作代码」· C语言 代码 · 共 105 行

C
105
字号
#define P_Watchdog_Clear		(volatile unsigned int *)0x7012
extern int display(float data);
int main(void)
{
        unsigned int temp=0;
        float fTemp=0.0;
        temp = DS18B20_Initial();                 //初始化DS18B20
        fTemp = DS18B20_ReadTemp();               //进行一次测温并读取测量温度值
        while(1)
        {
                 *P_Watchdog_Clear = 0x0001;
        }
}
//=====================================================================
//语法格式:   float DS18B20_ReadTemp(void)
//实现功能:   启动一次DS18B20测温,并读取测温结果,以浮点数返回
//             在本函数中,启动测温后在程序里面作了等待,以待测DS18B20
//             完成本次测温转换如用户觉得不合适,可对本函数进行个性化的
//             修改,以适应自己的应用需求
//参数:       无
//返回值:     测温值,浮点数  以摄氏度为单位
//=====================================================================
float DS18B20_ReadTemp(void)
{
        int uiTemp=0;
        float fTemp=0.0;
        unsigned int Data[9];
        F_18B20_SetSystemCLK();
        if(F_18B20_Reset())
        {
                 DS18B20_WriteByte(0xcc);       //Skip ROM
                 DS18B20_WriteByte(0x44);       //Start one time conver
                 F_18B20_Delay1();              //延时750ms用来完成温度转换
                 while(F_18B20_Read_DQ()==0)    //wait for converting OK
                 {
                           uiTemp++;
                 }
                 F_18B20_Reset();
                 DS18B20_WriteByte(0xcc);       //Skip ROM
                 DS18B20_WriteByte(0xbe);       //Read Scratchpad
                 for(uiTemp=0;uiTemp<9;uiTemp++)
                 {
                           Data[uiTemp] = DS18B20_ReadByte();
                 }
                 F_18B20_Reset();
                 uiTemp = (Data[0]>>8)|Data[1];
                 fTemp = (float)uiTemp;
                 fTemp = fTemp/16;
                 display(fTemp);
        }
       F_18B20_RsuSystemCLK();
        return fTemp;
}
//=====================================================================
//语法格式:   unsigned int DS18B20_Initial(void)
//实现功能:   DS18B20初始化
//                       包括对端口的初始化,以及对DS18B20进行一次复位(总线)
//参数:            无
//返回值:      初始化结果,返回0表示初始化失败
//=====================================================================
unsigned int DS18B20_Initial(void)
{
        unsigned int uiTemp=0;
        F_18B20_SetSystemCLK();
        F_18B20_Initial_IO();
        uiTemp = F_18B20_Reset();
        F_18B20_RsuSystemCLK();
        return uiTemp;
}
//=====================================================================
//语法格式:   void DS18B20_WriteByte(unsigned int Data)
//实现功能:   DS18B20字节写入子程序
//                       无需修改,实际上是属于整合的程序,供其它的API调用
//参数:            Data       要写入的数值,低八位有效
//返回值:      无
//=====================================================================
void DS18B20_WriteByte(unsigned int Data)
{
        unsigned int i;
        for(i=0;i<8;i++)
        {
                 if(Data&0x0001)
                           F_18B20_Write_1();
                 else
                           F_18B20_Write_0();
                 Data = Data>>1;
        }
}
//=====================================================================
//语法格式:   unsigned int DS18B20_ReadByte(void)
//实现功能:   DS18B20字节读出子程序
//                       无需修改,实际上是属于整合的程序,供其它的API调用
//参数:            无
//返回值:      读出的字节数据,低八位有效
//=====================================================================
unsigned int DS18B20_ReadByte(void)
{
        unsigned int i,Data=0;
        for(i=0;i<8;i++)
        {
               Data = Data>>1;  
               Data = Data|F_18B20_Read_DQ();
        }
        return Data;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?