#111723#良多单元在展开娱乐运动时有抢答一项,须要用到抢答器,一般抢答器应用通用集成电路制成,价钱高、表现方法简略,性价比拟差。而个别单元都有盘算机,假如应用盘算机便可以很便利地形成一台功效强盛而价钱非常昂贵的抢答器。上面先容的是笔者现实制造应用的电路。
一、打印口任务道理简介
参照图1,PC机上的打印接口共有25根连线,此中18-25都是地线,因而现实
共有17根线,分红三类,8根数据线,可停止数据输出,5根状况线,输入,4根把持线,输出。这三组线分辨由打印口的三个存放器把持,即378H(数据口),379H(状况口),37AH(把持口),只有对这三个地点的存放器读或写,便可以输入或输出数据。而对这三个地点的读写能够用C言语中的函数outportb(int port,int data)和 inportb(int port)来停止,非常便利。
二、硬件电路图
应用一片便宜的八缓冲器74LS244。
74LS244先容:参考图2,74LS244是三态输出的八缓冲器,由2组、每组四路输入、输出形成。每组有一个把持端,由把持真个高或低电平决议该组数据被接通仍是断开,功效表以下表所示。
电路先容(参考图3):将74LS244的把持端和分辨接到打印机把持端口的两个输出端,接到一个端口也能够,但要增添一个反相器,因把持端口有过剩线可用,就分辨接两根线,能够省些硬件。应用这两个端口分辨接通两组中的一组,将两组的输出端对应并联起来,接入打印机的状况端口,如许便可以输入8路数据了。如再接入一片74LS244,能够把输入扩大到16路。打印口把持真个另一根线接入一个交换晶闸管型光耦(型号为MC3020),光耦的另一端接一个双向晶闸管和一个电灯,按图示,当该口为低电平常,唆使灯亮表现能够开端抢答。
三、顺序的体例
这个制造的中心顺序编写长短常简略的,只有使打印口的把持端口的低两位分时为低电平,而后分辨读入状况端口的数据,便可以断定能否有人抢答了。这部分的顺序以下:
#define CTRL_H 0x03 /*第一组切入,此时第16脚为0,17脚为1*/
#define CTRL_L 0x0f /*第二组切入,此时第17脚为0,16脚为1*/
for(;;)
{ outportb(port_ctrl,CTRL_H); /*port_ctrl为把持端口地点,见下阐明*/
inp_data_h=inportb(port_inp); /*读输进口数据*/
outportb(port_ctrl,CTRL_L); /*切入第二组*/
inp_data_l=inportb(port_inp); /*读输进口数据*/
inp_data=((inp_data_h&&0xf0)||(inp_data_l》》4); /*两次读到的数据兼并*/
if(inp_data!=0x77) /*高4位输入端无任何脚接地时,应读到7,请参考图1及电路图3*/
break; /*每组仅用高4位,两组兼并后0x77为两次均无任何脚接地*/
delay(10); /*延时10毫秒,现实可在此作一些界面变更的处置,增添雅观*/
}
在现实制造中为充足应用PC机的资本,充足丑化抢答器,采取了全图形化的编程,并参加了声响功效。行将抢答的组数在表现器上用大字表现出,并同时应用PC机上的声卡报出响应组数。详细顺序由大家及盘算机品位而定,笔者编的顺序可在386机下流畅地运转。
四、留神事项
假如读者现实制造这个电路,还要留神以下几个成绩:
1.打印口地点确实定,并非每一台盘算机的打印口地点都是以上所列的地点,最罕见的另有278H,279H,27AH。因而针对差别的盘算机主动寻觅打印口很主要,在盘算机的内存中寄存有打印口地点,主动查找打印口可用以下顺序:
unsigned int far *fpb=(unsigned far * )0x00400008; /*在内存40:08H处单位中有打印地点*/
port_data=*fpb; /*取打印机数据口的地点*/
port_inp=*fpb+1; /*状况端口为数据口地点加1*/
port_ctrl=*fpb+2; /*把持端口为数据端口加2*/
2. 以上计划是基于尺度的打印口设置,假如主板的打印口计划不尺度,则以上编程会有成绩。以笔者的考察,所找到的全部386、586兼容机(约10个差别种类的主板)及以上机均能畸形任务,但486机主板较凌乱,笔者找了5、6种486兼容机,没一台能用。但全部的品牌机都没有发明有这方面的成绩,为谨严起见,克己前最好对自已所用盘算机的打印口检测一下,行将状况线分辨接地,而后读出状况口数据,看能否与接线符合。在盘算机用语音报出‘开端’后要先检测一次输入,假如已有人按下按钮,则属范规,如无人按下,再点亮唆使灯,表现抢答能够开端。DOS下的声卡发声顺序编起来比拟费事,并且必定要盘算机有声卡才行,假如盘算让旧盘算机施展余热,而又想有声响功效,那无妨多花上十多元钱按图4做一个发声电路。这是一个D/A转换器,只有读出WAV文件的数据并逐个送往数据端口,便可以发声了,这部分顺序以下:
void wave(char *file) /*发声函数,参数为文件名*/
{ char ch=‘ ’;
FILE *fp;
if((fp=fopen(file,“rb”))==NULL) /*打不开文件的惯例处置*/
{ printf(“File%s not found!”,*file);
exit(1);
}
while(!feof(fp)) /*假如未到文件尾*/
{ outportb(port_data,(int)ch); /*掏出数据并送往打印口数据端口*/
delay(3); /*延时3毫秒(取决于灌音时的采样速度)*/
ch=fgetc(fp);
}
fclose(fp);
}
最后给出本顺序的流程图。
更多内容阅读推荐:
冰箱排水孔堵塞怎么办