設(shè)計(jì)編號(hào):Q001
資料下載
功能要求:
以單片機(jī)為核心,設(shè)計(jì)一個(gè)4位競(jìng)賽搶答器:同時(shí)供4名選手或4個(gè)代表隊(duì)比賽,分別用4個(gè)按鈕S0~S4表示。
1.設(shè)置一個(gè)系統(tǒng)清除和搶答控制開(kāi)關(guān)S,開(kāi)關(guān)由主持人控制。
2.搶答器具有鎖存與顯示功能。即選手按按鈕,鎖存相應(yīng)的編號(hào),并在優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清除為止。
3.搶答器具有定時(shí)搶答功能,且一次搶答的時(shí)間由主持人設(shè)定(如20秒)。
4.當(dāng)主持人啟動(dòng)“開(kāi)始”鍵后,定時(shí)器進(jìn)行減計(jì)時(shí),同時(shí)揚(yáng)聲器發(fā)出短暫的聲響,聲響持續(xù)的時(shí)間為0.5s左右。
參賽選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手的編號(hào)和搶答的時(shí)間,并保持到主持人將系統(tǒng)清除為止。
5.如果在主持人啟動(dòng)"開(kāi)始"鍵前搶答 ,搶答無(wú)效。且顯示器上會(huì)顯示搶答選手編號(hào)。
6.如果定時(shí)時(shí)間已到,無(wú)人搶答,本次搶答無(wú)效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示00。
1.2 任務(wù)和要求
本設(shè)計(jì)是以搶答為出發(fā)點(diǎn)??紤]到依需設(shè)定限時(shí)回答的功能,利用AT89C51單片機(jī)及外圍接口實(shí)現(xiàn)的搶答系統(tǒng),利用單片機(jī)的定時(shí)器/計(jì)數(shù)器定時(shí)和記數(shù)的原理,將軟、硬件有機(jī)地結(jié)合起來(lái),使得系統(tǒng)能夠正確地進(jìn)行計(jì)時(shí),同時(shí)使數(shù)碼管能夠正確地顯示時(shí)間。用開(kāi)關(guān)做鍵盤輸出,發(fā)光二極管和蜂鳴器發(fā)出提示。同時(shí)系統(tǒng)能夠?qū)崿F(xiàn):在搶答中,只有開(kāi)始后搶答才有效,如果在開(kāi)始搶答前搶答為無(wú)效;在軟件中還應(yīng)用了外部中斷,通過(guò)中斷解除搶答的鎖存,似的設(shè)計(jì)更加靈活,實(shí)用性更強(qiáng)。
本設(shè)計(jì)主要設(shè)計(jì)指標(biāo):
(1) 按鍵輸入模塊,包括主持人時(shí)間加,時(shí)間減,開(kāi)始搶答,新一輪4個(gè)按鍵和選手1號(hào)到4號(hào)共搶4答按鍵;
(2) 顯示模塊,可以搶答實(shí)現(xiàn)倒計(jì)時(shí)和顯示搶答選手編號(hào)。
(3) 蜂鳴器模塊,用于倒計(jì)時(shí)提醒,倒計(jì)時(shí)開(kāi)始后發(fā)出短暫的聲響,聲響持續(xù)的時(shí)間為0.5s左右。
演示視頻:
設(shè)計(jì)說(shuō)明目錄
1 概述 3
1.1 課程設(shè)計(jì)目的 3
1.2 任務(wù)和要求 3
1.3 系統(tǒng)結(jié)構(gòu)圖 4
2 理論分析與計(jì)算 4
3 硬件設(shè)計(jì) 4
3.1 AT89C51最小系統(tǒng) 5
3.2 顯示模塊 6
3.3鍵盤模塊 7
3.4蜂鳴器模塊 8
4 軟件設(shè)計(jì) 9
4.1 主程序 10
4.2 按鍵掃描子函數(shù) 12
4.3顯示子程序 13
4.4蜂鳴器提示子函數(shù) 14
5 PROTEUS EDA仿真測(cè)試 15
5.1 PROTEUS EDA仿真圖繪制 15
5.2 測(cè)試 15
6 總結(jié)以及展望 18
參考文獻(xiàn) 19
1 概述
1.1 課程設(shè)計(jì)目的
(1) 綜合所學(xué)的單片機(jī)原理及接口技術(shù)等課程的理論知識(shí)完成本課程設(shè)計(jì);
(2) 學(xué)習(xí)并掌握基本電路設(shè)計(jì)與使用方法,單片機(jī)的編程與應(yīng)用方法;
(3) 提高綜合分析、解決實(shí)際問(wèn)題的能力。
4.1 主程序
主程序完成外部中斷初始化、定時(shí)器初始化、蜂鳴器模塊初始化。主程序掃描主持人不斷掃描按鍵,進(jìn)行對(duì)應(yīng)的操作。
進(jìn)入主程序后,顯示顯示預(yù)設(shè)的倒計(jì)時(shí)數(shù)字20,程序掃描主持人按鍵倒計(jì)時(shí)加減鍵和開(kāi)始按鍵。按下開(kāi)始按鍵后,倒計(jì)時(shí)開(kāi)始工作,實(shí)時(shí)刷新倒計(jì)時(shí)數(shù)字,每倒計(jì)時(shí)1秒蜂鳴器beep引腳拉低0.5秒,蜂鳴器短鳴0.5秒。在掃描到選手按下按鍵后,倒計(jì)時(shí)定時(shí)器停止工作,顯示選手編號(hào)和按下?lián)尨疰I的時(shí)間。
主要(關(guān)鍵)代碼:
EA=1;
EX0=1;//外部中斷0
IT0=1;//設(shè)置下降沿觸發(fā)中斷0
TMOD=0x11;
TH0=(65536-50000)/256;//這是50ms的
TL0=(65536-50000)%256;
ET0=1;
TR0=0;
TH1=(65536-50000)/256;//這是50ms的
TL1=(65536-50000)%256;
ET1=1;
TR1=1;
time=20; //定時(shí)時(shí)間
num=0; //選手編號(hào)
flag=0; //搶答模式標(biāo)志位
beep=0;//蜂鳴器為0 不響
此段程序是完成外部中斷初始化、定時(shí)器初始化、蜂鳴器模塊初始化。完成后進(jìn)入大循環(huán)。
TempData[2]=dofly_DuanMa[time/10];
//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[3]=dofly_DuanMa[time%10];
if(num!=0)
m=1;
if(start==0)
{
DelayMs(10);
if(start==0)
{
flag=1;
while(!start);
}
}
這段函數(shù)完成了倒計(jì)時(shí)的顯示和掃描是否開(kāi)始倒計(jì)時(shí)。在沒(méi)有開(kāi)始搶答時(shí),選手按下按鍵會(huì)顯示選手編號(hào)和清零時(shí)間,一起防止選手搶答。開(kāi)始搶答后,標(biāo)志位flag變?yōu)?。開(kāi)始執(zhí)行按鍵掃描函數(shù)check2();
void check1()
{
if(num==1)
{
TempData[0]=dofly_DuanMa[num/10];
//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[1]=dofly_DuanMa[num%10];
beep=0;
Display(0,8); //數(shù)碼管顯示函數(shù)
TR0=0;
while(m);
}
假如按鍵1按下,會(huì)顯示選手編號(hào)。同時(shí)程序會(huì)卡在while(m);循環(huán)。此時(shí)除了新一輪按鍵之外的任何按鍵都系統(tǒng)沒(méi)有任何變化。
新一輪按鍵是系統(tǒng)復(fù)位,即使程序一直在執(zhí)行while(m)循環(huán),按下按鍵后,程序會(huì)執(zhí)行一次硬件復(fù)位,將變量清零,函數(shù)重新執(zhí)行按鍵掃描。
4.2 按鍵掃描子函數(shù)
關(guān)鍵代碼介紹
if(key1==0)
{
DelayMs(10);
if(key1==0)
{
num=1;
while(!key1);
}
}
程序一直判斷按鍵引腳電壓,按下按鍵電壓為0。按鍵會(huì)產(chǎn)生抖動(dòng),需要進(jìn)行消抖處理,演示10毫秒后,如果按鍵電壓還是0,令按鍵數(shù)目num為1。表示按下的按鍵是按鍵1。供主函數(shù)處理按鍵消息。
4.3顯示子程序
關(guān)鍵代碼介紹
void Display(unsigned char FirstBit,unsigned char Num)
{
unsigned char i;
for(i=0;i<Num;i++)
{
DataPort=0; //清空數(shù)據(jù),防止有交替重影
DUAN=1; //段鎖存
DUAN=0;
DataPort=dofly_WeiMa[i+FirstBit]; //取位碼
WEI=1; //位鎖存
WEI=0;
DataPort=TempData[i]; //取顯示數(shù)據(jù),段碼
DUAN=1; //段鎖存
DUAN=0;
DelayMs(2); // 掃描間隙延時(shí),時(shí)間太長(zhǎng)會(huì)閃爍,太短會(huì)造成重影
}
}
該函數(shù)用于動(dòng)態(tài)掃描數(shù)碼管。輸入?yún)?shù) FirstBit 表示需要顯示的第一位,如賦值2表示從第三個(gè)數(shù)碼管開(kāi)始顯示,如輸入0表示從第一個(gè)顯示。 Num表示需要顯示的位數(shù),如需要顯示99兩位數(shù)值則該值輸入2。顯示主要控制74HC573鎖存數(shù)據(jù)。先清除數(shù)據(jù),清段鎖存。然后選擇位碼。開(kāi)位鎖存將數(shù)據(jù)存在位鎖存器,選擇到了需要顯示的數(shù)碼管。位鎖存完成后將數(shù)據(jù)寫進(jìn)段鎖存數(shù)據(jù),將需要顯示的數(shù)據(jù)寫到數(shù)碼管中。
4.4蜂鳴器提示子函數(shù)
蜂鳴器的正極接到VCC(+5V)電源上面,蜂鳴器的負(fù)極接到三極管的發(fā)射極E,三極管的基極B經(jīng)過(guò)限流電阻R3后由單片機(jī)的beep引腳控制,當(dāng)beep輸出低電平時(shí),三級(jí)管QS截止,沒(méi)有電流流過(guò)線圈,蜂鳴器不發(fā)聲;當(dāng)beep輸出高電平時(shí),三級(jí)管導(dǎo)通,這樣蜂鳴器的電流形成回路,發(fā)出聲音。因此,我們可以通過(guò)程序控制beep腳的電平來(lái)使蜂鳴器發(fā)出聲音和關(guān)閉。
beep=0;
if(t==20)//設(shè)置為20,就是0.5s為高0.5s為低
{
beep=1;
t=0;
time--;
TempData[2]=dofly_DuanMa[time/10];//分解顯示信息,如要顯示68,則68/10=6 68%10=8
TempData[3]=dofly_DuanMa[time%10];
if(time<=0)
{
time=0;
}
}
在50ms一次的定時(shí)器0中斷中,每10次中斷令蜂鳴器置零。第20次中斷令蜂鳴器置一。以此產(chǎn)生0.5s短暫提醒。
5 PROTEUS EDA仿真測(cè)試
5.1 PROTEUS EDA仿真圖繪制
圖 7仿真圖
5.2 測(cè)試
1.初始化。
圖8 初始化
2.未按下開(kāi)始搶答鍵,選手搶答無(wú)效。
圖9 搶答無(wú)效
3.按下開(kāi)始搶答鍵,進(jìn)入搶答倒計(jì)時(shí)。
圖10 搶答倒計(jì)時(shí)
3.有選手按下?lián)尨疰I,顯示選手號(hào)碼及剩余時(shí)間。
圖11 搶答成功
6 總結(jié)以及展望
在硬件電路焊接和軟件程序設(shè)計(jì)分別完成的基礎(chǔ)之上,進(jìn)行軟硬件的結(jié)合與調(diào)試。通過(guò)下載將在電腦上已完成的程序下載到單片機(jī)芯片中。在調(diào)試中發(fā)現(xiàn)軟件中存在的問(wèn)題,及時(shí)解決問(wèn)題,確保系統(tǒng)能正常工作并達(dá)到設(shè)計(jì)要求。通過(guò)反復(fù)的調(diào)試與實(shí)驗(yàn),可以證明該系統(tǒng)能夠較好地完成設(shè)計(jì)所需的基本要求。即能夠正確的完成搶答器預(yù)期功能。
在完成系統(tǒng)時(shí)我們遇到了很多困難,從一開(kāi)始電路設(shè)計(jì)不夠優(yōu)化導(dǎo)致蜂鳴器不能正常發(fā)聲,到后來(lái)查閱資料一點(diǎn)點(diǎn)豐富我們的設(shè)計(jì)。在整個(gè)設(shè)計(jì)過(guò)程中,我們充分發(fā)揮團(tuán)隊(duì)精神,分工合作,發(fā)揮人的主觀能動(dòng)性,自主學(xué)習(xí),學(xué)到了許多沒(méi)學(xué)到的知識(shí),較好的完成了作品。相互學(xué)習(xí)、相互討論研究,共同進(jìn)步,完了最初的設(shè)想。在電路焊接時(shí)雖然沒(méi)什么大問(wèn)題,但從中也知道了焊接在整個(gè)作品中的重要性,電路工程量大,不能心急,一個(gè)個(gè)慢慢來(lái)不能急于求成。反而達(dá)到事半功倍的效果。對(duì)電路的設(shè)計(jì)、布局要先有一個(gè)好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開(kāi)始時(shí)遇到了很多的問(wèn)題,經(jīng)過(guò)靜下心來(lái)思考,和同組員的討論,理清了思路,反而得心應(yīng)手。在此次設(shè)計(jì)中,知道了做凡事要有一顆平常的心,不要想著走捷徑,一步一個(gè)腳印。此次比賽也練就了我們的耐心,讓我們認(rèn)識(shí)到了學(xué)習(xí)基礎(chǔ)知識(shí)的重要性,當(dāng)設(shè)計(jì)完整的系統(tǒng)時(shí),要考慮到硬件和軟件兩者的結(jié)合,有時(shí)硬件的不足,我們可以用軟件程序來(lái)彌補(bǔ),從而節(jié)約硬件成本,在設(shè)計(jì)軟件程序時(shí)要模塊化,可以提高程序的可讀性??傊ㄟ^(guò)此次單片機(jī)課程設(shè)計(jì)我們的能力得到了全方位的提高。
參考文獻(xiàn)
[1] 柴鈺.單片機(jī)原理及應(yīng)用.西安:西安電子科技大學(xué)出版社,2009
[2] 魏芬.基于Proteus的單片機(jī)實(shí)驗(yàn)與.清華大學(xué)出版社,2015
[3] 閻石.?dāng)?shù)字電子技術(shù)基礎(chǔ)[M].第五版.北京:高等教育出版社,2004年
[4] 侯玉寶等. 基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真[M]. 北京: 電子工業(yè)出版社,2008
[5] 余錫存,曹國(guó)華. 單片機(jī)原理及接口技術(shù)(第二版)[M].西安:西安電子科技大學(xué)出版社,2007
[6] 趙建領(lǐng),薛園園等. 51單片機(jī)開(kāi)發(fā)與應(yīng)用技術(shù)詳解[M]北京:電子工業(yè)出版社,2009
[7] 胡漢才.單片機(jī)原理及其接口技術(shù)[M].北京:清華大學(xué)出版社,2004
[8] 李群芳等.單片機(jī)微型計(jì)算機(jī)與接口技術(shù)(第2版)[M].北京:電子工業(yè)出版社,2005.1
[9] 寧成軍等,基于 Proteus和Keil接口的單片機(jī)外圍硬件電路仿真,北京:現(xiàn)代電子技術(shù)出版社,2006
[10] 樓然苗,李光飛. 單片機(jī)課程設(shè)計(jì)指導(dǎo)(第2版)[M]. 北京:北京航空航天大學(xué)出版社,2012.1
[11] 李華等.MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M]北京:北京航空航天大學(xué)出版社,1995
[12]楊居義 主編. 單片機(jī)課程設(shè)計(jì)指導(dǎo)[M]. 北京:清華大學(xué)出版,2009.9
[13]80C51 8bit flash microcontroller family P89C51RB2/P89C51RC2/P89C51RD2. Data Book, Philips Semicon-ductors, 2001,6(1).
[14] 康華光,陳大欽.電子技術(shù)基礎(chǔ)數(shù)字部分(第四版)[M].北京:高等教育出版社,2001.6
[15] 齊玲, 繼電器綜合參數(shù)檢測(cè)系統(tǒng)[J] 河北:河北工業(yè)大學(xué)學(xué)報(bào),2009
[16] 周潤(rùn)景等,基于PROTEUS的電路及單片機(jī)系統(tǒng)設(shè)計(jì)與仿真.北京:北京航空航天大學(xué)出版社,2006.
[17]馬忠梅等.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2003.11.