【正文】
SpiRead(void){ uchar i=8。 uchar ddata=0。 while (i) { ddata=1 。 SCK=0。 _nop_()。_nop_()。 ddata|=MISO?;?nRF905 的無線溫度采集系統(tǒng)的設(shè)計40 SCK=1 。 _nop_()。_nop_()。 } SCK=0。 return ddata。}//接收數(shù)據(jù)包void RxPacket(void){ uchar i。 i=0。 while(DR) { TxRxBuffer[i] = SpiRead()。 i++。 }}//void DelayMs(uint n) //j=115@F={ uchar j。 while(n) {for(j=0。j115。j++)。}}//等待接收數(shù)據(jù)包uchar temp。void Wait_Rec_Packet(void){ TXEN=0。 TRX_CE=1?;?nRF905 的無線溫度采集系統(tǒng)的設(shè)計41 while(1) { if(DR) { TRX_CE=0。 //若數(shù)據(jù)準(zhǔn)備好則進(jìn)入待機(jī)模式,操作 SPI CSN=0。 SpiWrite(0x24)。 RxPacket()。 CSN=1。 LED2=0。DelayMs(200)。LED2=1。 //如果接收的數(shù)據(jù)正確 //} break。 } }}//初始化配置寄存器void Ini_System(void){ uchar i。 LED1=0。 Delay(10000)。 LED1=1。 lcdbit=1。 CSN=1。 SCK=0。 PWR=1。 TRX_CE=0。//SPI 寫入 TXEN=0?;?nRF905 的無線溫度采集系統(tǒng)的設(shè)計42 _nop_()。 CSN=0。 for(i=0。i11。i++){ SpiWrite(RFConf[i])。 } CSN=1。 PWR=1。 TRX_CE=1。// TXEN=0。 Delay(1000)。}// void main(void){ uint i。DelayMs(100)。LED1=0。DelayMs(1000)。LED1=1。Init_MCU()。Send_PC(0xAA)。Send_PC(0xBB)。Ini_System()。 while(1) { Wait_Rec_Packet()。 //等待接收完成 for(i=0。i4。i++)基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計43 Send_PC(TxRxBuffer[i])。 }}附錄 3 上位機(jī)程序Dim w As IntegerDim datatemp(1000) As IntegerDim num As IntegerPrivate Sub Command1_Click() 39。打開串口 Dim rstr As String Dim n As Integer With MSComm1 = True If .PortOpen = False Then 39。判斷通信口是否打開 .PortOpen = True 39。打開通信口 .DTREnable = True .RTSEnable = True = vbGreen If Err Then 39。錯誤處理 MsgBox 串口通信無效 Exit Sub End If基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計44 End If End WithEnd SubPrivate Sub Command2_Click() 39。退出With MSComm1 = False If .PortOpen = True Then 39。判斷通信口是否打開 .PortOpen = False End IfEnd With 39。程序退出關(guān)閉設(shè)備 EndEnd SubPrivate Sub Command3_Click() = False With MSComm1 If .PortOpen = True Then = vbWhite .PortOpen = False End If End WithEnd SubPrivate Sub Comres_Click() 39。重置各測量數(shù)據(jù)區(qū)和繪圖區(qū) With MSComm1 If .PortOpen = True Then基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計45 .PortOpen = False End If If num = 0 Then Exit Sub = : = = : = = : = For i = 0 To num 1 datatemp(i) = 0 Next i num = 0 w = 2 = vbWhite End WithEnd SubPrivate Sub Form_Load() = 7305 = 9480 = vbWhite 39。串口打開/關(guān)閉顯示 = True 39。接收計數(shù)器 = 39。顯示接收計數(shù) = = = = = w = 4基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計46num = 0With MSComm1 .CommPort = 1 .Settings = 19200,N,8,1 .InputMode = 1 39。設(shè)置接收數(shù)據(jù)模式為二進(jìn)制形式 .InBufferSize = 4096 .InBufferCount = 0 39。清除接收緩沖區(qū) .RThreshold = 1 39。接收一個字節(jié)產(chǎn)生 OnComm 事件 On Error Resume Next 39。改變錯誤處理的方式。 End WithEnd SubPrivate Sub MSComm1_OnComm()Dim Inbyte() As ByteDim ss As StringDim buffer As StringDim n As IntegerDim MyDateDim datatemp2a, datatemp2b As StringDim datatemp2 As Stringw = w + 1 = CStr(w)Select Case 39。判斷 MSComm1 通訊事件 Case EvReceive 39。收到 Rthreshold 個字節(jié)產(chǎn)生的接收事件基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計47 = 0 39。關(guān)閉 OnComm 事件 n = 39。輸入緩沖區(qū)中的數(shù)據(jù)個數(shù) ReDim Inbyte(n) rvar = Inbyte = n rvar = 39。保存到字節(jié)數(shù)據(jù)類型數(shù)組 Inbyte = rvar For i = 0 To n 1 buffer = Hex(Inbyte(i)) ss = ss + buffer Next i buffer = MyDate = Date 39。 MyDate 的值為系統(tǒng)當(dāng)前的日期。 buffer = CStr(MyDate) + + CStr(Time) + + Mid(ss, 2, 2) + . + Right(ss, 1) + 度 = amp。 buffer amp。 vbCrLf = Mid(ss, 2, 2) + . + Right(ss, 1) datatemp(num) = Val(ss) num = num + 1 Call cal Call draw Case ElseEnd Select Call draw = 1 39。設(shè)置接收一個字節(jié)產(chǎn)生OnComm 事件基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計48End SubPrivate Sub draw() Dim x0, y0, h, w As Single y0 = + x0 = (100, 25500)(, 0) h = / 39。圖片的高 ,寬. w = / = QBColor(1) = 1 = QBColor(15) For i = 1 To num 1 X1 = x0 + (i 1) * w Y1 = y0 datatemp(i 1) * h X2 = x0 + i * w Y2 = y0 datatemp(i) * h (X1, Y1)(X2, Y2), vbBlack Next iEnd Sub 39。計算極值平均值 Sub cal() On Error GoTo hh Sum = 0 Max = datatemp(0): Min = Max For i = 0 To num 1基于 nRF905 的無線溫度采集系統(tǒng)的設(shè)計49 If datatemp(i) = Max Then Max = datatemp(i) If datatemp(i) = Min Then Min = datatemp(i) Sum = Sum + datatemp(i) Next i Aver = Sum / num = Left(Max, 2) + . + Right(Max, 1) = Left(Min, 2) + . + Right(Min, 1) = Left(Aver, 2) + . + Right(Aver, 1)hh: Exit SubEnd SubPrivate Sub Form_Unload(Cancel As Integer) 39。退出窗體 OK!With MSComm1 If .PortOpen = True Then 39。判斷通信口是否打開 .PortOpen = False End IfEnd With 39。程序退出關(guān)閉設(shè)備EndEnd Sub