我用18b20得到的溫度temp,一個兩個位元組的數
我想讓他變成十進制數,怎么辦?
uj5u.com熱心網友回復:
float fTemp = ((H<<8)|L) * 0.0625;uj5u.com熱心網友回復:
float fTemp = ( (short)((H<<8)|L)) * 0.0625;uj5u.com熱心網友回復:
什么意思,看不懂,比如我得到的是temp(兩個位元組的)
怎么轉?其實我是想實作溫度大于某個值時報警,比如大于25,
想讓temp和25比較,但一直不行
寫的通俗易懂好嘛,我看不懂,那個L是啥?H又是啥
uj5u.com熱心網友回復:
H 高位元組 L低位元組技術手冊上都有啊
uj5u.com熱心網友回復:
十進制數記憶體也是使用16進制保存的,lz應該是要問如何才能轉為10進制顯示吧?那就使用printf("d%",m)uj5u.com熱心網友回復:
給你兩個函式,看能不能幫你:/*"***************************************************************"*/
/*" Function: lib_CharToBcd"*/
/*" Description: 單位元組十六進制數轉BCD碼"*/
/*" Input: srcData:單位元組十六進制數"*/
/*" Output: 無 "*/
/*" Return: 轉換結果(單位元組BCD碼)"*/
/*"****************************************************************"*/
uint8 lib_CharToBcd (uint8 srcData)
{
uint8 data,high4;
data = (uint8)(srcData %100);
high4 = (uint8)(data / 10);
return ((uint8)((high4 << 4) | (uint8)(data % 10)));
}
/*"***************************************************************"*/
/*" Function: lib_ShortToBcd"*/
/*" Description: 2位元組16進制數轉2位元組BCD碼"*/
/*" Input: srcData:2位元組十六進制數"*/
/*" Output: destData: 轉換后的BCD碼指標"*/
/*" Return: 無"*/
/*"****************************************************************"*/
void lib_ShortToBcd (uint8 *srcData, uint8 * destData)
{
uint8 i;
uint8 temp;
uint16 scrTmp;
memcpy(srcData, (uint8 *)&scrTmp, 2);
for(i=0; i<2; i++)
{
temp = (uint8)(scrTmp % 100);
*(destData+i) = lib_CharToBcd(temp);
scrTmp /= 100;
}
}
uj5u.com熱心網友回復:
獲取到的值直接比較即可,只要是位元組型別都可以比較uj5u.com熱心網友回復:
5, 轉換字符%% 印出百分比符號,不轉換。
%c 字符輸出到緩沖區,不轉換。
%d 整數轉成十進位。
%f 倍精確度數字轉成浮點數。
%o 整數轉成八進位。
%s 字串輸出到緩沖區,不轉換。
%x 整數轉成小寫十六進位。
%X 整數轉成大寫十六進位。
例如:
1
2
3
4
5
money = 123.1
formatted = sprintf ("%06.2f", $money); // 此時變數 $ formatted 值為 "123.10"
formatted = sprintf ("%08.2f", $money); // 此時變數 $ formatted 值為 "00123.10"
formatted = sprintf ("%-08.2f", $money); // 此時變數 $ formatted 值為 "123.1000"
formatted = sprintf ("%.2f%%", 0.95 * 100); // 格式化為百分比
uj5u.com熱心網友回復:
本來就是十進制的uj5u.com熱心網友回復:
H高位元組
L低位元組
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/48951.html
標籤:單片機/工控
上一篇:RC濾波時間常數
