GIVEIO库及C发声程序

(1)GIVEIO是WINDOWS平台上的一个并口驱动,可以用来直接驱动并口寄存器进行控制和操作。取得GIVEIO库之后按照里面的文档安装GIVEIO.SYS即可。一般步骤如下:

1.首先将GIVEIO目录下的GIVEIO.SYS文件复制到C:/WINDOWS/system32/drivers目录下面;
2.然后打开控制面板里的添加硬件,选择“是,我已经连接了此硬件”;
3.下一步,选择添加新的硬件设备;
4.下一步,选择“安装我手动从列表选择的硬件”;
5.下一步,选择“端口(COM和LPT)”;
6.下一步,选择从磁盘安装,在路径中选择 GIVEIO目录下的giveio.inf文件,然后一直下去就OK了;
      最后打开设备管理器,在设备管理器的端口里能看到GIVEIO端口(通常是个COM口),就表示安装正常了。
(2)使用GIVEIO库 

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <conio.h>
typedef struct {
      short int pitch;
      short int duration;
} NOTE;
NOTE notes[] = {{14, 500}, {16, 500}, {12, 500}, {0, 500}, {7, 1000}};
void setfreq(int hz)
{
       hz = 1193180 / hz;      // clocked at 1.19MHz
       _outp(0x43, 0xb6);      // timer 2, square wave
       _outp(0x42, hz);
       _outp(0x42, hz >> 8);
}
void playnote(NOTE note)
{
      _outp(0x61, _inp(0x61) | 0x03);   // start speaker going
      setfreq((int)(400 * pow(2, note.pitch / 12.0)));
      Sleep(note.duration);
      _outp(0x61, _inp(0x61) & ~0x03);  // stop that racket!
}
int main(int argc, char* argv[])
{
     int i;
     HANDLE h;
     h = CreateFile("////.//giveio", GENERIC_READ, 0, NULL,
     OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     if(h == INVALID_HANDLE_VALUE)
     {
           printf("Couldn't access giveio device/n");
           return -1;
     }
     for(i=0; i < sizeof(notes)/sizeof(int); ++i)
           playnote(notes[i]);
     CloseHandle(h);
     return 0;
}
有几点需要注意:

1,////.//giveio是打开的设备,由于是用//转义表示/,所以上述其实是表示// . /

2,这种底层的编程很少。以上_outp访问的是底层寄存器,功能如注释。

3,这种操作都需要<conio.h>这个头文件。

你可能感兴趣的:(GIVEIO库及C发声程序)