?? module1.bas
字號:
Attribute VB_Name = "Module1"
Option Explicit
Public mEnterBuffer As String
Public mBufferLength As Long ' 緩沖區內的有效數據長度
Public mShowLED As Integer
Public mIndex As Long
Public mKeyCode As Integer
Type INT_PARA '中斷端點上傳的數據類型
buf(8) As Byte
End Type
Type COMMAND_PACKET ' 自定義的命令包結構
mCommandCode As Byte ' 命令請求碼,見下面的定義
mCommandCodeNot As Byte ' 命令碼的反碼,用于校驗命令包
mParameter(4) As Byte ' 參數
' mParamter(4)相當于 UCHAR mBufferID; // 緩沖區識別碼,本程序針對MCS51單片機定義: 1-專用功能寄存器SFR, 2-內部RAM, 3-外部RAM, 不過本程序實際只演示內部RAM
' USHORT mBufferAddr; // 讀寫操作的起始地址,尋址范圍是0000H-0FFFFH,低字節在前
' USHORT mLength; // 數據塊總長度,低字節在前
End Type
Dim mCOMMAND_PACKET As COMMAND_PACKET
Public Const CONST_CMD_LEN = &H7 ' 命令塊的長度
' 由于命令與數據都是通過數據下傳管道(USB端點2的OUT)下傳, 為了防止兩者混淆,
' 我們可以在計算機應用程序與單片機程序之間約定, 命令塊的長度總是7, 而數據塊的長度肯定不是7, 例如64,32等
' 另外, 可以約定, 命令塊的首字節是命令碼, 等等
' 本程序約定命令碼: 80H-0FFH是通用命令,適用于各種應用
' 00H-7FH是專用命令,針對各種應用特別定義
' 通用命令
Public Const DEF_CMD_GET_INFORM = &H90 ' 獲取下位機的說明信息,長度不超過64個字符,字符串以00H結束
Public Const DEF_CMD_TEST_DATA = &H91 ' 測試命令,下位機將PC機發來的命令包的所有數據取反后返回
Public Const DEF_CMD_CLEAR_UP = &HA0 ' 在上傳數據塊之前進行同步,實際是讓下位機清除上傳緩沖區的已有內容
Public Const DEF_CMD_UP_DATA = &HA1 ' 從下位機的指定地址的緩沖區中讀取數據塊(上傳數據塊)
Public Const DEF_CMD_DOWN_DATA = &HA2 ' 向下位機的指定地址的緩沖區中寫入數據塊(下傳數據塊)
' 專用命令
Public Const DEMO_CH451_CMD = &H56 ' PC發送命令給CH451,用于演示CH451的功能
' 對于MCS51單片機在使用通用命令時,還需要指定緩沖區識別碼
Public Const ACCESS_MCS51_SFR = 1 ' 讀寫51單片機的SFR
Public Const ACCESS_MCS51_IRAM = 2 ' 讀寫51單片機的內部RAM
Public Const ACCESS_MCS51_XRAM = 3 ' 讀寫51單片機的外部RAM
Public Const WM_KEYUP = &H101
Public Const WM_KEYDOWN = &H100
'中斷發生給主程序發送中斷消息
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function GetTickCount Lib "kernel32" () As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Sub mCallInt()
Dim x As Boolean
x = CH375SetIntRoutine(mIndex, AddressOf mInterruptEvent) '調用中斷子程序
If x = 0 Then
MsgBox "無法調用中斷" & x, vbCritical, "信息提示"
Exit Sub
End If
End Sub
'iBuffer 指向一個緩沖區,提供當前的中斷特征數據
'******建議此程序不要設置斷點******
Public Sub mInterruptEvent(ByRef mBuffer As INT_PARA) '中斷服務程序
Dim bool As Boolean
' CH371產生中斷后,產生一個消息通知主程序
If mBuffer.buf(0) = 1 Then ' 檢查中斷特征數據
mKeyCode = mBuffer.buf(1) And &H3F
bool = PostMessage(frmMain.hwnd, WM_KEYDOWN, 1, 0) ' 中斷特征數據1則鍵被按下
Else
If mBuffer.buf(0) = 2 Then
bool = PostMessage(frmMain.hwnd, WM_KEYUP, 1, 0) ' 中斷特征數據2則鍵被釋放
End If
End If
End Sub
Public Sub iNotifyRoutine(ByVal iEventStatus As Long) ' 設備事件和當前狀態(在下行定義): 0=設備拔出事件, 3=設備插入事件
PostMessage frmMain.pnpproce.hwnd, WM_KEYUP, iEventStatus, 0
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -