一、設(shè)計(jì)任務(wù)
基于單片機(jī)的搶答器的設(shè)計(jì),實(shí)現(xiàn)搶答器的基本功能。
二、性能指標(biāo)要求
2.有一個(gè)主持人控制開關(guān)和6路搶答按扭,當(dāng)主持人允許搶答時(shí)才能進(jìn)行搶答操作,并用一個(gè)數(shù)碼管顯示搶答選手的號碼,同時(shí)其他選手不能再搶答。
3.當(dāng)主持人允許搶答后倒計(jì)時(shí)5秒時(shí)間,在這5秒內(nèi)搶答有效,過后就不能進(jìn)行搶答了。
4.電路上要加個(gè)蜂鳴器的電路,當(dāng)有選手搶答時(shí)蜂鳴器響一下。
5.當(dāng)有選手搶答后,進(jìn)行倒計(jì)時(shí)20秒作為選手回答問題時(shí)間,用兩個(gè)數(shù)碼管顯示,倒計(jì)時(shí)時(shí)間到時(shí)有聲光提示。
6.畫電路板時(shí)要增加下載接口,方便調(diào)試程序。
7.?dāng)U展功能(選做)
用按鍵可設(shè)置倒計(jì)時(shí)的時(shí)間,范圍在5秒到30秒之間。
三、設(shè)計(jì)思路及設(shè)計(jì)框圖
1.設(shè)計(jì)思路
本次設(shè)計(jì)是基于單片機(jī)STC89C52芯片來擴(kuò)展的搶答器。
首先先設(shè)置支持人開始搶答按鍵,在芯片的P1^6腳處接入按鍵,按鍵按下,蜂鳴器響來實(shí)現(xiàn)這個(gè)搶答開始信號。
在主持人開始允許搶答時(shí),六位選手連接的單片機(jī)從P1^0—P1^5口的任意一位選手進(jìn)行搶答,搶答時(shí)間為5s,搶答后設(shè)定回答問題時(shí)間為5s—30s,倒計(jì)時(shí)5s時(shí)LED燈亮,并且蜂鳴器響。
所搶答的選手號碼、搶答時(shí)間與回答時(shí)間均將字節(jié)送入數(shù)碼管中顯示。用兩個(gè)按鍵來掌控回答問題的時(shí)間,時(shí)間加計(jì)數(shù)與時(shí)間減計(jì)數(shù)。
當(dāng)需要重新進(jìn)行搶答時(shí)則按下與芯片的RST段(即9腳)連接的按鍵則可以實(shí)現(xiàn)。所搶答的選手號碼、搶答時(shí)間與回答時(shí)間均將字節(jié)送入數(shù)碼管中顯示。
P0口接的是一個(gè)四位一體共陰數(shù)碼管,P2.4、P2.2、P2.1、P2.0作為數(shù)碼管的位選。由于單片機(jī)自身IO口的驅(qū)動能力不能讓蜂鳴器發(fā)出聲音,因此要通過三極管NPN來放大電流,這樣才能使蜂鳴器發(fā)出聲音。
總體設(shè)計(jì)框圖:
電路原理圖:
部分程序:
#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í)函數(shù)
void dig_scan(unsigned char *dat); ?//數(shù)碼管顯示掃描
unsigned char KeyScan(void);?? ? ? ?//獨(dú)立按鍵掃描
void InitTimer0(void);?? ??? ??? ? ? //定時(shí)器0初始化
void alarm(void);?? ??? ? ? ? ? ? ? //報(bào)警函數(shù)
void AnswerTask(void);?? ? ? ? ? ? ? //搶答任務(wù)
void SetTime(void); ? ? ? ? ? ? ? //設(shè)置倒計(jì)時(shí)時(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)盤下載地址及提取碼。
紛傳點(diǎn)擊用微信打開即可,過程有點(diǎn)繁瑣請見諒。