笔记本计算机并行口什么开启,直接访问和控制电脑的打印口(并行口)

直接访问和控制电脑的打印口 (并行口)

for Windows 98/ME/NT/2000/XP/2003

本程序利用直接端口 I/O

操作来访问并行口。

支持操作系统: Windows 98/ME/2000/XP/2003

程序编译环境: C++ Builder 5.0 / C++ Builder 6.0。

程序演示了:

① 直接向打印机输出数据, 这种方法可以行为单位打印, 每打印一行, 纸走一行的距离。

② 直接控制打印口输出脉冲信号, 输出如右图所示的 LED 循环轮流点亮/闪烁。

fa8fbce831b6bdb4361eded008ddc7e0.gif

打印口各引脚的定义:

1.选通, PC->Printer

2-9.数据(D0-D7)

10.应答(ACK),Printer->PC

11.忙(BUSY), Printer->PC

12.无纸(PE), Printer->PC

13.联机(SLCT), Printer->PC

14.自动换行(AUTO FD), PC->Printer

15.错误(ERROR), Printer->PC

16.初始化(INIT),PC->Printer

17.选择输出(SELECT IN), PC->Printer

18-25.地(GND)

程序提供了 TParallelPort 类, 可直接对打印口操作。

属性:

__property unsigned short Base; //并行口的开始地址, 默认值为 0x378

__property unsigned char  Data; //并行口的数据 D0-D7, 可读写

__property unsigned char  Flag; //并行口的状态, 包括 ~BUSY, ACK, PE,

ONLINE, ~ERROR 等, 这个属性是只读的

__property unsigned char  Ctrl; //并行口的状态, 包括 ~INIT, AUTOFD,

STORE 等, 这些属性是可写的。

Flag 的各个位的定义:

enum TPrnFlags

{

pfIdle    = 0x80, //F7 = ~BUSY

pfAck     = 0x40, //F6 = ACK

pfPE      = 0x20, //F5 = PE

pfOnLine  = 0x10, //F4 = ONLINE

pfNoError = 0x08, //F3 = ~ERROR

};

Ctrl 的各个位的定义:

enum TPrnCtrls

{

pcIRQE   = 0x10, //C4

pcSelect = 0x08, //C3

pcFInit  = 0x04, //C2 = ~INIT

pcAutoFD = 0x02, //C1

pcStore  = 0x01, //C0 = STORE

};

__property bool NoException; //这个属性是控制打印的, 默认为 false, 如果这个属性为 true,

打印不会抛出异常, 而是返回错误码

事件:

__property bool __fastcall (__closure *OnMakeSure)(TPrnError ErrCode);

//产生错误时会触发这个事件, 默认的处理是询问是否重试

错误代码:

enum TPrnError

{

peNoError = 0,

peNotOnLine = -1,

peOutOfPaper = -2,

pePrinterErr = -3,

};

方法:

int printf(const char *format,...); //参数与标准 C 的 printf 相同, 返回值为错误码,

这个函数是从打印机输出数据

int vprintf(const char* format, va_list paramList); //参数与标准 C 的

vprintf 相同, 这个函数是从打印机输出数据

void InitPrinter(int iInitDelay=2000, int iInitWait=1000); //初始化打印机,

两个参数分别是初始化时间和初始化之后的延时(ms)

程序还提供了以下函数, 是大家所熟悉的端口操作函数, 可直接操作电脑的硬件端口, 这些函数可直接使用:

unsigned char  inportb(unsigned short);

unsigned short inportw(unsigned short);

unsigned long  inportd(unsigned short);

void outportb(unsigned short, unsigned char );

void outportw(unsigned short, unsigned short);

void outportd(unsigned short, unsigned long );

程序采用 Yariv Kaplan 的 WinIo 2.0 来进行端口操作。

Yariv Kaplan 的主页: http://www.internals.com/

WinIo 2.0 使用非常简单, 提供一个初始化函数 InitializeWinIo(); 和 关闭结束函数 ShutdownWinIo();

在调用初始化函数成功之后, 就可以进行任意端口操作了, 在程序结束时调用关闭结束函数。

73ffe792cb216551f307cb0f965384a0.gif

直接操作并行口

- 下载完整的程序源代码188,665

字节 (下载

12318

次)

73ffe792cb216551f307cb0f965384a0.gif200,129

字节

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值