張寶青 張敬爽
摘 要:搶答器使用非常廣泛,尤其是舉辦一些競賽活動,以往通過可控硅制作的搶答器一般為4路,在多人搶答時往往不夠用,筆者利用單片機設計了較為實用的8路搶答器,同時加入了語音提示以及數字顯示功能,并且能方便的擴展為16路搶答器,該方法簡單實用,讀者可以自行制作。
關鍵字:搶答器 單片機 復位 語音
凌陽Spce061A是一款十六位通用單片機,筆者用其設計了簡單實用的搶答器,具體設計如下:
一、硬件電路設計
本搶答器主要供學生自行制作使用,為簡化電路設計及制作,本例采用了凌陽Spce061A精簡開發(fā)版作為核心控制部分。同時,采用數碼管來顯示搶答者的序號,采用1~8按鍵K1~K8作為8個搶答者的輸入信號,通過音頻接口輸出語音提示。
具體硬件連如下:
二、搶答器程序設計
在程序設計上,本例采用了按鍵掃描的方法,在主程序中掃描鍵值,如果有鍵按下轉向執(zhí)行相應的處理程序,即點亮相應的數字。同時播放相應的語音提示信息“××號,請回答”,執(zhí)行完處理程序進入死循環(huán),不再響應任何搶答按鍵狀態(tài),等待主持人按下復位鍵會進行下一輪搶答。該設計利用單片機的復位鍵,可以節(jié)省一個IO口,同時也簡化了程序設計以及程序編寫。
具體程序設計流程如下:
三、程序清單
筆者在本例中的程序運用C語言編寫,具有較好的可移植性,詳細程序清單如下:
#include “spce061a.h”
void PlaySnd(int SndIndex, int DAC_Channel) //語音播放模塊
SACM_S480_Initial(1);//初始化為自動播放
SACM_S480_Play(SndIndex, DAC_Channel, 3);// 開始播放一段語音
while((SACM_S480_Status(1)&0x0001)!=0)//是否播放完畢?
SACM_S480_ServiceLoop(1);//解碼并填充隊列
*(unsigned int*)0x7012=1;//清看門狗
SACM_S480_Stop(1);//停止播放
main(1)
unsigned int key=0;
intdig[8]={0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f};
*P_IOA_Dir=0x0000;//IOA低8位初始化為上拉輸入
*P_IOA_Attrib=0x0000;
*P_IOA_Buffer=0x00ff;
*P_IOB_Dir=0x00ff;//IOB低8位初始化為同相低電平輸出
*P_IOB_Attrib=0x00ff;
*P_IOB_Buffer=0x0000;//判斷是否有鍵按下
*P_Watchdog_Clear=1;
key=*P_IOA_Data^0x00ff;//獲取按鍵輸入值
switch(key)
case 0x0001://Key1鍵按下
*P_IOB_Buffer=dig[0];//顯示數字“1”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(0,3);//播放語音“1”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0002://Key2鍵按下
*P_IOB_Buffer=dig[1];//顯示數字“2”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(1,3);//播放語音“2”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0004:
*P_IOB_Buffer=dig[2];//顯示數字“3”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(2,3);//播放語音“3”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0008:
*P_IOB_Buffer=dig[3];//顯示數字“4”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(3,3);//播放語音“4”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0010:
*P_IOB_Buffer=dig[4];//顯示數字“5”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(4,3);//播放語音“5”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0020:
*P_IOB_Buffer=dig[5];//顯示數字“6”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(5,3);//播放語音“6”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0040:
*P_IOB_Buffer=dig[6];//顯示數字“7”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(6,3);//播放語音“7”
PlaySnd(8,3);//播放語音“號,請回答”
break;
case 0x0080:
*P_IOB_Buffer=dig[7];//顯示數字“8”
PlaySnd(9,3);//播放語音“丁冬”
PlaySnd(7,3);//播放語音“8”
PlaySnd(8,3);//播放語音“號,請回答”
break;
default:
break;
while(1)//死循環(huán),等待復位進行下一輪搶答
*P_Watchdog_Clear=1;
本款搶答器設計簡單,易于實現,學生可自行制作,并且數字顯示部分學生可以采用發(fā)光二極管制作一個大一點的數字,采用集成驅動ULN2003或七個三極管9013驅動即可,既鍛煉了學生動手能力,作品又具有較強的實用性。
參考文獻:
1.羅亞非.《凌陽16位單片機應用基礎》.北京航空航天大學出版社,2005年5月
2.袁太生.《單片機應用技術(凌陽系列)》.中國電力出版社,2007年12月
作者單位:廊坊職業(yè)技術學院汽車工程系