?? tsensor.c
字號:
/* 檢測 EV7事件并清除*/
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) /* EV7 */
{
}
/* 存儲I2C1接收的數據 */
RegValue = I2C_ReceiveData(I2C1) << 8;
/* 關閉應答 */
I2C_AcknowledgeConfig(I2C1, DISABLE);
/* 發送停止狀態位*/
I2C_GenerateSTOP(I2C1, ENABLE);
/* 檢測 EV7事件并清除*/
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) /* EV7 */
{
}
/* 存儲I2C1接收的數據*/
RegValue |= I2C_ReceiveData(I2C1);
/* 返回值 */
return (RegValue >> 5);
}
/*******************************************************************************
* 函數名 : I2C_LM75_ConfReg_Read
* 描述 : 讀STLM75配置寄存器
* 輸入 : 無
* 輸出 : 無
* 返回 : 無
*******************************************************************************/
u8 I2C_LM75_ConfReg_Read(void)
{
u32 RegValue = 0;
/*----- 傳送過程 -----*/
/* 發送I2C1起始狀態位 */
I2C_GenerateSTART(I2C1, ENABLE);
/* 檢測 EV5事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) /* EV5 */
{
}
/* 發送STLM75從設備地址(寫)*/
I2C_Send7bitAddress(I2C1, LM75_Addr, I2C_Direction_Transmitter);
/* 檢測 EV6事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) /* EV6 */
{
}
/* 發送配置寄存器指針數據 */
I2C_SendData(I2C1, LM75_CONF_Reg);
/* 檢測 EV8事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* EV8 */
{
}
/*----- 接收過程 -----*/
/* 發送啟動起始狀態位 */
I2C_GenerateSTART(I2C1, ENABLE);
/* 檢測 EV5事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) /* EV5 */
{
}
/* 發送STLM75從設備地址(讀) */
I2C_Send7bitAddress(I2C1, LM75_Addr, I2C_Direction_Receiver);
/* 檢測 EV6事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) /* EV6 */
{
}
/* 關閉應答 */
I2C_AcknowledgeConfig(I2C1, DISABLE);
/* 發送I2C1停止狀態位 */
I2C_GenerateSTOP(I2C1, ENABLE);
/* 檢測 EV7事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) /* EV7 */
{
}
/* 存儲I2C1接收的數據 */
RegValue = I2C_ReceiveData(I2C1);
/* 返回寄存器值 */
return (RegValue);
}
/*******************************************************************************
* 函數名 : I2C_LM75_ConfReg_Write
* 描述 : 寫STLM75配置寄存器
* 輸入 : 無
* 輸出 : 無
* 返回 : 無
*******************************************************************************/
void I2C_LM75_ConfReg_Write(u8 RegValue)
{
/*----- 傳送過程 -----*/
/* 發送I2C1起始狀態位 */
I2C_GenerateSTART(I2C1, ENABLE);
/* 檢測 EV5事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) /* EV5 */
{
}
/* 發送STLM75從設備地址(寫) */
I2C_Send7bitAddress(I2C1, LM75_Addr, I2C_Direction_Transmitter);
/* 檢測 EV6事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) /* EV6 */
{
}
/* 發送配置寄存器指針數據 */
I2C_SendData(I2C1, LM75_CONF_Reg);
/* 檢測 EV8事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* EV8 */
{
}
/* 發送I2C1數據*/
I2C_SendData(I2C1, RegValue);
/* 檢測 EV8事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* EV8 */
{
}
/* 發送I2C1 停止條件位 */
I2C_GenerateSTOP(I2C1, ENABLE);
}
/*******************************************************************************
* 函數名 : I2C_LM75_ShutDown
* 描述 : 打開或關斷STLM75
* 輸入 : 無
* 輸出 : 無
* 返回 : 無
*******************************************************************************/
void I2C_LM75_ShutDown(FunctionalState NewState)
{
u32 RegValue = 0;
/*----- Transmission Phase -----*/
/* 發送I2C1起始狀態位 */
I2C_GenerateSTART(I2C1, ENABLE);
/* 檢測 EV5事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) /* EV5 */
{
}
/* 發送STLM75從設備地址(寫) */
I2C_Send7bitAddress(I2C1, LM75_Addr, I2C_Direction_Transmitter);
/* 檢測 EV6事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) /* EV6 */
{
}
/* 發送配置寄存器指針數據 */
I2C_SendData(I2C1, LM75_CONF_Reg);
/* 檢測 EV8事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* EV8 */
{
}
/*----- 接收過程 -----*/
/* 發送開始起始位條件 */
I2C_GenerateSTART(I2C1, ENABLE);
/* 檢測 EV5事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) /* EV5 */
{
}
/* 發送STLM75從設備地址(讀) */
I2C_Send7bitAddress(I2C1, LM75_Addr, I2C_Direction_Receiver);
/* 檢測 EV6事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)) /* EV6 */
{
}
/* 關閉應答 */
I2C_AcknowledgeConfig(I2C1, DISABLE);
/* 發送I2C1 停止條件位 */
I2C_GenerateSTOP(I2C1, ENABLE);
/* 檢測 EV7事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED)) /* EV7 */
{
}
/* 存儲I2C1 接收的數據 */
RegValue = I2C_ReceiveData(I2C1);
/*----- 傳送過程 -----*/
/* 發送I2C1起始狀態位 */
I2C_GenerateSTART(I2C1, ENABLE);
/* 檢測 EV5事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) /* EV5 */
{
}
/* 發送STLM75從設備地址(寫) */
I2C_Send7bitAddress(I2C1, LM75_Addr, I2C_Direction_Transmitter);
/* 檢測 EV6事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) /* EV6 */
{
}
/* 發送配置寄存器指針數據 */
I2C_SendData(I2C1, LM75_CONF_Reg);
/* 檢測 EV8事件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* EV8 */
{
}
/* 打開或禁止SD位 */
if (NewState != DISABLE)
{
/* 禁止LM75 */
I2C_SendData(I2C1, RegValue | LM75_SD_Set);
}
else
{
/* 使能LM75 */
I2C_SendData(I2C1, RegValue & LM75_SD_Reset);
}
/* 檢測 EV8件并清除 */
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) /* EV8 */
{
}
/* 發送I2C1停止狀態位 */
I2C_GenerateSTOP(I2C1, ENABLE);
}
/*******************************************************************************
* 函數名 : Thermometer_Temperature
* 描述 : 用攝氏度及華氏度來顯示溫度值
* 輸入 : 無
* 輸出 : 無
* 返回 : 無
*******************************************************************************/
void Thermometer_Temperature(void)
{
if(I2C_LM75_Status() == SUCCESS)
{
TempCelsius_Value = I2C_LM75_Temp_Read();
}
if(TempCelsius_Value <= 1023)
{
/* 正溫度測量值 */
TempCelsius_Display[5] = '+';
TempFahrenheit_Display[5] = '+';
}
else
{
/* 負溫度測量值 */
TempCelsius_Display[5] = '-';
TempFahrenheit_Display[5] = '-';
/* 去除溫度值符號 */
TempCelsius_Value = 0x800 - TempCelsius_Value;
}
/* 計算溫度數字輸出 */
Temp_Decimal = ((TempCelsius_Value & 7) * 1000 / 8);
TempCelsius_Display[10] = (Temp_Decimal / 100) + 0x30;
TempCelsius_Display[11] = ((Temp_Decimal % 100) / 10) + 0x30;
TempCelsius_Display[12] = ((Temp_Decimal % 100) % 10) + 0x30;
TempCelsius_Value >>= 3;
TempCelsius_Display[6] = (TempCelsius_Value / 100) + 0x30;
TempCelsius_Display[7] = ((TempCelsius_Value % 100) / 10) + 0x30;
TempCelsius_Display[8] = ((TempCelsius_Value % 100) % 10) + 0x30;
/* 將溫度轉換為華氏溫度值 */
Temp_Value_Fahrenheit = ((9 * ((TempCelsius_Value * 1000) + Temp_Decimal)) / 5) + 32000;
/* 計算溫度值*/
TempFahrenheit_Display[6] = (Temp_Value_Fahrenheit / 100000) + 0x30;
TempFahrenheit_Display[7] = ((Temp_Value_Fahrenheit % 100000) /10000) + 0x30;
TempFahrenheit_Display[8] = ((Temp_Value_Fahrenheit % 100000) %10000/1000) + 0x30;
TempFahrenheit_Display[10] = ((((Temp_Value_Fahrenheit % 100000) %10000) %1000) /100) + 0x30;
TempFahrenheit_Display[11] = (((((Temp_Value_Fahrenheit % 100000) %10000) %1000) %100) /10) + 0x30;
TempFahrenheit_Display[12] = (((((Temp_Value_Fahrenheit % 100000) %10000) %1000) %100) %10) + 0x30;
/* 將溫度值顯示在LCD中 */
printf("\r\nTemperature is %s",TempCelsius_Display) ;
printf("\r\nTemperature is %s",TempFahrenheit_Display);
}
/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -