Serial.frm
上传用户:huaweixt1
上传日期:2013-04-14
资源大小:25k
文件大小:13k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
  3. Begin VB.Form SerialFrm 
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "串口调试程序"
  6.    ClientHeight    =   5265
  7.    ClientLeft      =   45
  8.    ClientTop       =   435
  9.    ClientWidth     =   9780
  10.    BeginProperty Font 
  11.       Name            =   "宋体"
  12.       Size            =   10.5
  13.       Charset         =   134
  14.       Weight          =   400
  15.       Underline       =   0   'False
  16.       Italic          =   0   'False
  17.       Strikethrough   =   0   'False
  18.    EndProperty
  19.    Icon            =   "Serial.frx":0000
  20.    LinkTopic       =   "Form1"
  21.    MaxButton       =   0   'False
  22.    MinButton       =   0   'False
  23.    ScaleHeight     =   5265
  24.    ScaleWidth      =   9780
  25.    StartUpPosition =   2  'CenterScreen
  26.    Begin VB.TextBox chsum 
  27.       Height          =   375
  28.       Left            =   9120
  29.       TabIndex        =   13
  30.       Top             =   4800
  31.       Width           =   615
  32.    End
  33.    Begin VB.Timer Timer1 
  34.       Left            =   4800
  35.       Top             =   3000
  36.    End
  37.    Begin VB.Frame Frame1 
  38.       Height          =   700
  39.       Left            =   120
  40.       TabIndex        =   3
  41.       Top             =   3960
  42.       Width           =   9615
  43.       Begin VB.CheckBox ckOpenClose 
  44.          Caption         =   "开启串口"
  45.          Height          =   375
  46.          Left            =   120
  47.          TabIndex        =   12
  48.          Top             =   240
  49.          Width           =   1215
  50.       End
  51.       Begin VB.TextBox KeepSec 
  52.          Height          =   350
  53.          Left            =   3240
  54.          MaxLength       =   5
  55.          TabIndex        =   10
  56.          Top             =   220
  57.          Width           =   1215
  58.       End
  59.       Begin VB.CheckBox ckAuto 
  60.          Caption         =   "自动发送"
  61.          Height          =   375
  62.          Left            =   1440
  63.          TabIndex        =   8
  64.          Top             =   220
  65.          Width           =   1215
  66.       End
  67.       Begin VB.ComboBox ComBaud 
  68.          Height          =   330
  69.          ItemData        =   "Serial.frx":0442
  70.          Left            =   8040
  71.          List            =   "Serial.frx":044C
  72.          Style           =   2  'Dropdown List
  73.          TabIndex        =   7
  74.          Top             =   240
  75.          Width           =   1335
  76.       End
  77.       Begin VB.ComboBox ComPort 
  78.          Height          =   330
  79.          ItemData        =   "Serial.frx":045D
  80.          Left            =   6000
  81.          List            =   "Serial.frx":047F
  82.          Style           =   2  'Dropdown List
  83.          TabIndex        =   5
  84.          Top             =   240
  85.          Width           =   1215
  86.       End
  87.       Begin VB.Label Label4 
  88.          BackStyle       =   0  'Transparent
  89.          Caption         =   "毫秒"
  90.          Height          =   255
  91.          Left            =   4560
  92.          TabIndex        =   11
  93.          Top             =   300
  94.          Width           =   495
  95.       End
  96.       Begin VB.Label Label3 
  97.          BackStyle       =   0  'Transparent
  98.          Caption         =   "间隔"
  99.          Height          =   255
  100.          Left            =   2760
  101.          TabIndex        =   9
  102.          Top             =   300
  103.          Width           =   495
  104.       End
  105.       Begin VB.Label Label2 
  106.          BackStyle       =   0  'Transparent
  107.          Caption         =   "波特率"
  108.          Height          =   255
  109.          Left            =   7320
  110.          TabIndex        =   6
  111.          Top             =   285
  112.          Width           =   735
  113.       End
  114.       Begin VB.Label Label1 
  115.          BackStyle       =   0  'Transparent
  116.          Caption         =   "串  口"
  117.          Height          =   255
  118.          Left            =   5160
  119.          TabIndex        =   4
  120.          Top             =   300
  121.          Width           =   855
  122.       End
  123.    End
  124.    Begin MSCommLib.MSComm MSComm1 
  125.       Left            =   6360
  126.       Top             =   2400
  127.       _ExtentX        =   1005
  128.       _ExtentY        =   1005
  129.       _Version        =   393216
  130.       DTREnable       =   -1  'True
  131.    End
  132.    Begin VB.CommandButton sendBtn 
  133.       Caption         =   "发送"
  134.       BeginProperty Font 
  135.          Name            =   "宋体"
  136.          Size            =   9
  137.          Charset         =   134
  138.          Weight          =   400
  139.          Underline       =   0   'False
  140.          Italic          =   0   'False
  141.          Strikethrough   =   0   'False
  142.       EndProperty
  143.       Height          =   375
  144.       Left            =   240
  145.       TabIndex        =   2
  146.       Top             =   4800
  147.       Width           =   975
  148.    End
  149.    Begin VB.TextBox txtSend 
  150.       Height          =   375
  151.       Left            =   1320
  152.       TabIndex        =   1
  153.       Top             =   4800
  154.       Width           =   7695
  155.    End
  156.    Begin VB.TextBox txtRecieve 
  157.       BeginProperty Font 
  158.          Name            =   "宋体"
  159.          Size            =   9
  160.          Charset         =   134
  161.          Weight          =   400
  162.          Underline       =   0   'False
  163.          Italic          =   0   'False
  164.          Strikethrough   =   0   'False
  165.       EndProperty
  166.       Height          =   3855
  167.       Left            =   120
  168.       MultiLine       =   -1  'True
  169.       ScrollBars      =   2  'Vertical
  170.       TabIndex        =   0
  171.       Top             =   120
  172.       Width           =   9615
  173.    End
  174. End
  175. Attribute VB_Name = "SerialFrm"
  176. Attribute VB_GlobalNameSpace = False
  177. Attribute VB_Creatable = False
  178. Attribute VB_PredeclaredId = True
  179. Attribute VB_Exposed = False
  180. Dim setting As String
  181. Dim sendByte As Byte
  182. Dim sendStart As Boolean
  183. Dim temStr As String
  184. Dim firstByte(0) As Byte
  185. Dim sendBytes() As Byte
  186. Dim sendCount As Integer
  187. Dim getBytes() As Byte
  188. Dim getLen As Integer
  189. Dim tmpi As Integer
  190. Dim checkSum As Byte
  191. Private Sub ckAuto_Click()
  192.   If ckAuto.Value = 1 Then
  193.     If KeepSec.Text = "" Then
  194.        KeepSec.Text = 0
  195.        Exit Sub
  196.     End If
  197.    Timer1.Interval = KeepSec
  198.   Else
  199.    Timer1.Interval = 0
  200.   End If
  201. End Sub
  202. Private Sub ckOpenClose_Click()
  203.   
  204. On Error GoTo errStr
  205.    If ckOpenClose.Value = 1 Then
  206.     setting = ComBaud.Text & ",N,8,1"
  207.     MSComm1.CommPort = ComPort.ListIndex + 1
  208.     MSComm1.Settings = setting
  209.     MSComm1.InputMode = comInputModeBinary
  210.     MSComm1.Handshaking = comNone
  211.     MSComm1.OutBufferSize = 1024
  212.     MSComm1.InBufferSize = 512
  213.     MSComm1.InputLen = 0
  214.     MSComm1.SThreshold = 1
  215.     MSComm1.RThreshold = 1
  216.     If Not MSComm1.PortOpen Then
  217.       MSComm1.PortOpen = True
  218.     End If
  219.    Else
  220.     If MSComm1.PortOpen Then
  221.       MSComm1.PortOpen = False
  222.     End If
  223.    End If
  224.    Exit Sub
  225. errStr:
  226.    If Err.Number = 8002 Then
  227.      MsgBox "串口不存在!", vbOKOnly Or vbInformation
  228.    ElseIf Err.Number = 8005 Then
  229.      MsgBox "串口已打开!", vbOKOnly Or vbInformation
  230.    End If
  231.    ckOpenClose.Value = 0
  232. End Sub
  233. Private Sub ComPort_Click()
  234.  If ckOpenClose.Value = 1 Then
  235.    If MSComm1.PortOpen Then
  236.       MSComm1.PortOpen = False
  237.     End If
  238.     setting = ComBaud.Text & ",N,8,1"
  239.     MSComm1.CommPort = ComPort.ListIndex + 1
  240.     MSComm1.Settings = setting
  241.     MSComm1.InputMode = comInputModeBinary
  242.     MSComm1.Handshaking = comNone
  243.     MSComm1.OutBufferSize = 1024
  244.     MSComm1.InBufferSize = 512
  245.     MSComm1.InputLen = 0
  246.     MSComm1.SThreshold = 1
  247.     MSComm1.RThreshold = 1
  248.     If Not MSComm1.PortOpen Then
  249.       MSComm1.PortOpen = True
  250.     End If
  251.   End If
  252. End Sub
  253. Private Sub Form_Load()
  254.   ComPort.ListIndex = 0
  255.   ComBaud.ListIndex = 0
  256.   sendStart = True
  257.   Me.BackColor = RGB(150, 183, 208)
  258.   Frame1.BackColor = RGB(150, 183, 208)
  259.   ckOpenClose.BackColor = RGB(150, 183, 208)
  260.   ckAuto.BackColor = RGB(150, 183, 208)
  261. End Sub
  262. Private Sub KeepSec_Change()
  263.    If KeepSec.Text = "" Then
  264.      Exit Sub
  265.    End If
  266.    If InStr("0123456789", Right(KeepSec.Text, 1)) <= 0 Then
  267.      KeepSec.Text = Left(KeepSec.Text, Len(KeepSec.Text) - 1)
  268.      KeepSec.SelStart = Len(KeepSec.Text)
  269.    End If
  270.    If (Left(KeepSec.Text, 1) = 0) And Len(KeepSec.Text) > 1 Then
  271.       KeepSec.Text = Right(KeepSec.Text, Len(KeepSec.Text) - 1)
  272.       KeepSec.SelStart = Len(KeepSec.Text)
  273.    End If
  274.    If (ckAuto.Value = 1) And (Val(KeepSec.Text) > 0) Then
  275.       Timer1.Interval = KeepSec
  276.    End If
  277. End Sub
  278. Private Sub MSComm1_OnComm()
  279.    Select Case MSComm1.CommEvent
  280.    ' Handle each event or error by placing
  281.    ' code below each case statement
  282. ' 错误
  283.       Case comEventBreak   ' 收到 Break。
  284.        Case comEventCDTO   ' CD (RLSD) 超时。
  285.       Case comEventCTSTO   ' CTS Timeout。
  286.       Case comEventDSRTO   ' DSR Timeout。
  287.       Case comEventFrame   ' Framing Error
  288.       Case comEventOverrun   '数据丢失。
  289.       Case comEventRxOver '接收缓冲区溢出。
  290.       Case comEventRxParity ' Parity 错误。
  291.       Case comEventTxFull   '传输缓冲区已满。
  292.       Case comEventDCB   '获取 DCB] 时意外错误
  293.    ' 事件
  294.       Case comEvCD   ' CD 线状态变化。
  295.       Case comEvCTS   ' CTS 线状态变化。
  296.       Case comEvDSR   ' DSR 线状态变化。
  297.       Case comEvRing   ' Ring Indicator 变化。
  298.       Case comEvReceive   ' 收到 RThreshold # ofchars.
  299.       
  300.              getLen = MSComm1.InBufferCount
  301.              getBytes = MSComm1.Input
  302.           For tmpi = 0 To getLen - 1
  303.             txtRecieve.Text = Trim(txtRecieve.Text) & " " & IIf(Len(Hex$(getBytes(tmpi))) > 1, Hex$(getBytes(tmpi)), "0" & Hex$(getBytes(tmpi)))
  304.           Next tmpi
  305.       Case comEvSend   ' 传输缓冲区有 Sthreshold 个字符                         '
  306.       Case comEvEOF   ' 输入数据流中发现 EOF 字符
  307.     End Select
  308. End Sub
  309. Private Sub sendBtn_Click()
  310.   If Not MSComm1.PortOpen Then
  311.     MsgBox "串口没有打开!", vbOKOnly Or vbInformation, "提示信息"
  312.     Timer1.Interval = 0
  313.     ckAuto.Value = 0
  314.     Exit Sub
  315.   End If
  316.   If Trim(txtSend.Text) = "" Then
  317.     Exit Sub
  318.   End If
  319.   checkSum = 0
  320.   txtSend.Text = Trim(txtSend.Text)
  321.   If Len(Trim(Right(txtSend.Text, 2))) < 2 Then
  322.      txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "0" & Right(txtSend.Text, 1)
  323.   End If
  324.   ReDim sendBytes(0 To (Len(Trim(txtSend.Text)) - 1) / 3)
  325.   For sendCount = 0 To (Len(Trim(txtSend.Text)) - 1) / 3
  326.      sendBytes(sendCount) = Val("&H" & Mid(txtSend.Text, sendCount * 3 + 1, 2))
  327.   Next sendCount
  328.     chsum.Text = Hex$(checkSum)
  329.     MSComm1.Output = sendBytes
  330. End Sub
  331. Private Sub Timer1_Timer()
  332.   Call sendBtn_Click
  333. End Sub
  334. Private Sub txtSend_Change()
  335.   
  336.    If txtSend.Text = "" Then
  337.      Exit Sub
  338.    End If
  339.    If InStr("0123456789abcedfABCDEF ", Right(txtSend.Text, 1)) <= 0 Then
  340.      txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1)
  341.      txtSend.SelStart = Len(txtSend.Text)
  342.    End If
  343.    Select Case Right(txtSend.Text, 1)
  344.      Case "a"
  345.             txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "A"
  346.             txtSend.SelStart = Len(txtSend.Text)
  347.      Case "b"
  348.             txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "B"
  349.             txtSend.SelStart = Len(txtSend.Text)
  350.     
  351.      Case "c"
  352.             txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "C"
  353.             txtSend.SelStart = Len(txtSend.Text)
  354.  
  355.      Case "d"
  356.             txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "D"
  357.             txtSend.SelStart = Len(txtSend.Text)
  358.      Case "e"
  359.             txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "E"
  360.             txtSend.SelStart = Len(txtSend.Text)
  361.      Case "f"
  362.             txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1) & "F"
  363.             txtSend.SelStart = Len(txtSend.Text)
  364.     End Select
  365.      
  366. '   If (Left(txtSend.Text, 1) = 0) And Len(txtSend.Text) > 1 Then
  367. '      txtSend.Text = Right(txtSend.Text, Len(txtSend.Text) - 1)
  368. '      txtSend.SelStart = Len(txtSend.Text)
  369. '   End If
  370.    If Right(txtSend.Text, 2) = "  " Then
  371.       txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 1)
  372.       txtSend.SelStart = Len(txtSend.Text)
  373.       Exit Sub
  374.    End If
  375.    If Len(txtSend.Text) < 2 Then
  376.     Exit Sub
  377.    End If
  378.    If Right(txtSend.Text, 1) = " " Then
  379.      If Len(txtSend.Text) = 2 Then
  380.         txtSend.Text = "0" & txtSend.Text
  381.         txtSend.SelStart = Len(txtSend.Text)
  382.         Exit Sub
  383.      End If
  384.      If Len(Trim(Mid(txtSend.Text, Len(txtSend.Text) - 2, 2))) < 2 Then
  385.         temStr = "0" & Mid(txtSend.Text, Len(txtSend.Text) - 1, 1) & " "
  386.         txtSend.Text = Left(txtSend.Text, Len(txtSend.Text) - 2) & temStr
  387.         txtSend.SelStart = Len(txtSend.Text)
  388.      End If
  389.    End If
  390.    If Len(txtSend.Text) < 3 Then
  391.      Exit Sub
  392.    End If
  393.    If Len(Trim(Right(txtSend.Text, 3))) > 2 Then
  394.      txtSend.Text = Trim(Left(txtSend.Text, Len(txtSend.Text) - 1)) & " " & Right(txtSend.Text, 1)
  395.      txtSend.SelStart = Len(txtSend.Text)
  396.    End If
  397.    
  398. End Sub