?? frmmain.frm
字號:
Caption = "0"
Height = 855
Index = 1
Left = 1080
TabIndex = 1
Top = 120
Width = 595
End
Begin VB.CommandButton Command1
Caption = "0"
Height = 855
Index = 0
Left = 495
TabIndex = 0
Top = 120
Width = 595
End
Begin VB.Label devstatue
AutoSize = -1 'True
Caption = "**"
Height = 540
Left = 1455
TabIndex = 75
Top = 5880
Width = 180
End
Begin VB.Label Label2
Caption = "下面的每個按鈕對應按鍵,按下時同步顯示"
BeginProperty Font
Name = "宋體"
Size = 9.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 615
TabIndex = 10
Top = 1560
Width = 3855
End
Begin VB.Label Label1
Caption = "上面的每個按鈕對應數碼管,雙擊輸入數字"
BeginProperty Font
Name = "宋體"
Size = 9.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 255
Left = 615
TabIndex = 9
Top = 1200
Width = 3975
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim mCaptionInform As String
Dim mDemoReq As COMMAND_PACKET
Dim mOpen As Long
Const DEMO_GET_KEY = &H34
Const DEMO_RET_OK = &H0
'以下測試PC機與單片機之間的USB通訊
Public Sub Testcommunication()
Dim mLength As Long
mDemoReq.mCommandCode = DEF_CMD_TEST_DATA ' 測試命令,將PC機發來的所有數據取反后返回
mDemoReq.mCommandCodeNot = &HFF - DEF_CMD_TEST_DATA
mDemoReq.mParameter(0) = &H5A ' 任意的測試數據,返回后將按位取反
mDemoReq.mParameter(1) = &H96 ' 任意的測試數據,返回后將按位取反
mDemoReq.mParameter(2) = &HF3 ' 任意的測試數據,返回后將按位取反
mDemoReq.mParameter(3) = &H4C ' 任意的測試數據,返回后將按位取反
mDemoReq.mParameter(4) = &H39 ' 任意的測試數據,返回后將按位取反
mLength = CONST_CMD_LEN ' 命令包的長度
If (CH375Writedata(mIndex, mDemoReq, mLength)) Then ' 通過CH375發送命令數據,成功
mLength = mCH375_PACKET_LENGTH
If (CH375ReadData(mIndex, mDemoReq, mLength)) Then ' 通過CH375接收應答數據,成功
If (mLength = CONST_CMD_LEN) Then
If ((mDemoReq.mCommandCode <> (&HFF - DEF_CMD_TEST_DATA)) Or (mDemoReq.mParameter(0) <> (&HFF - &H5A)) Or (mDemoReq.mParameter(1) <> (&HFF - &H96))) Then
MsgBox "通過USB傳輸的數據有錯誤", vbExclamation, mCaptionInform
End If
Else
MsgBox "CH375數據測試返回的長度錯誤", vbExclamation, mCaptionInform
End If
Else
MsgBox "CH375ReadData 失敗", vbExclamation, mCaptionInform
End If
Else
MsgBox "CH375WriteData 失敗", vbExclamation, mCaptionInform
End If
' 下面是下傳數據塊的例子
' Dim mBuffer(4095) As Byte
' mBuffer(0) = Data ' 準備下傳的數據
' mLength = mDownloadData(mBuffer, 4096) ' 將數據塊從計算機下傳給單片機,返回實際傳輸長度
' mLength = mUploadData(mBuffer, 4096) ' 從單片機上傳數據塊到計算機,返回實際傳輸長度
End Sub
'/*設備插拔事件處理*/
Private Sub pnpproce_KeyUp(KeyCode As Integer, Shift As Integer)
Dim i As Byte
Dim iEventStatus As Long
iEventStatus = KeyCode '插拔事件代碼
If (iEventStatus = CH375_DEVICE_ARRIVAL) Then
If (mOpen = -1) Then '設備沒打開
mOpen = CH375OpenDevice(mIndex) '設備插入后打開設備
If mOpen = -1 Then
MsgBox "無法打開CH375設備", vbCritical, "信息提示"
Exit Sub
End If
CH375SetTimeout mIndex, 3000, 3000
Call Testcommunication '測試PC機與單片機之間的USB通訊
Call mCallInt '設置中斷
End If
For i = 0 To 7
Command1(i).Enabled = True 'LED
Next i
Command3.Enabled = True
devstatue.Caption = "**CH372/CH375設備已插上"
ElseIf (iEventStatus = CH375_DEVICE_REMOVE) Then
If (mOpen <> -1) Then
CH375CloseDevice (mIndex) '設備拔出,關閉設備句柄
mOpen = -1
End If
For i = 0 To 7
Command1(i).Enabled = False
Next i
Command3.Enabled = False
devstatue.Caption = "**CH372/CH375設備已拔出"
End If
End Sub
Private Sub Command1_Click(index As Integer)
Select Case index '按鈕標識
Case 0
frmEnter.index = 0 '按鈕1
Case 1
frmEnter.index = 1 '按鈕2
Case 2
frmEnter.index = 2 '按鈕3
Case 3
frmEnter.index = 3 '按鈕4
Case 4
frmEnter.index = 4 '按鈕5
Case 5
frmEnter.index = 5 '按鈕6
Case 6
frmEnter.index = 6 '按鈕7
Case 7
frmEnter.index = 7 '按鈕8
End Select
frmEnter.Show
End Sub
Private Sub Command3_Click() '命令按鈕
frmEnter.index = -1 '識別命令按鈕
frmEnter.Show vbModal, Me
End Sub
'模擬調用窗體的按鍵按下事件
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim mLength As Long
Dim mDemoReq As COMMAND_PACKET
If KeyCode = 1 Then ' 鍵被按下,以下先釋放原按鍵再讀取新按鍵值
Call mSyncKeyboard(&HFF) ' 釋放上次的按鍵
Call mSyncKeyboard(mKeyCode) '根據鍵值作同步顯示
End If
End Sub
'模擬調用窗體按鍵松開事件
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 1 Then
Call mSyncKeyboard(&HFF) ' 鍵盤按鍵松開
End If
End Sub
Private Sub Form_Load()
mIndex = 0 '第一個ch375設備
mShowLED = 0
mKeyCode = &HFF
mCaptionInform = " 信息提示 "
mOpen = -1
'設置設備插拔監視
If (CH375SetDeviceNotify(mIndex, vbNullString, AddressOf iNotifyRoutine) = False) Then
MsgBox "設置監視CH372/CH375設備插拔失敗"
End If
mOpen = CH375OpenDevice(mIndex) '窗體加載時打開設備
If mOpen = -1 Then
Call pnpproce_KeyUp(CH375_DEVICE_REMOVE, 0) '作設備拔出處理
Exit Sub
Else
Call pnpproce_KeyUp(CH375_DEVICE_ARRIVAL, 0) '作設備插入處理
End If
' 設置USB數據讀寫的超時,超過3000mS未完成讀寫將強制返回,避免一直等待下去
CH375SetTimeout mIndex, 3000, 3000
' 以下測試PC機與單片機之間的USB通訊,僅作演示,本身沒有意義
Call Testcommunication
Call mCallInt '設置中斷
'下面加載中斷服務程序 , 中斷服務程序是在應用層執行的, 其線程優先級是THREAD_PRIORITY_TIME_CRITICAL
'當單片機有事需要通知計算機時 , 可以用CMD_WR_USB_DATA5命令寫入中斷特征數據, 計算機的mInterruptEvent線程將會收到該中斷特征數據
'然后mInterruptEvent線程向主程序發出消息進行處理,mInterruptEvent線程相當于中斷服務程序,代替主程序定時查詢單片機
End Sub
'同步按鍵顯示,鍵被按下時顯示◎,否則顯示鍵號
Sub mSyncKeyboard(ByVal iKeyCode As Long) ' 輸入的按鍵值,00H-3FH則鍵被按下,0FFH則按下的鍵被釋放
' 以下方法只適用于IDC_K0至IDC_K63完全有序的情況
Static mKeyNo As Long
If iKeyCode = &HFF Then ' 釋放剛按下的鍵
Command2(mKeyNo).Caption = CStr(mKeyNo) '恢復顯示鍵號
Else ' 鍵被按下
mKeyNo = iKeyCode And &H3F ' 鍵號0-63
Command2(mKeyNo).Caption = "◎" ' 00H-3FH鍵被按下則顯示◎
End If
End Sub
Private Sub Form_Unload(Cancel As Integer) '退出窗體
CH375SetDeviceNotify mIndex, vbNullString, 0& '取設備插拔通知
CH375SetIntRoutine mIndex, 0& '取消中斷上傳
CH375CloseDevice (mIndex) '程序退出關閉設備
End Sub
Private Function mDownloadData(ByRef iBuffer As String, ByVal iLength As Long) As Long
Dim mDemoReq As COMMAND_PACKET
Dim mLength As Long
If (iLength > 4096) Then
MsgBox "單次下傳數據長度超過4096字節", vbExclamation, mCaptionInform
mDownloadData = 0
Exit Function
End If
mDemoReq.mCommandCode = DEF_CMD_DOWN_DATA ' 連續下傳數據塊
mDemoReq.mCommandCodeNot = &HFF - DEF_CMD_DOWN_DATA
mDemoReq.mParameter(0) = ACCESS_MCS51_XRAM ' 讀寫51單片機的外部RAM(本演示板的單片機沒有外部RAM,所以無法演示)
mDemoReq.mParameter(1) = &H0 ' 指定外部RAM緩沖區起始地址,該例是將數據下傳到起始地址為0X8200的外部RAM
mDemoReq.mParameter(2) = &H82
mDemoReq.mParameter(3) = iLength ' 傳輸數據總長度
mLength = CONST_CMD_LEN ' 命令包的長度
If (CH375Writedata(mIndex, mDemoReq, mLength)) Then ' 通過CH375發送命令包,成功
mLength = iLength ' 數據塊的長度,一次下傳不超過4096字節
If ((mLength Mod 64) = CONST_CMD_LEN) Then
mLength = mLength + 1 ' 防止數據包的長度與命令包的長度相同,如果相同,則多發送一個無效數據
End If
If (CH375Writedata(mIndex, iBuffer, mLength)) Then ' 通過CH375發送數據,成功
mDownloadData = mLength
Return
Else
MsgBox "CH375WriteData 下傳數據失敗", vbExclamation, mCaptionInform
End If
Else
MsgBox "CH375WriteData 發送命令失敗,DEF_CMD_DOWN_DATA", vbExclamation, mCaptionInform
End If
mDownloadData = 0
Return
End Function
Private Function mUploadData(ByRef iBuffer As String, ByVal iLength As Long) As Long
Dim mDemoReq As COMMAND_PACKET
Dim mLength As Long
If (iLength > 4096) Then
MsgBox "單次上傳數據長度超過4096字節", vbQuestion, mCaptionInform
mUploadData = 0
Return
End If
mDemoReq.mCommandCode = DEF_CMD_CLEAR_UP ' 連續上傳數據塊之前進行同步,實際是讓單片機清除上傳緩沖區的已有內容
mDemoReq.mCommandCodeNot = &HFF - DEF_CMD_CLEAR_UP
mLength = CONST_CMD_LEN ' 命令包的長度
If (CH375Writedata(mIndex, mDemoReq, mLength)) Then ' 通過CH375發送命令包,成功
mDemoReq.mCommandCode = DEF_CMD_UP_DATA ' 連續上傳數據塊
mDemoReq.mCommandCodeNot = &HFF - DEF_CMD_UP_DATA
mDemoReq.mParameter(0) = ACCESS_MCS51_XRAM ' 讀寫51單片機的外部RAM(本演示板的單片機沒有外部RAM,所以無法演示)
mDemoReq.mParameter(1) = &H8200 ' 指定外部RAM緩沖區起始地址,該例是將從起始地址為0X8200的外部RAM上傳數據
mDemoReq.mParameter(3) = iLength ' 傳輸數據總長度
mLength = CONST_CMD_LEN '命令包的長度
If (CH375Writedata(mIndex, mDemoReq, mLength)) Then ' 通過CH375發送命令包,成功
mLength = iLength ' 數據塊的長度,一次上傳不超過4096字節
If (CH375ReadData(mIndex, iBuffer, mLength)) Then ' 通過CH375接收數據,成功
mUploadData = mLength
Return
Else
MsgBox "CH375ReadData 上傳數據失敗", vbExclamation, mCaptionInform
End If
Else
MsgBox "CH375WriteData 發送命令失敗,DEF_CMD_UP_DATA", vbExclamation, mCaptionInform
End If
Else
MsgBox "CH375WriteData 發送命令失敗,DEF_CMD_CLEAR_UP", vbExclamation, mCaptionInform
End If
mUploadData = 0
Return
End Function
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -