程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB對低層硬件訪問控制

VB對低層硬件訪問控制

編輯:VB綜合教程
VB沒有提供直接訪問低層硬件的控件和方法,一度給對訪問硬件感興趣的編程者帶來不便。目前我們可從網上搜索到支持低層硬件訪問的DLL和ActiveX控件,通過它們可讀寫存儲器單元、端口,甚至控制硬件中斷。下面通過兩個利用DLL和ActiveX控件示例介紹VB對低層硬件的訪問控制。
  一、利用DLL讀寫端口

  若在應用程序中只是簡單地讀寫端口,利用DLL編程實現較為簡便。從http://personal.vsnl.com/sr網站可下載一個免費的32位VBIO.DLL,該連接庫允許在VB4、5或6中使用,共有七個函數和過程,分別為:

AnjanDLL的解鎖過程
  Inp端口讀字節函數
  Inpw端口讀字函數
  Out端口寫字節過程
  Outw端口寫字過程
  GetLptBaseAddr獲取並口基地址的函數
  GetComBaseAddr獲取串口基地址的函數


  一個發聲示例程序的窗體,在輸入框中鍵入一頻率值並按SoundOn鈕,則在PC機的揚聲器中發出指定頻率音調,程序中對音調的變化、聲音的開關是用VBIO.DLL的過程和函數訪問發聲系統的定時器/計數器和控制端口實現的。編程要點:
  1.應在Form_Load中加入Anjan解鎖過程。
  2.若在模塊中聲明函數和過程,應去掉private或用Public替代。
  3.VBIO.DLL應拷貝到windowssystem子目錄下。

  程序清單:

OptionExplicit
  PrivateDeclareSubAnjanLib
  “vbio.dll"()
  PrivateDeclareFunctionInpLib
  “vbio.dll"(ByValport&)AsInteger
  PrivateDeclareFunctionInpwLib
  “vbio.dll"(ByValport&)AsLong
  PrivateDeclareSubOutLib
  “vbio.dll"(ByValport&,ByValbyt%)
  PrivateDeclareSubOutwLib
  “vbio.dll"(ByValport&,ByValwrd&)
  PrivateDeclareFunctionGetLptBaseAddrLib
  “vbio.dll"(ByVallpt&)AsInteger
  PrivateDeclareFunctionGetComBaseAddrLib
  “vbio.dll"(ByValcom&)AsInteger

PublicSubSetFreq(soundHzAsInteger)設置頻率
  IfsoundHzThen
  DimdivisorAsLong
  divisor=1193180/soundHz計算時間常數
  Out&H42,&HB6
  8253-5通道2設置為方式3
  Out&H42,divisorMod256送時間常數
  Out&H42,divisor256
  SpeakerTrue
  Else
  SpeakerFalse
  EndIf
  EndSub

PublicSubSpeaker(sOnAsBoolean)開關聲音
  DimportValAsInteger
  portVal=Inp(&H61)
  IfsOnThen
  portVal=portVr3
  低位為通道2的門控信號
  Else次低位為整形與門控制信號
  portVal=portValAnd(Not3)
  EndIf
  Out&H61,portVal
  
  EndSub

PrivateSubForm_Load()
  Anjan軟件解鎖
  EndSub

PrivateSubSoundOff_Click()
  SpeakerFalse
  EndSub

PrivateSubSoundOn_Click()
  SetFreqVal(TextHz)
  EndSub


  二、利用ActiveX處理硬件中斷


  在應用程序中如果需要訪問存儲單元、端口以及處理硬件中斷,使用TVicHW32ActiveX控件是一很好的選擇,該控件是一個共享軟件,支持Windows95/98/NT,可從http://www.entechtaiwan.com/tools.htm處下載。該控件除具備直接訪問存儲單元和端口的功能外,還提供了豐富的處理並口的屬性和方法,以及處理硬件中斷的屬性、方法和事件,極大地拓展了VB對低層硬件的訪問控制。下面通過一個顯示鍵盤中斷次數和按鍵掃描碼的示例介紹控件的使用過程。
  下載TVicHW32壓縮軟件包並解壓到一個目錄中,如HW。把driver子目錄下的vichw00.vxd文件拷貝到windowssystem子目錄下,該文件是控件訪問硬件的驅動程序,使用控件前先用OpenDriver打開,最後用Close_Driver方法關閉。
  把ocx子目錄下的tvichw32.ocx拷貝到windowssystem子目錄下,並在DOS命令行狀態下鍵入以下命令進行注冊:
  regsvr32tvichw32.ocx
  在VB環境下通過菜單工程--部件--控件並選擇TVicHW32ActiveXControlModule將控件添加到工具箱中。
  相關的屬性、方法及事件
  方法OpenDriver打開支持訪問硬件
  的驅動程序vichw.vxd(windows95下)
  方法CloseDriver關閉驅動程序
  屬性ActiveHWAsBool驅動程序打開
  則為True;關閉為False
  中斷事件OnHwInterrupt(ByValHwCounterAsLong,
  ByValLPT_DataRegAsInteger,
  ByValLPT_StatusRegAsInteger,
  ByValScanCodeAsInteger
  )
  參數
   HwCounter:中斷次數
  LPT_DataReg:如果使用IRQ7,
  則為打印並口的數據
  LPT_StatusReg:如果使用IRQ7,
  則為打印並口的數據
  ScanKode:如果使用IRQ1,
  則為按鍵的掃描碼
  屬性IRQNumber指定中斷號,
  范圍IRQ1--15
  屬性IRQMasked中斷非屏蔽則為True;
  屏蔽為False。


  示例的窗體,程序運行後首先按Open_Driver鈕打開驅動程序,然後選擇Unmarsk復選框開放中斷,此時每按一次鍵框中分別顯示該鍵的掃描碼和中斷次數。處理其他中斷只需更改中斷號即可(中斷號1—15)。

  程序清單:

PublicSubShowButtons()
  Open_Driver.Enabled=NotHwCtrl.ActiveHW
  Close_Driver.Enabled=HwCtrl.ActiveHW
  B_Unmask.Enabled=HwCtrl.ActiveHW
  EndSub

PrivateSubForm_Load()
  ShowButtons
  EndSub

PrivateSubOpen_Driver_Click()
  HwCtrl.OpenDriver打開驅動程序
  IfNotHwCtrl.ActiveHWThen
  MsgBox(“ThedriverVICHWxxnotfound")
  Else:
  HwCtrl.IRQNumber=1中斷號為1,鍵盤中斷
  EndIf
  ShowButtons
  EndSub

PrivateSubClose_Driver_Click()
  HwCtrl.CloseDriver關閉驅動程序
  B_Unmask.Value=0
  ShowButtons
  EndSub

PrivateSubB_Unmask_Click()
  IfB_Unmask.Value=0Then
  HwCtrl.IRQMasked=True
  Else
  EndSub

->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved