0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用打印機(jī)接口設(shè)計語音型搶答器

Wildesbeast ? 來源:福星電子網(wǎng) ? 作者:福星電子網(wǎng) ? 2020-08-15 11:59 ? 次閱讀

很多單位在開展文娛活動時有搶答一項,需要用到搶答器,普通搶答器使用通用集成電路制成,價格高、顯示方式簡單,性價比較差。而一般單位都有計算機(jī),如果利用計算機(jī)就可以很方便地構(gòu)成一臺功能強(qiáng)大而價格十分低廉的搶答器。下面介紹的是筆者實(shí)際制作使用的電路。

一、打印口工作原理簡介

參照圖1,PC機(jī)上的打印接口共有25根連線,其中18-25都是地線,因此實(shí)際

共有17根線,分成三類,8根數(shù)據(jù)線,可進(jìn)行數(shù)據(jù)輸出,5根狀態(tài)線,輸入,4根控制線,輸出。這三組線分別由打印口的三個寄存器控制,即378H(數(shù)據(jù)口),379H(狀態(tài)口),37AH(控制口),只要對這三個地址的寄存器讀或?qū)?,就可以輸入或輸出?shù)據(jù)。而對這三個地址的讀寫可以用C語言中的函數(shù)outportb(int port,int data)和 inportb(int port)來進(jìn)行,十分方便。

二、硬件電路圖

使用一片廉價的八緩沖器74LS244。

74LS244介紹:參考圖2,74LS244是三態(tài)輸出的八緩沖器,由2組、每組四路輸入、輸出構(gòu)成。每組有一個控制端,由控制端的高或低電平?jīng)Q定該組數(shù)據(jù)被接通還是斷開,功能表如下表所示。

電路介紹(參考圖3):將74LS244的控制端和分別接到打印機(jī)控制端口的兩個輸出端,接到一個端口也可以,但要增加一個反相器,因控制端口有多余線可用,就分別接兩根線,可以省些硬件。利用這兩個端口分別接通兩組中的一組,將兩組的輸出端對應(yīng)并聯(lián)起來,接入打印機(jī)的狀態(tài)端口,這樣就可以輸入8路數(shù)據(jù)了。如再接入一片74LS244,可以把輸入擴(kuò)展到16路。打印口控制端的另一根線接入一個交流晶閘管光耦(型號為MC3020),光耦的另一端接一個雙向晶閘管和一個電燈,按圖示,當(dāng)該口為低電平時,指示燈亮表示可以開始搶答。

三、程序的編制

這個制作的核心程序編寫是非常簡單的,只要使打印口的控制端口的低兩位分時為低電平,然后分別讀入狀態(tài)端口的數(shù)據(jù),就可以判斷是否有人搶答了。這部份的程序如下:

#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); /*讀輸入口數(shù)據(jù)*/

outportb(port_ctrl,CTRL_L); /*切入第二組*/

inp_data_l=inportb(port_inp); /*讀輸入口數(shù)據(jù)*/

inp_data=((inp_data_h&&0xf0)||(inp_data_l》》4); /*兩次讀到的數(shù)據(jù)合并*/

if(inp_data!=0x77) /*高4位輸入端無任何腳接地時,應(yīng)讀到7,請參考圖1及電路圖3*/

break; /*每組僅用高4位,兩組合并后0x77為兩次均無任何腳接地*/

delay(10); /*延時10毫秒,實(shí)際可在此作一些界面變化的處理,增加美觀*/

}

在實(shí)際制作中為充分利用PC機(jī)的資源,充分美化搶答器,采用了全圖形化的編程,并加入了聲音功能。即將搶答的組數(shù)在顯示器上用大字顯示出,并同時利用PC機(jī)上的聲卡報出相應(yīng)組數(shù)。具體程序由各人及計算機(jī)檔次而定,筆者編的程序可在386機(jī)上流暢地運(yùn)行。

四、注意事項

如果讀者實(shí)際制作這個電路,還要注意以下幾個問題:

1.打印口地址的確定,并非每一臺計算機(jī)的打印口地址都是以上所列的地址,最常見的還有278H,279H,27AH。因此針對不同的計算機(jī)自動尋找打印口很重要,在計算機(jī)的內(nèi)存中存放有打印口地址,自動查找打印口可用如下程序:

unsigned int far *fpb=(unsigned far * )0x00400008; /*在內(nèi)存40:08H處單元中有打印地址*/

port_data=*fpb; /*取打印機(jī)數(shù)據(jù)口的地址*/

port_inp=*fpb+1; /*狀態(tài)端口為數(shù)據(jù)口地址加1*/

port_ctrl=*fpb+2; /*控制端口為數(shù)據(jù)端口加2*/

2. 以上設(shè)計是基于標(biāo)準(zhǔn)的打印口設(shè)置,如果主板的打印口設(shè)計不標(biāo)準(zhǔn),則以上編程會有問題。以筆者的調(diào)查,所找到的所有386、586兼容機(jī)(約10個不同品種的主板)及以上機(jī)均能正常工作,但486機(jī)主板較混亂,筆者找了5、6種486兼容機(jī),沒一臺能用。但所有的品牌機(jī)都沒有發(fā)現(xiàn)有這方面的問題,為謹(jǐn)慎起見,自制前最好對自已所用計算機(jī)的打印口檢測一下,即將狀態(tài)線分別接地,然后讀出狀態(tài)口數(shù)據(jù),看是否與接線相符。在計算機(jī)用語音報出‘開始’后要先檢測一次輸入,如果已有人按下按鈕,則屬范規(guī),如無人按下,再點(diǎn)亮指示燈,表示搶答可以開始。DOS下的聲卡發(fā)聲程序編起來比較麻煩,而且一定要計算機(jī)有聲卡才行,如果打算讓舊計算機(jī)發(fā)揮余熱,而又想有聲音功能,那不妨多花上十多元錢按圖4做一個發(fā)聲電路。這是一個D/A轉(zhuǎn)換器,只要讀出WAV文件的數(shù)據(jù)并逐一送往數(shù)據(jù)端口,就可以發(fā)聲了,這部份程序如下:

void wave(char *file) /*發(fā)聲函數(shù),參數(shù)為文件名*/

{ char ch=‘