A. DS18B20溫度感測器讀出數據的轉化問題
乘毀閉消以256是為了將讀過來的數據轉換成十進制數,再乘以25,然纖知後在返回值里又左移了2,相當於(b*256+a)*0.0625*100!這段程序應該沒有判斷態伍正負的語句!你多看看DS18B20的手冊就會明白了!那裡面說的很明白的!
B. 稱重感測器的信號怎樣轉化LED數碼管的信號輸出
直接買個數字顯示的儀表就可滲腔陪以了,將叢蠢感測器信號圓腔接儀表的輸入,按儀表
使用說明書
設置一下即可.
C. 4位元組16進制浮點數如何轉換成10進制浮點數
四位元組16進制數可轉換為四大咐卜個二進制位元組(Bytes),從而使用Api函數來處理成單精度浮點數。
以下用VB代碼簡賣處理。
VB有專門的API函數CopyMemory能處理2-10進制浮點數轉換和10-2進制浮點數轉換。
下列代碼演示了10進制Single(單精度浮點型轉為16進制字元顯示的浮點數和其相反運算:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub BinToSin_Click()
Dim sinStr As String
Dim sinSj As Single
Dim Buffer(3) As Byte
Dim i As Integer
sinStr = Text2
For i = 1 To Len(Text2) Step 2
Buffer((7 - i) / 2) = Val("&H" & Mid(sinStr, i, 2))
Next
CopyMemory ByVal VarPtr(sinSj), ByVal VarPtr(Buffer(0)), 4
Text3 = sinSj
End Sub
Private Sub SinToBin_Click()
Dim i As Integer
Dim hexData As String
Dim a As Single
Dim Buffer(3) As Byte
a = Val(Text1)
CopyMemory Buffer(0), a, 4
For i = 0 To 3
If Len(Hex(Buffer(i))) = 1 Then
hexData = "0" & Hex(Buffer(i)) + hexData
Else
hexData = Hex(Buffer(i)) + hexData
End If
Next
Text2 = hexData
End Sub
需要注意的事項是這四位元組的高低位元組排序,不能搞錯。
VB的Single 數據類型
Single(單精度浮點型)滾穗變數存儲為 IEEE 32 位(4 個位元組)浮點數值的形式,它的范圍在負數的時候是從 -3.402823E38 到 -1.401298E-45,而在正數的時候是從 1.401298E-45 到 3.402823E38。Single 的類型聲明字元為感嘆號 (!)。
在內存以32位二進制形式存在:
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
第1位為符號位
第2-9位為階碼位
第10-32位為2進制小數尾值
即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX
其中
F為正號或負號(首為為0正數,首位為1負數
n為2-9位組成的BYTE數據值
XXXXXXX XXXXXXXX XXXXXXXX為尾數
D. 感測器給上位機上傳的數據怎麼轉換成顯示數值
這些數據應該是十六進制的,腔豎你需要轉換為十進制,游圓枯然後還需要對十進制數的每一位都轉換為ASC碼,就可以顯示了;神洞