一、設(shè)計任務(wù)
基于單片機的搶答器的設(shè)計,實現(xiàn)搶答器的基本功能。
二、性能指標要求
2.有一個主持人控制開關(guān)和6路搶答按扭,當主持人允許搶答時才能進行搶答操作,并用一個數(shù)碼管顯示搶答選手的號碼,同時其他選手不能再搶答。
3.當主持人允許搶答后倒計時5秒時間,在這5秒內(nèi)搶答有效,過后就不能進行搶答了。
4.電路上要加個蜂鳴器的電路,當有選手搶答時蜂鳴器響一下。
5.當有選手搶答后,進行倒計時20秒作為選手回答問題時間,用兩個數(shù)碼管顯示,倒計時時間到時有聲光提示。
6.畫電路板時要增加下載接口,方便調(diào)試程序。
7.擴展功能(選做)
用按鍵可設(shè)置倒計時的時間,范圍在5秒到30秒之間。
三、設(shè)計思路及設(shè)計框圖
1.設(shè)計思路
本次設(shè)計是基于單片機STC89C52芯片來擴展的搶答器。
首先先設(shè)置支持人開始搶答按鍵,在芯片的P1^6腳處接入按鍵,按鍵按下,蜂鳴器響來實現(xiàn)這個搶答開始信號。
在主持人開始允許搶答時,六位選手連接的單片機從P1^0—P1^5口的任意一位選手進行搶答,搶答時間為5s,搶答后設(shè)定回答問題時間為5s—30s,倒計時5s時LED燈亮,并且蜂鳴器響。
所搶答的選手號碼、搶答時間與回答時間均將字節(jié)送入數(shù)碼管中顯示。用兩個按鍵來掌控回答問題的時間,時間加計數(shù)與時間減計數(shù)。
當需要重新進行搶答時則按下與芯片的RST段(即9腳)連接的按鍵則可以實現(xiàn)。所搶答的選手號碼、搶答時間與回答時間均將字節(jié)送入數(shù)碼管中顯示。
P0口接的是一個四位一體共陰數(shù)碼管,P2.4、P2.2、P2.1、P2.0作為數(shù)碼管的位選。由于單片機自身IO口的驅(qū)動能力不能讓蜂鳴器發(fā)出聲音,因此要通過三極管NPN來放大電流,這樣才能使蜂鳴器發(fā)出聲音。
總體設(shè)計框圖:
電路原理圖:
部分程序:
#include <reg52.h>
sbit BEEP = P2^0;
sbit LED1 = P2^3;
sbit LED2 = P2^2;
sbit LED3 = P2^1;
#define duanPore?? ?P0?? ??? ?//數(shù)碼管段控制端口,高電平有效
sbit DIG1 = P2^4;
sbit DIG2 = P2^5;
sbit DIG3 = P2^6;
sbit DIG4 = P2^7;
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
sbit KEY3 = P1^2;
sbit KEY4 = P1^3;
sbit KEY5 = P1^4;
sbit KEY6 = P1^5;
sbit KEY7 = P3^2;
sbit KEY8 = P3^3;
unsigned char code tab_duan[19] =
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,
0x40,0x00,0x48
};
unsigned char dat_buf[4] = {17, 17, 0, 5};
int time = 5, time1 = 5, time2 = 20;
unsigned char i = 0;
unsigned int count = 0;
bit flag_lock = 1;
void DelayMs(unsigned int ms);?? ??? ?//延時函數(shù)
void dig_scan(unsigned char *dat); ?//數(shù)碼管顯示掃描
unsigned char KeyScan(void);?? ? ? ?//獨立按鍵掃描
void InitTimer0(void);?? ??? ??? ? ? //定時器0初始化
void alarm(void);?? ??? ? ? ? ? ? ? //報警函數(shù)
void AnswerTask(void);?? ? ? ? ? ? ? //搶答任務(wù)
void SetTime(void); ? ? ? ? ? ? ? //設(shè)置倒計時時間
void main(void)
{
BEEP = 0;
LED1 = 1;
InitTimer0();
time = time1;
while(1)
{
if(KeyScan() == 7)
{
alarm();
AnswerTask();
}
if(KeyScan() == 8)
{
alarm();
SetTime();
}
dat_buf[0] = 17;
dat_buf[1] = 17;
dat_buf[2] = time / 10;
dat_buf[3] = time % 10;
dig_scan(dat_buf);
}
}
資料內(nèi)容:
需要全部資料可從我的里資源下載。
也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。
紛傳點擊用微信打開即可,過程有點繁瑣請見諒。