access Paralel port under windows server 2003听说要用什么Windows API,但是不知道相关函数,望大侠赐教,感谢!!!
解决方案 »
- 关于AnimateWindow setwindowrgn的问题,求教!
- 一个错误,大家帮忙看看
- delphi做的窗体DLL,vc++调用,我的接口函数用什么数据类型好??
- 如何实现QQ好友的功能
- 大家帮我看看这句SQL语句什么地方出错了
- 怎样利用Sender取得动态创建的控件数组的下标?
- TTS还是不能调速度,这次我给100分
- 如何动态的得到ADOconnection中的provider?
- 恳请高手指点
- 为何DBRichEdit构件编辑和显示汉字时总成乱码?——急求好构件和解决方案!
- 本人第一次制作安装程序,先向前辈们请教!是关于用Wise9.02制作安装程序的几个问题,在次先谢谢了!
- 在程序中创建表时,如何动态生成表名,具体请看正文,谢谢!
使用and运算符可以对指定的位置0,例如:十六进制84H的二进制为:10000100,它的第三位为1,若要将第三位置为0,且其它位不变,可以使用:$84 and $FB = $80,80H的二进制值为10000000。 使用or运算符可以对指定的位置1,例如:十六进制84H的第二位为0,若要将第二位置为1,且其它位不变,可以使用:$84 or $02 = $86,86H的二进制值为10000110。 例子: 1、将数据端口378H的D2位的电位设置为低,即置0:B:=ReadPort($378);B:=B and $FB;WritePort($378,B); 2、将数据端口378H的D2位的电位设置为高,即置1:B:=ReadPort($378);B:=B or $04;WritePort($378,B); 3、判断数据端口378H的D2位的电位高低:B:=ReadPort($378);if ((B and $04)=$04) then//电位为高时的代码else//电位为低时的代码或:B:=ReadPort($378);if ((B or $FB)=$FF) then//电位为高时的代码else//电位为低时的代码 三、具体实现 下面的例子是控制并口的数据端口378H的各个位的电位高低。数据端口的8个位:D0~D7分别对应并行接口的2~9脚,关于并行接口其它的引脚的说明就查看相关资料,这里就不多说了。 首先运行 Delphi,新建一个工程,按一下F12在Form1的单元文件Unit1中加入读写端口的代码:function ReadPort(Port:WORD):BYTE;procedure WritePort(Port:WORD;ConByte:BYTE);function ReadPort(Port:WORD):BYTE;varB:BYTE;beginASMMOV DX, Port;IN AL, DX;MOV B, AL;END;Result:=B;end;procedure WritePort(Port:WORD;ConByte:BYTE);beginASMMOV DX, Port;MOV AL, ConByte;OUT DX, AL;END;end;
添加8个 CheckBox 组件,修改它们的 Caption(标题)属性分别为 D0 到 D7 ,将它们按右到左进行排列好。 双击 CheckBox1,在CheckBox1组件的OnClick(单击)事件中加入以下的程序代码:procedure TForm1.CheckBox1Click(Sender: TObject);varb:BYTE;beginb:=0;if CheckBox1.Checked thenb:=b or $01;if CheckBox2.Checked thenb:=b or $02;if CheckBox3.Checked thenb:=b or $04;if CheckBox4.Checked thenb:=b or $08;if CheckBox5.Checked thenb:=b or $10;if CheckBox6.Checked thenb:=b or $20;if CheckBox7.Checked thenb:=b or $40;if CheckBox8.Checked thenb:=b or $80;WritePort($378,b); //写数据端口end;
输入完成后,把CheckBox2到CheckBox8这7个CheckBox组件的OnClick事件设置为CheckBox1的OnClick事件:CheckBox1Click。 此时编译运行程序,已经可以通过点击这8个CheckBox来控制LPT1的数据端口的各个位的电位高低了。 下面再加入监控并口的数据端口状态的功能。 在Form1中加入一个Timer组件:Timer1,修改它的Enabled属性为False,Interval属性为1。 在Timer1的OnTimer事件中加入:procedure TForm1.Timer1Timer(Sender: TObject);varB:BYTE;beginB:=ReadPort($378); //读数据端口CheckBox1.Checked:=((B or $FE)=$FF);CheckBox2.Checked:=((B or $FD)=$FF);CheckBox3.Checked:=((B or $FB)=$FF);CheckBox4.Checked:=((B or $F7)=$FF);CheckBox5.Checked:=((B or $EF)=$FF);CheckBox6.Checked:=((B or $DF)=$FF);CheckBox7.Checked:=((B or $BF)=$FF);CheckBox8.Checked:=((B or $7F)=$FF);end;
再加入一个CheckBox组件,修改的Caption属性为“监控并口”,并在它的OnClick事件中加入:procedure TForm1.CheckBox9Click(Sender: TObject);beginTimer1.Enabled:=CheckBox9.Checked;end;
编译运行程序,点击“监控并口”,就可以监控并口LPT1数据端口378H的状态,并可以实时地修改它的状态。 为了方便查看、验证数据端口378H的状态,我做了一个小小的并口测试电路,该电路使用了一个打印接口、8个LED(发光二极管)和8个1K的电阻,连接线路如图所示:
按照电路图制作完成后,安装到电脑的并口上,运行编写好的程序就可以方便地查看数据端口378H的各个位的电位高低了。 最后,我们再来做一个走马灯实验。 先声明一个全局变量 tb:在“Form1:TForm1”的下面加上“tb:BYTE”:varForm1: TForm1;tb:BYTE; 再在Form1中加入一个Timer和一个CheckBox,修改Timer2的Enabled属性为False,修改Interval属性为300,双击Timer2,在它的OnTimer事件中加入:procedure TForm1.Timer2Timer(Sender: TObject);varB:BYTE;beginif tb=0 thentb:=1elsetb:=tb * 2;WritePort($378,tb);B:=ReadPort($378);CheckBox1.Checked:=((B or $FE)=$FF);CheckBox2.Checked:=((B or $FD)=$FF);CheckBox3.Checked:=((B or $FB)=$FF);CheckBox4.Checked:=((B or $F7)=$FF);CheckBox5.Checked:=((B or $EF)=$FF);CheckBox6.Checked:=((B or $DF)=$FF);CheckBox7.Checked:=((B or $BF)=$FF);CheckBox8.Checked:=((B or $7F)=$FF);end; 修改CheckBox10的Caption属性为“走马灯演示”,再双击CheckBox10,在它OnClick事件中加入:procedure TForm1.CheckBox10Click(Sender: TObject);beginTimer2.Enabled:=CheckBox10.Checked;end;
编译运行程序。
点击“走马灯演示”,有没有看到“走马灯”的效果?通过修改Timer2的Interval可以调节速度,更多、更Cool的效果就看你的创意了。 注意:以上嵌入汇编访问并口的方法只能在Win9X下使用,若要在WinNT/2K下访问并口应该使用 Windows API 函数或专门读写并口的DLL、VXD。 以上程序在Win98+Delphi6.0下测试通过http://www.yesky.com/20020801/1623061_1.shtml
参考 http://www.wideman-one.com/gw/tech/Delphi/iopm/
或google delphi giveio.sys
注意:以上嵌入汇编访问并口的方法只能在Win9X下使用,若要在WinNT/2K下访问并口应该使用 Windows API 函数或专门读写并口的DLL、VXD。
”请问有没有基于WinNT/2K下访问并口的具体方法?Google没辙了。
http://www.geekhideout.com/iodll.shtml
有IO库For Delphi的
Google能找到的又或者直接Ring0下操作端口的http://lysoft.7u7.net
或者利用技巧将程序转到ring0下