用VC实现PC并行端口数字信息的输入/输出
2010-06-27 20:41:59 来源:WEB开发网(3):读写I/O口
bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
GetPortVal函数从指定端口读取一个BYTE/WORD/DWORD类型的值;
wPortAddr是指定一个端口地址值;
pdwPortVal为指向一双字节型变量的指针,该变量存储从wPortAddr端口读取的值;
bSize指定读取字节数,值可以为1,2或4。
SetPortVal函数向指定端口写入一个BYTE/WORD/DWORD类型的值;
除dwPortVal为输入参数,表示待写入外,其余个变量含义与GetPortVal相似。
PC并行口数字输出的VC实现(示例工程下载)
为了测试并行口的数字输出,可以准备12支LED发光二极管,将LED的阳极分别与数据端口引脚Pin2~Pin9和控制端口引脚Pin1、Pin14、Pin16、Pin17相连接;将LED的阴极连接在一起与并行口的归地引脚GND相连即可。在实际控制应用中不能这样连接,因为数据端口引脚、控制端口引脚输出的电流非常小,只有10mA左右,必须添加 其它硬件电路。
(1):数据端口数字输出的VC实现
//获得数据端口地址
WORD m_nport=(WORD)0x378;
//获得要写入数据端口的值WriteValue(数据范围为0~255)
DWORD m_nValue=(DWORD)WriteValue;
//调用WinIo库函数SetPortVal写端口值
SetPortVal(m_nport, m_nValue, 1);//write a BYTE value to an I/O port
(2):控制端口数字输出的VC实现
//获得控制端口地址
WORD m_nport=(WORD)0x37A;
//获得控制端口的值,保持高位值不变,将要输出的值从低4位输出,且使连接器上的电位状态与想输出的值一致
DWORD temp_dwPortVal;
unsigned int temp_aa;
GetPortVal(m_nport, &temp_dwPortVal, 1); //reads a BYTE value from an I/O port
temp_aa=(unsigned int)temp_dwPortVal;
temp_aa=temp_aa&0x0F0; //取低8位值,将低4位置为0;高4位不变;
temp_aa=temp_aa^0x0B; //将低4位中C0、C1、C3置为1,C2置为0;高4位不变;
//获得要写入控制端口的值WriteValue(数据范围为0~15)
unsigned int WriValue;
WriValue=WriteValue&0x0F; //取低4位;
temp_aa=temp_aa^WriValue; //将写入值的低4位中的C0、C1、C3取反,C2位不变,高4位保持端口值不变
SetPortVal(m_nport, (DWORD)temp_aa, 1); //写出的值中,高4位保持端口原来的值不变,
//低4位是写入什么电平,连接器上既是什么电平
更多精彩
赞助商链接