国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

VB對低層硬件訪問控制

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

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

AnjanDLL的解鎖過程
Inp端口讀字節(jié)函數(shù)
Inpw端口讀字函數(shù)
Out端口寫字節(jié)過程
Outw端口寫字過程
GetLptBaseAddr獲取并口基地址的函數(shù)
GetComBaseAddr獲取串口基地址的函數(shù)


  一個發(fā)聲示例程序的窗體,在輸入框中鍵入一頻率值并按SoundOn鈕,則在PC機的揚聲器中發(fā)出指定頻率音調,程序中對音調的變化、聲音的開關是用VBIO.DLL的過程和函數(shù)訪問發(fā)聲系統(tǒng)的定時器/計數(shù)器和控制端口實現(xiàn)的。編程要點:
1.應在Form_Load中加入Anjan解鎖過程。
2.若在模塊中聲明函數(shù)和過程,應去掉

PublicSubSetFreq(soundHzAsInteger)設置頻率
I
fsoundHzThen
DimdivisorAsLong
divisor=1193180/soundHz計算時間常數(shù)
Out&H42,&HB6
8253-5通道2設置為方式3
Out&H42,divisorMod256送時間常數(shù)
Out&H42,divisor/256
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對低層硬件的訪問控制。下面通過一個顯示鍵盤中斷次數(shù)和按鍵掃描碼的示例介紹控件的使用過程。
  下載TVicHW32壓縮軟件包并解壓到一個目錄中,如/HW。把driver子目錄下的vichw00.vxd文件拷貝到/windows/system子目錄下,該文件是控件訪問硬件的驅動程序,使用控件前先用OpenDriver打開,最后用Close_Driver方法關閉。
把ocx子目錄下的tvichw32.ocx拷貝到/windows/system子目錄下,并在DOS命令行狀態(tài)下鍵入以下命令進行注冊:
  regsvr32tvichw32.ocx
在VB環(huán)境下通過菜單工程--部件--控件并選擇TVicHW32ActiveXControlModule將控件添加到工具箱中。
相關的屬性、方法及事件
方法OpenDriver打開支持訪問硬件
的驅動程序vichw.vxd(windows95下)
方法CloseDriver關閉驅動程序
屬性ActiveHWAsBool驅動程序打開
則為True;關閉為False
中斷事件OnHwInterrupt(ByValHwCounterAsLong,
ByValLPT_DataRegAsInteger,
  ByValLPT_StatusRegAsInteger,
  ByValScanCodeAsInteger
  )
  參數(shù)
 HwCounter:中斷次數(shù)
LPT_DataReg:如果使用IRQ7,
則為打印并口的數(shù)據(jù)
LPT_StatusReg:如果使用IRQ7,
則為打印并口的數(shù)據(jù)
ScanKode:如果使用IRQ1,
則為按鍵的掃描碼
屬性IRQNumber指定中斷號,
范圍IRQ1--15
屬性IRQMasked中斷非屏蔽則為True;
屏蔽為False。


  示例的窗體,程序運行后首先按Open_Driver鈕打開驅動程序,然后選擇Unmarsk復選框開放中斷,此時每按一次鍵框中分別顯示該鍵的掃描碼和中斷次數(shù)。處理其他中斷只需更改中斷號即可(中斷號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

->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 辽宁省| 漯河市| 永福县| 云龙县| 杭锦后旗| 南京市| 宽城| 秭归县| 临城县| 电白县| 庆安县| 西昌市| 同德县| 晋州市| 镇巴县| 越西县| 资溪县| 英山县| 永宁县| 庆云县| 宁河县| 吴堡县| 西青区| 武宁县| 静宁县| 泰和县| 中山市| 延安市| 周至县| 若羌县| 阿巴嘎旗| 华宁县| 桂阳县| 郴州市| 壶关县| 竹北市| 多伦县| 清河县| 蓝田县| 长汀县| 拜泉县|