第一篇:基于51單片機的搶答器設(shè)計
1.系統(tǒng)設(shè)計
1.1設(shè)計要求
1、需要自己設(shè)計電路并焊接電路板。
2、基本要求:有一個主持人控制開關(guān)和6路搶答按扭,當(dāng)主持人允許搶答時才能進(jìn)行搶答操作,并用一個數(shù)碼管顯示搶答選手的號碼,同時其他選手不能再搶答。
3、當(dāng)主持人允許搶答后倒計時5秒時間,在這5秒內(nèi)搶答有效,過后就不能進(jìn)行搶答了。
4、電路上要加個蜂鳴器的電路,當(dāng)有選手搶答時蜂鳴器響一下。
5、當(dāng)有選手搶答后,進(jìn)行倒計時20秒作為選手回答問題時間,用兩個數(shù)碼管顯示,倒計時時間到時有聲光提示。
6、畫電路板時要增加下載接口,方便調(diào)試程序。
7、擴展功能(選做),8、用按鍵可設(shè)置倒計時的時間,范圍在5秒到30秒之間。
1.2設(shè)計原理
1.3總體思路
以AT89S52單片機為核心的單片機,通過相應(yīng)的程序,并且通過按鍵來進(jìn)行電平識別,再由單片機輸出相應(yīng)的程序,并將相應(yīng)數(shù)值通過數(shù)碼管來顯示。
1.4設(shè)計方案 通過平時所學(xué)知識、查找資料和老師的答疑。我得到了正確的交通燈原理圖,在正確的電路圖前提下進(jìn)行編程把程序燒到52芯片里,再把芯片連接到電路板上通過52芯片實現(xiàn)程序功能,實現(xiàn)步驟如下:通過P1.0到P1.7分別控制按鍵一到八,P0控制位選,P2.3控制段選,這樣就能基本達(dá)到了老師給我們搶答器 的要求了。
2、模塊電路的設(shè)計
2.1 2.1 數(shù)碼管顯示模塊
由于單片機的P0口沒有上拉電阻,當(dāng)它做為輸出時,需要對其接上拉電阻。因為P0口做為數(shù)碼管的段選輸出,所以要在P0口接一個1K的排阻。P2口做為數(shù)碼管的位選,任選其4個IO口接線,就可以了,然后利用軟件來控制四個數(shù)碼管的亮滅。
2.2 八個選手按鍵輸入
當(dāng)按鍵按下時,對P1口輸入低電平,通過程序讀取低電平的IO口,然后進(jìn)行鎖存,對數(shù)碼管做相應(yīng)的輸出,提供搶答選手號數(shù)。
2.3 蜂鳴器輸出
蜂鳴器電路是利用NPN開關(guān)電路,當(dāng)基極為高電平時,三極管導(dǎo)通;當(dāng)為低電平時,三極管截止。利用這一特性,可以畫出蜂鳴器的電路圖
3、程序編寫調(diào)試過程 #include
位定義
sbit s1=P3^0;sbit led=P3^3;sbit fmq=P3^4;段碼表 uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0X07,0x7f,0x6f};
定義字符型變量
uchar flag1,flag2,num,m1,m,m2,t;延時程序
void ys(uchar z)
{ uchar i,j;for(i=z;i>0;i--)for(j=0;j<150;j++);}
void uinit()//初始化
{ fmq = 0;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;num=0;m2=0;m1=0;led=0;flag2=1;}
void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;t++;if(t==20&&flag2==0){ t=0;
if(m1==0)
{
TR0=0;
flag2=1;
//flag1=0;
led=1;
fmq=1;
}
else m1--;
} if(t==20&&flag1==1&&flag2==1){ t=0;
m1=m%10;
m2=m/10;
if(m==0)
{
m=0;
led=1;
fmq=1;
}
else {m--;led=0;fmq=0;}
} }
void key(){
if(s1==0)
{
ys(10);
if(s1==0)
{
flag1=1;m1=5;flag2=0;num=0;led=0;m2=0;TR0=1;fmq=0;
}
}
if(flag2==0)
{
switch(P1)
{
case 0xfe:{TR0=0;num=1;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xfd:{TR0=0;num=2;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xfb:{TR0=0;num=3;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xf7:{TR0=0;num=4;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xef:{TR0=0;num=5;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xdf:{TR0=0;num=6;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xbf:{TR0=0;num=7;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0x7f:{TR0=0;num=8;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
}
} } main(){
uchar k;uinit();while(1){
key();
k=0;
switch(k)
{
case 0:{P2=0XFe;P0=tab[m2];ys(5);}
case 1:{P2=0XFd;P0=tab[m1];ys(5);}
case 2:{P2=0XFb;P0=0x40;ys(5);}
case 3:{P2=0XF7;P0=tab[num];ys(5);}
}
}
}
4、焊接制作與調(diào)試過程
焊接制作過程:這次我們用的是萬用板,直接焊接。先把器件布局,布局好以后,再把各個幾件焊上去,最后再根據(jù)PCB圖用絕緣線或者焊錫把各個器件,芯片連接起來。
調(diào)試過程:把程序燒進(jìn)芯片后開始接電源,看看結(jié)果。如果出現(xiàn)亂碼 哪檢查線路沒問題后 就看看程序的接口有沒有錯,主要問題就是在接口上。
5、心得體會
通過這次實訓(xùn),我不僅提高了Keil uVision3 , Protel 99 SE這些應(yīng)用程序的運用,還讓我懂得了如何編寫一些簡單的程序,學(xué)會了如何制作單片機應(yīng)用程序,還有焊接和程序固化,這幾天我經(jīng)過老師耐心的講解和指導(dǎo)通過自己認(rèn)真的動手操作,終于將一個完整的裝有程序的單片機芯片版制作出來了。但在實訓(xùn)中間暴露出很多問題:對平時上課講的理論知識沒有完全掌握消化,到了實際操作中還得請教老師和同學(xué),在焊接中焊接的基本工夫掌握不到家,手上工夫還是很欠缺的,使得電路板不是很美觀。這些問題的發(fā)現(xiàn),有助于提高我在以后的工作和學(xué)習(xí)中對此類問題的認(rèn)識,確保不在同一問題上再次犯錯。
給我的一個最大的感觸就是一個好的電工不應(yīng)該只會接線,而是會發(fā)現(xiàn)錯誤,改正錯誤。這次實訓(xùn)不僅加深了我們對知識的理解,更重要的是提高了我們的動手能力,增強了我對電工學(xué)習(xí)的熱愛,增加了學(xué)習(xí)的動力和興趣。
6、參考文獻(xiàn)
1.《單片機C語言編程與實例》趙亮、侯國瑞 人民郵電出版社 2.《例說8051》 張義和編著 人民郵電出版社
7.附錄(程序和原理圖)1PCB圖
2原理圖 源程序
#include
sbit s1=P3^0;sbit led=P3^3;sbit fmq=P3^4;
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0X07,0x7f,0x6f};uchar flag1,flag2,num,m1,m,m2,t;
void ys(uchar z)
{ uchar i,j;for(i=z;i>0;i--)for(j=0;j<150;j++);}
void uinit()
//初始化
{
fmq = 0;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;num=0;m2=0;m1=0;led=0;flag2=1;}
void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;t++;if(t==20&&flag2==0){ t=0;
if(m1==0)
{
TR0=0;
flag2=1;
//flag1=0;
led=1;
fmq=1;
}
else m1--;
} if(t==20&&flag1==1&&flag2==1){ t=0;
m1=m%10;
m2=m/10;
if(m==0)
{
m=0;
led=1;
fmq=1;
}
else {m--;led=0;fmq=0;}
} }
void key(){
if(s1==0)
{
ys(10);
if(s1==0)
{
flag1=1;m1=5;flag2=0;num=0;led=0;m2=0;TR0=1;fmq=0;
}
}
if(flag2==0)
{
switch(P1)
{
case 0xfe:{TR0=0;num=1;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xfd:{TR0=0;num=2;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xfb:{TR0=0;num=3;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xf7:{TR0=0;num=4;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xef:{TR0=0;num=5;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xdf:{TR0=0;num=6;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0xbf:{TR0=0;num=7;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
case 0x7f:{TR0=0;num=8;flag2=1;m=20;led=1;fmq=1;TR0=1;};break;
}
} } main(){
uchar k;uinit();while(1){
key();
k=0;
switch(k)
{
case 0:{P2=0XFe;P0=tab[m2];ys(5);}
case 1:{P2=0XFd;P0=tab[m1];ys(5);}
case 2:{P2=0XFb;P0=0x40;ys(5);}
case 3:{P2=0XF7;P0=tab[num];ys(5);}
}
}
}
第二篇:單片機課程設(shè)計8路競賽搶答器
課程設(shè)計任務(wù)書 設(shè)計內(nèi)容
⒈設(shè)計一個智力競賽搶答器,可同時供8名選手或8個代表隊參加比賽,他們的編號分別是1、2、3、4、5、6、7、8,各用一個搶答按鈕,按鈕的編號與選手的編號相對應(yīng),分別是S0、S1、S2、S3、S4、S5、S6、S7。
⒉給節(jié)目主持人設(shè)置一個控制開關(guān),用來控制系統(tǒng)的清零(編號顯示數(shù)碼管滅燈)和搶答的開始。
⒊搶答器具有數(shù)據(jù)鎖存和顯示的功能。搶答開始后,若有選手按動搶答按鈕,編號立即鎖存,并在LED數(shù)碼管上顯示出選手的編號,同時蜂鳴器給出音響提示。此外,要封鎖輸入電路,禁止其他選手搶答。優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清零為止。
4.用中小規(guī)模集成電路組成智力競賽搶答器電路,畫出各單元電路圖和總體邏輯框圖,正確描述各單元功能,合理選用電路器件,畫出完整的電路設(shè)計圖以及寫出設(shè)計總結(jié)報告 2 設(shè)計要求
⒈搶答器具有定時搶答的功能,且一次搶答的時間可以由主持人設(shè)定(如30s)。當(dāng)節(jié)目主持人啟動“開始”鍵后,要求定時器立即減計時,并用顯示器顯示,同時蜂鳴器發(fā)出聲響。
⒉參賽選手在設(shè)定的時間內(nèi)搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答時刻的時間,并保持到主持人將系統(tǒng)清零為止。
⒊如果定時搶答的時間已到,卻沒有選手搶答時,本次搶答無效,系統(tǒng)短暫報警,并封鎖輸入電路,禁止選手超時后搶答,時間顯示器上顯示00。
摘要
搶答器作為一種工具,已廣泛應(yīng)用于各種智力和知識競賽場合。工廠、學(xué)校和電視臺等單位常舉辦各種智力競賽, 搶答記分器是必要設(shè)備。在我校舉行的各種競賽中我們經(jīng)??吹接袚尨鸬沫h(huán)節(jié),舉辦方多數(shù)采用讓選手通過舉答題板的方法判斷選手的答題權(quán),這在某種程度上會因為主持人的主觀誤斷造成比賽的不公平性。但搶答器的使用頻率較低,且有的要么制作復(fù)雜,要么可靠性低。作為一個單位,如果專門購一臺搶答器雖然在經(jīng)濟(jì)上可以承受,但每年使用的次數(shù)極少,往往因長期存放使(電子器件的)搶答器損壞,再購置的麻煩和及時性就會影響活動的開展,為解決這個問題,我們小組準(zhǔn)備就本次大賽的機會制作一個低成本但又能滿足學(xué)校需要的八路數(shù)顯搶答器。
本設(shè)計是以八路搶答為基本理念??紤]到依需設(shè)定限時回答的功能,利用AT89C51單片機及外圍接口實現(xiàn)的搶答系統(tǒng),利用單片機的定時器/計數(shù)器定時和記數(shù)的原理,將軟、硬件有機地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計時,同時使數(shù)碼管能夠正確地顯示時間。用開關(guān)做鍵盤輸出,揚聲器發(fā)生提示。同時系統(tǒng)能夠?qū)崿F(xiàn):在搶答中,只有開始后搶答才有效,如果在開始搶答前搶答為無效;搶答限定時間和回答問題的時間可在1-99s設(shè)定;可以顯示是哪位選手有效搶答和無效搶答,正確按鍵后有音樂提示;搶答時間和回答問題時間倒記時顯示,滿時后系統(tǒng)計時自動復(fù)位及主控強制復(fù)位;按鍵鎖定,在有效狀態(tài)下,按鍵無效非法。
目錄
一.方案設(shè)計與論證.........................................................................................1 二.實現(xiàn)的原理和電路......................................................................................2
2.1組成部分............................................................................................2 2.2搶答器................................................................................................2 2.3鎖存器................................................................................................2 三.硬件電路設(shè)計.............................................................................................3
3.1搶答器的電路框圖..............................................................................3 3.2單元電路設(shè)計.....................................................................................4
3.2.1搶答器的設(shè)計...........................................................................4 3.2.2時序電路的設(shè)計.......................................................................4 3.2.2復(fù)位電路的設(shè)計.......................................................................5 3.2.4外部振蕩電路...........................................................................5 3.2.5顯示電路的設(shè)計.......................................................................6 3.2.6按鈕輸入電路的設(shè)計................................................................6 3.2.7報警電路的設(shè)計.......................................................................6 3.2.8發(fā)聲.........................................................................................7
四.軟件設(shè)計....................................................................................................7
4.1系統(tǒng)主程序的設(shè)計..............................................................................8 4.2搶答信號的處理設(shè)計..........................................................................9 4.3鍵盤掃描子程序...............................................................................10 4.4顯示子程序......................................................................................12 五.系統(tǒng)的仿真...............................................................................................12 六.調(diào)試功能說明...........................................................................................14
6.1系統(tǒng)的調(diào)試......................................................................................14 6.2 軟件調(diào)試問題及解決.......................................................................14 七.參考文獻(xiàn)..................................................................................................15 八.心得體會..................................................................................................16
一.方案設(shè)計與論證
方案一:系統(tǒng)各部分采用中小規(guī)模集成數(shù)字電路,用機械開關(guān)按鈕作為控制開關(guān),完成搶答輸入信號的觸發(fā)。該方案的特點是中小規(guī)模集成電路應(yīng)用技術(shù)成熟,性能可靠,能方便地完成選手搶答的基本功能,但是由于系統(tǒng)功能要求較高,所以電路連接集成電路相對較多,而且過于復(fù)雜,并且制作過程工序比較煩瑣,使用不太方便。
方案二:該系統(tǒng)采用51系列單片機AT89C51作為控制核心,該系統(tǒng)可以完成運算控制、信號識別以及顯示功能的實現(xiàn)。由于用了單片機,使其技術(shù)比較成熟,應(yīng)用起來方便、簡單并且單片機周圍的輔助電路也比較少,便于控制和實現(xiàn)。整個系統(tǒng)具有極其靈活的可編程性,能方便地對系統(tǒng)進(jìn)行功能的擴張和更改。MCS-51單片機特點如下:
<1>可靠性好:單片機按照工業(yè)控制要求設(shè)計,抵抗工業(yè)噪聲干擾優(yōu)于一般的CPU,程序指令和數(shù)據(jù)都可以寫在ROM里,許多信號通道都在同一芯片,因此可靠性高,易擴充。
<2>單片機有一般電腦所必須的器件,如三態(tài)雙向總線,串并行的輸入及輸出引腳,可擴充為各種規(guī)模的微電腦系統(tǒng)。
<3> 控制功能強:單片機指令除了輸入輸出指令,邏輯判斷指令外還有更豐富的條件分支跳躍指令。
方案比較及其選用依據(jù),顯然方案二比方案一簡單的多,不但從性能上優(yōu)于方案一,而且在使用上及其功能的實現(xiàn)上都較方案一簡潔,并且由于單片機具有優(yōu)越的高集成電路性,使其工作速度更快、效率更高。另外80C51單片機采用12MHz的晶振,提高了信號的測量精度,并且使該系統(tǒng)可以通過軟件改進(jìn)來擴張功能。而方案一采用了中小規(guī)模集成電路,有其復(fù)雜的電路性能,從而可能會使信號的輸入輸出產(chǎn)生延時及不必要的誤差。依此依據(jù)選擇方案二比較適合。二.實現(xiàn)的原理和電路
2.1組成部分:
輸入鎖存控制電路——按鍵S1~S8,鎖存器D1及相關(guān)門電路 數(shù)碼顯示電路——譯碼器,全加器,及3個數(shù)碼管
報警電路——定時器(構(gòu)成多諧振蕩器)和三極管,蜂鳴器
2.2搶答器
工作過程:接通電源,主持人將控制開關(guān)置于“清除”位置,搶答器處于禁止工作狀態(tài),編號顯示器滅燈。當(dāng)主持人宣布搶答題目后,說一聲“開始”同時將控制開關(guān)撥到“開始”位置,搶答器處于工作狀態(tài)。當(dāng)選手按動搶答時,搶答器完成3項工作。
1)優(yōu)先編碼電路立即分辨出搶答者的編號,并由鎖存器進(jìn)行鎖 存,然后由數(shù)碼管顯示電路編號。
2)揚聲器發(fā)出聲響,提醒主持人注意
3)控制電路要對輸入編碼電路進(jìn)行封鎖,避免其他人再次搶答,并保持到主持人清零。當(dāng)選手將問題回答完畢后,主持人操作控制開關(guān),使系統(tǒng)恢復(fù)到禁止工作狀態(tài),以便下一次搶答。
2.3鎖存器
鎖存器輸入信號均為同一電平時,鎖存器控制電路的輸出信號將鎖存器打開,這時鎖存器輸入端的信號送往相應(yīng)的輸出端。當(dāng)有一輸入端的電平發(fā)生跳變時,其對應(yīng)輸出端電平也跟著變化,此變化的輸出電平送入鎖存器控制電路,控制電路立即產(chǎn)生控制信號封鎖鎖存器,此時輸入不影響輸出。電路圖如下:
三.硬件電路設(shè)計
3.1搶答器的電路框圖
如上圖
(一)所示為電路框圖。其工作原理為:接通電源后,主持人將開關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號顯示器滅燈,定時器顯示設(shè)定時間;主持人將開關(guān)置,“開始”狀態(tài),宣布“開始”搶答器工作。定時器倒計時,揚聲器給出聲響提示。選手在定時時間內(nèi)搶答時,搶答器完成:優(yōu)先判斷、編號鎖存、編號顯示、揚聲器提示。當(dāng)一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作“開始,停止”。由電路框圖下面的總體設(shè)計圖
(二)總設(shè)計圖的工作原理為:接通電源后,主持人將開關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號顯示器滅燈,定時器顯示設(shè)定時間;主持人將開關(guān)置,“開始”狀態(tài),宣布“開始”搶答器工作。定時器倒計時,揚聲器給出聲響提示。選手在定時時間內(nèi)搶答時,搶答器完成:優(yōu)先判斷、編號鎖存、編號顯示、揚聲器提示。當(dāng)一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作“開始、停止”狀態(tài)開關(guān)。
總體設(shè)計圖
(二)3.2單元電路設(shè)計
3.2.1搶答器的設(shè)計
由總體設(shè)計圖
(二)可知該電路完成兩個功能:一是分辨出選手按鍵的先后,并鎖存優(yōu)先搶答者的編號,同時譯碼顯示電路顯示編號;二是禁止其他選手按鍵操作無效。如有再次搶答需由主持人將S開關(guān)重新置,“清除”然后再進(jìn)行下一次的搶答。
3.2.2時序電路的設(shè)計
時序控制電路是搶答器設(shè)計的關(guān)鍵,它要完成以下功能:
a.主持人將控制開關(guān)撥到“開始”位置時,揚聲器發(fā)聲,搶答電路和定時電路進(jìn)人正常搶答工作狀態(tài)。
b.當(dāng)參賽選手按動搶答鍵時,揚聲器發(fā)聲,搶答電路和定時電路停止工作。3.2.2復(fù)位電路的設(shè)計
外部中斷和內(nèi)部中斷并存,單片機硬件復(fù)位端,只要持續(xù)4個機器周期的高電平即可實現(xiàn)復(fù)位,硬件復(fù)位后的各狀態(tài)可知寄存器以及存儲器的值都恢復(fù)到了初始值,因為本設(shè)計中功能中有倒計時時間的記憶功能,所以不能對單片機進(jìn)行硬件復(fù)位,只能用軟件復(fù)位,軟件復(fù)位實際上就是當(dāng)程序執(zhí)行完之后,將程序通過一條跳轉(zhuǎn)指令讓它完成復(fù)位。復(fù)位電路如下圖示:
3.2.4外部振蕩電路
外部震蕩電路單片機必須在AT89C51的驅(qū)動下才能工作,在單片機內(nèi)部有一個時鐘震蕩電路,只需要外接一個振蕩器就能產(chǎn)生一定的時鐘信號送到單片機內(nèi)部的各個單元,外部震蕩電路如下圖。3.2.5顯示電路的設(shè)計
顯示電路使用了七段數(shù)碼管7SEG-MPX4-CC,它是共陰極的,由高電平點亮。
3.2.6按鈕輸入電路的設(shè)計
搶答器的輸入按鈕使用常開開關(guān),這些常開開關(guān)組成了搶答按鍵,硬件電路簡單,在程序設(shè)計上也不復(fù)雜,只要在程序中消除在按鍵過程中產(chǎn)生的“毛刺”現(xiàn)象就可以了。這里采用最常用的方法即延時法,其的原理為:因為“毛刺”脈沖一般持續(xù)時間短,約為幾ms,而按鍵的時間一般遠(yuǎn)遠(yuǎn)大于這個時間,所以當(dāng)單片機檢測到有按鍵動靜后再延時一段時間(這里取10ms)后再判斷此電平是否保持原狀態(tài),如果是則為有效按鍵,否則無效。
3.2.7報警電路的設(shè)計
報警電路用于報警,當(dāng)遇到報警信號時,發(fā)出警報。一般喇叭是一種電感性,8951驅(qū)動喇叭的信號為各種頻率的脈沖。因此,最簡單的喇叭驅(qū)動方式就是利用達(dá)林頓晶體管,或者以兩個常用的小晶體管連接成達(dá)林頓架勢。利用晶體管的高電流增益,以達(dá)到電路快速飽和的目的。不過,如果要由P0輸出到此電路,還需要連接一個10K的上拉電阻。選手在設(shè)定的時間內(nèi)搶答時,實現(xiàn):優(yōu)先判斷、編號鎖存、編號顯示、揚聲器提示。當(dāng)一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次*作“清除”和“開始”狀態(tài)開關(guān)。圖面是數(shù)字搶答器的報警電路圖。其中555構(gòu)成多諧振蕩器,振蕩頻率fo=1.43/[(RI+2R2)C],其輸出信號經(jīng)三極管推動揚聲器。PR為控制信號,當(dāng)PR為高電平時,多諧振蕩器工作,反之,電路停振。
3.2.8發(fā)聲
這里能利用程序來控制單片機P3.6口線反復(fù)輸出高電平或低電平,即在該口線上產(chǎn)生一定頻率的矩形波,接上揚聲器就能發(fā)出一定頻率的聲音,再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào),使揚聲器發(fā)出不同的聲音。
四.軟件設(shè)計
整個程序的設(shè)計思路如下:首先用進(jìn)位標(biāo)志C作為主持人按鍵的狀態(tài)標(biāo)志,C=0為可以開始搶答(如果需要也可用一個發(fā)光二極管將C的狀態(tài)顯示出來,只需將程序做小小的修改即可);接下來開外部中斷0;然后是讀取按鍵狀態(tài),只要有一個按鍵按下(引腳為高電平)并且為C=0,則開始進(jìn)入分析按鍵狀態(tài)程序,用循環(huán)移位指令分析出事第幾個按鍵按下,并將其放入P1口進(jìn)行顯示輸出。上述程序相對來說很簡單,首先它從硬件的微妙數(shù)量級處理速度上確保了不會同時按下2個按鍵,因此程序沒有區(qū)分重復(fù)按鍵的部分,另外程序使用了外部中斷,從而保證了主持人按鍵的權(quán)限是所有按鍵中權(quán)限最高的。
主程序流程圖如下:
4.1系統(tǒng)主程序的設(shè)計
主程序的功能主要是完成內(nèi)部各寄存單元的初始化,對接口電路的初始化,內(nèi)部定時器的初始化,中斷的初始化及調(diào)節(jié)顯示程序?qū)Τ跏紶顟B(tài)的顯示以及對外部信號的等待處理,也就是說完成前期的準(zhǔn)備工作等待隨時對外部信號進(jìn)行響應(yīng)。程序清單如下:
OK EQU 20H
;搶答開始標(biāo)志位 RING EQU 22H ;響鈴標(biāo)志位 ORG 0000H AJMP MAIN ORG 0003H
AJMP INTOSUB
ORG 00BH
AIMP T01NT
ORG 0013H
AJMP INT1SUB
ORG 001BH
AJMP T1INT
ORG 0040H
MAIN:MOV R1,#30
;初設(shè)搶答時間為30S
MOV R2,#60
;初設(shè)答題時間為60S
MOV TMOD,#11H
;設(shè)置未定時器、模式1
MOV TH0,#0F0H
MOV TLO,#0FFH
;越高發(fā)聲頻率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H
;50MS為一次溢出中斷
SETB EA
SETB ETO
SETB T1
SETB EX0
SETB EX1
;允許四個中斷,T0,T1,INTO,INT1
CLR OK
CLR RING
SETB TR1
SETB TRO 一開始就運行定時器,顯示FFF,如果想重新計數(shù),重置TH1,TL1就可以了。
4.2搶答信號的處理設(shè)計
當(dāng)主持人按下開始搶答鍵后開始搶答,程序部分采用中斷方式處理。在中斷處理程序中完成相應(yīng)操作,修改計時單元的數(shù)據(jù)并使紅色指示燈亮。程序清單如下:
START:MOV R5,#0BH
MOV R4,#0BH
MOV R3,#0BH
ACALL DISPLAY
;未開時搶答的時候顯示FFF
JB P3.0,NEXT
;DDDDDDD
ACALL DELAY
JB P3.0,NEXT
;去抖動如果“開始鍵”按下就向下執(zhí)行,否則跳到非法搶答查詢
ACALL BARK
;按鍵發(fā)聲
MOV A,R1
MOV R6,A
;送R1->R6因為R1中保存了搶答時間
SETB OK ;搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢搶答
MOV R7,#01H ;讀搶答鍵數(shù)據(jù)信號標(biāo)志,這里表示只讀一次有用信號
MOV R3,#0AH ;搶答只顯示計時,滅號數(shù)
AJMP COUNT
;進(jìn)入倒計時程序,“查詢有效搶答的程序”在COUNT里
NEXT:JNB P1.0,F(xiàn)ALSE1
JNB P1.1,F(xiàn)ALSE2
JNB P1.2,F(xiàn)ALSE3
JNB P1.3,F(xiàn)ALSE4
JNB P1.4,F(xiàn)ALSE5
JNB P1.5,F(xiàn)ALSE6
JNB P1.6,F(xiàn)ALSE7
JNB P1.7,F(xiàn)ALSE8
AJMP START 4.3鍵盤掃描子程序
對行列式鍵盤的掃描方法有兩種。一為掃描法,對鍵盤按行逐行掃描查詢,其結(jié)構(gòu)清晰但對于最后行列的按鍵需經(jīng)多次掃描;一為反轉(zhuǎn)法,它先使行全為零,讀人列的狀態(tài)暫存,然后使列全為零,讀人行的狀態(tài)保存,對兩次保存數(shù)據(jù)進(jìn)行查詢即可得知按下鍵的行列數(shù)從而確定鍵值。在程序中采用反轉(zhuǎn)法對鍵盤進(jìn)行掃描。鍵盤掃描程序在確定鍵值后保存等待后續(xù)處理。程序清單如下:
AAAA1:MOV A,P1
CJNE A,#0FFH,AA1 ;當(dāng)不全為0時的數(shù)據(jù)為有效數(shù)據(jù)
AA0:MOV 36H,A
;將有效數(shù)據(jù)送到36H暫存
AJMP LOOP2
AA1:DEC R7
AJMP AA0(1)鍵值處理子程序
此子程序根據(jù)鍵盤掃描所取得的鍵值作出相應(yīng)的處理。在搶答時,只對數(shù)字(代表相應(yīng)搶答分組)1^8按下有效,其他鍵按下無效。搶答成功,開始答題鍵按下給出相應(yīng)信號指示。程序清單如下:
TRUE1:ACALL BARK
MOV A,R2
MOV R6,A
;搶答時間R2送R6
MOV R3,#01H
CLR OK ;因為答題的計時不在查詢搶答,所以就鎖了搶答
AJMP COUNT TRUE2:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#02H
CLR OK
AJMP COUNT TRUE3:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#03H
CLR OK
AJMP COUNT TRUE4:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#04H
CLR OK
AJMP COUNT
TRUE5:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#05H
CLR OK
AJMP COUNT TRUE6:ACALL BARK
MOV A ,R2
MOV R6,A
MOV R3,#06H
CLR OK
AJMP COUNT TRUE7:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#07H
CLR OK
AJMP COUNT TRUE8:ACALL BARK
MOV A,R2
MOV R6,A
MOV R3,#08H
CLR OK
AJMP COUNT
4.4顯示子程序
此程序僅完成6位數(shù)據(jù)的動態(tài)顯示,可顯示數(shù)據(jù)和代碼。初始狀態(tài)顯示8位全熄滅。程序清單如下:
DISPLAY:MOV DPTR,#DAT1 ;查表顯示程序,利用P0口做段選碼口輸出,P2低三位做選碼輸出
MOV A,R3
MOVC A,@A+DPTR
MOV P2,#0FEH
MOV P0,A
ACALL DELAY2
MOV DPTR,#DAT2
MOV A,R5
MOVC A,@A+DPTR
MOV P2,#0FDH
MOV P0,A
ACALL DELAY2
MOV A,R4
MOVC A,@A+DPTR
MOV P2,#0FBH
MOV P0,A
ACALL DELAY2
RET
DAT1:DB 00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;“滅”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“滅”,“F”
DAT2:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H ; 第一個為零,其他與上同,因為十位如果為零顯示熄滅
五.系統(tǒng)的仿真
1.搶答器protenus軟件的仿真
繪制搶答器的軟件仿真圖步驟分一下四步:(1)、查找所需要的元器件;(2)、根據(jù)電路圖進(jìn)行連線;(3)、是用來寫線所對應(yīng)的坐標(biāo),即下圖所示的P1.1等坐標(biāo);
(4)、下載所寫完的C程序即可以仿真。通過以上步驟,來實現(xiàn)搶答器設(shè)計的仿真實現(xiàn),仿真如上圖所示:
六.調(diào)試功能說明
6.1系統(tǒng)的調(diào)試
系統(tǒng)調(diào)試包括硬件調(diào)試和軟件調(diào)試,‘
硬件調(diào)試分單元電路調(diào)試和聯(lián)機調(diào)試,單元電路試驗在硬件電路設(shè)計時已經(jīng)進(jìn)行,主要用數(shù)字萬用表測量電路。
軟件調(diào)試一般包括分塊調(diào)試和聯(lián)機調(diào)試兩個階段。程序的分塊調(diào)試一般在單片機開發(fā)裝置上進(jìn)行,可根據(jù)所調(diào)程序功能塊的入口參量初值編制一個特殊的程序段,并連同被調(diào)程序功能塊一起在開發(fā)裝置上運行;也可配合對應(yīng)硬件電路單獨運行某程序功能塊,然后檢查是否正確,如果執(zhí)行結(jié)果與預(yù)想的不一致,可以通過單步運行或設(shè)置斷點的方法,查出原因并加以改正,直到運行結(jié)果正確為止。這時該 程序功能塊已調(diào)試完畢,可去掉附加程序段。其它程序功能塊可按此法進(jìn)行調(diào)試。程序聯(lián)機調(diào)試就是將已調(diào)試好的各程序功能塊按總體結(jié)構(gòu)聯(lián)成一個完整程序,在所研制的硬件電路上運行。從而試驗程序整體運行的完整性、正確性和與硬件電路的配合情況。在聯(lián)調(diào)中可能會有某些支路上的程序、功能塊因受條件制約而得不到相應(yīng)的輸入?yún)?shù),這時,調(diào)試人員應(yīng)創(chuàng)造條件進(jìn)行模擬調(diào)試。
6.2 軟件調(diào)試問題及解決
下面說一下如何在keil中調(diào)用proteus進(jìn)行MCU外圍器件的仿真。(1)、安裝keil 與 proteus。
(2)、把安裝proteus MODELS目錄下 VDM51.dll文件復(fù)制到Keil安裝目錄的 C51BIN目錄中。
(3)、修改keil安裝目錄下 Tools.ini文件,在C51字段加入 TDRV5=BINVDM51.DLL(“Proteus VSM Monitor-51 Driver”),保存。(注意:不一定要用TDRV5,根據(jù)原來字段選用一個不重復(fù)的數(shù)值就可以了。引號內(nèi)的名字隨意)
3、打開proteus,畫出相應(yīng)電路,在proteus的debug菜單中選中use remote debug monitor
4、在keil中編寫C語言程序
5、進(jìn)入KEIL的project菜單option for target '工程名'。在DEBUG選項中右欄上部的下拉菜單選中 Proteus VSM Monitor-51 Driver。
6、在keil中進(jìn)行debug吧,同時在proteus中查看直觀的結(jié)果(如LCD顯示?)這樣就可以像使用仿真器一樣調(diào)。
問題:有時候在自己創(chuàng)建的元器件的管腳上無法實現(xiàn)連線。
回答:應(yīng)該是管腳的間距太小了。因為在ISIS中,每個元器件的管腳都要占據(jù)一塊區(qū)域(就像自己的保護(hù)區(qū)一樣,不容別人隨意侵犯),該區(qū)域會排斥外部的走線。解決問題的方法是在走線的同時按住 “CTRL”鍵,直到走線繞過狹窄的保護(hù)區(qū)。當(dāng)然最根本的辦法是重新編輯元器件,把其管腳間距調(diào)大一些。
七.參考文獻(xiàn)
[1]51單片機原理與實踐/高衛(wèi)東,辛友順,韓彥征編著.北京航空航天大學(xué)出版社,2008.1 [2]劉紅玲、邵曉根,《微機原理與接口技術(shù)》,中國電力出版社,2006年第一版
[3]馮博琴,《微型計算機原理及接口技術(shù)》,清華大學(xué)出版社 [4]艾德才,《微型計算機原理與接口技術(shù)》,高等教育出版社 [5]沈美明,《IBM-PC匯編語言程序設(shè)計》,清華大學(xué)出版社 [6] 任致程,《經(jīng)典集成電路400例》機械工業(yè)出版社,2002 [7] 胡 錦.《數(shù)字電路與邏輯設(shè)計》 高等教育出版社
八.心得體會
通過二周的課程設(shè)計,使我對數(shù)字電路有了進(jìn)一步的了解,在設(shè)計搶答器、報警器、定時器的過程中,通過翻閱資料,上網(wǎng)搜索等,我對各電路器件(如:與非門和LED顯像管等)及原理有了更深一層次的認(rèn)識,既增強了我的理解能力,也使我能更好的運用所學(xué)的知識。開始時我還不太明白電路是如何連接的,并且對其原理也不甚了解,但通過對所學(xué)知識更深入的了解和同學(xué)的講解和幫助,最終使我克服了難關(guān),并成功地作出了設(shè)計。四周的鍛煉,28天的不同感受,我有過對知識掌握不足時的迷茫,也有過思路不清時的懊惱,但一路走來,我卻收獲了知識,收獲了希望和努力后的成果。
在此我要感謝老師的諄諄教導(dǎo)和同學(xué)們的幫助,我相信這十幾天的不懈努力會給我未來的學(xué)習(xí)帶來很多的啟發(fā),我會在以后的工作生活中更好的理論聯(lián)系實際,證明自己的能力。
第三篇:基于單片機的數(shù)字搶答器的設(shè)計及仿真
基于單片機的數(shù)字搶答器的設(shè)計及仿真
一、摘 要:數(shù)字搶答器由主體電路與擴展電路組成。優(yōu)先編碼電路、鎖存器、譯碼電路將參賽隊的輸入信號在顯示器上輸出;用控制電路和主持人開關(guān)啟動報警電路,以上兩部分組成主體電路。通過定時電路和譯碼電路將秒脈沖產(chǎn)生的信號在顯示器上輸出實現(xiàn)計時功能,構(gòu)成擴展電路。經(jīng)過布線、焊接、調(diào)試等工作后數(shù)字搶答器成形。
關(guān)鍵字: 搶答電路 定時電路 報警電路 時序控制
Summary The figure vies for the answering device by the subject circuit and expands the circuit to make up.Have priority in code circuit , latch , decipher circuit and export the input signal of the entrant team on the display;Starting the warning circuit with the control circuit and host's switch, two the above-mentioned parts make up the subject circuit.Through timing circuit and decipher second signal function while outputs and realizes counting on the displaying that pulse produce circuit, form and expand the circuit.Through connect up , weld , debug figure vie for answering device take shape after the work.Key word: Vie for answering the circuit Timing circuit Warning circuit Time sequence controlling
三、實驗部分 1)、設(shè)計任務(wù)與要求
1.搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕S0 ~ S7表示。2.設(shè)置一個系統(tǒng)清除和搶答控制開關(guān)S,該開關(guān)由主持人控制。
3.搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在LED數(shù)碼管上顯示,同時揚聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。4.搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如30秒)。當(dāng)主持人啟動“開始”鍵后,定時器進(jìn)行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間0.5秒左右。
5.參賽選手在設(shè)定的時間內(nèi)進(jìn)行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。
6.如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。2)、實驗儀器設(shè)備: 1.數(shù)字實驗箱。
2.集成電路74LS148 1片,74LS279 1片,74LS48 3片,74LS192 2片,NE555 2片,74LS00 1片,74LS121 1片。
3.電阻 510Ω 2只,1KΩ 9只,4.7kΩ l只,5.1kΩ l只,100kΩ l只,10kΩ 1只,15kΩ 1只,68kΩ l只。
4.電容 0.1uF 1只,10uf 2只,100uf 1只。
5.三極管 3DG12 1只。
6.其它:發(fā)光二極管2只,共陰極顯示器3只
三、方案論證與比較:與普通搶答器相比,本作品有以下幾方面優(yōu)勢:
1、具有清零裝置和搶答控制,可由主持人操縱避免有人在主持人說“開始”前提前搶答違反規(guī)則。
2、具有定時功能,在30秒內(nèi)無人搶答表示所有參賽選手獲參賽隊對本題棄權(quán)。3、30秒時仍無人搶答其報警電路工作表示搶答時間耗盡并禁止搶答。
四、總體設(shè)計思路:
(一)設(shè)計任務(wù)與要求:
1.搶答器同時供8名選手或8個代表隊比賽,分別用8個按鈕S0 ~ S7表示。2.設(shè)置一個系統(tǒng)清除和搶答控制開關(guān)S,該開關(guān)由主持人控制。
3.搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在LED數(shù)碼管上顯示,同時揚聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。
4.搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如30秒)。當(dāng)主持人啟動“開始”鍵后,定時器進(jìn)行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間0.5秒左右。
5.參賽選手在設(shè)定的時間內(nèi)進(jìn)行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。
6.如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。
(二)設(shè)計原理與參考電路 1.?dāng)?shù)字搶答器總體方框圖
如圖11、1所示為總體方框圖。其工作原理為:接通電源后,主持人將開關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號顯示器滅燈,定時器顯示設(shè)定時間;主持人將開關(guān)置“開始”狀態(tài),宣布“開始”搶答器工作。定時器倒計時,揚聲器給出聲響提示。選手在定時時間內(nèi)搶答時,搶答器完成:優(yōu)先判斷、編號鎖存、編號顯示、揚聲器提示。當(dāng)一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作“清除”和“開始”狀態(tài)開關(guān)。
五、多功能硬件與軟件設(shè)計及其理論分析與計算: 各單元部分電路設(shè)計如下:
(1)搶答器電路
參考電路如圖2所示。該電路完成兩個功能:一是分辨出選手按鍵的先后,并鎖存優(yōu)先搶答者的編號,同時譯碼顯示電路顯示編號;二是禁止其他選手按鍵操作無效。工作過程:開關(guān)S置于“清除”端時,RS觸發(fā)器的 端均為0,4個觸發(fā)器輸出置0,使74LS148的 =0,使之處于工作狀態(tài)。當(dāng)開關(guān)S置于“開始”時,搶答器處于等待工作狀態(tài),當(dāng)有選手將鍵按下時(如按下S5),74LS148的輸出 經(jīng)RS鎖存后,1Q=1, =1,74LS48處于工作狀態(tài),4Q3Q2Q=101,經(jīng)譯碼顯示為“5”。此外,1Q=1,使74LS148 =1,處于禁止?fàn)顟B(tài),封鎖其他按鍵的輸入。當(dāng)按鍵松開即按下時,74LS148的 此時由于仍為1Q=1,使 =1,所以74LS148仍處于禁止?fàn)顟B(tài),確保不會出二次按鍵時輸入信號,保證了搶答者的優(yōu)先性。如有再次搶答需由主持人將S開關(guān)重新置“清除”然后再進(jìn)行下一輪搶答。74LS148為8線-3線優(yōu)先編碼器,表1為其功能表。
表1 74LS148的功能真值表
由節(jié)目主持人根據(jù)搶答題的難易程度,設(shè)定一次搶答的時間,通過預(yù)置時間電路對計數(shù)器進(jìn)行預(yù)置,計數(shù)器的時鐘脈沖由秒脈沖電路提供。可預(yù)置時間的電路選用十進(jìn)制同步加減計數(shù)器74LS192進(jìn)行設(shè)計,具體電路如圖3所示。表2為74192的真值表。
(3)報警電路
由555定時器和三極管構(gòu)成的報警電路如圖4所示。其中555構(gòu)成多諧振蕩器,振蕩頻率fo=1.43/[(RI+2R2)C],其輸出信號經(jīng)三極管推動揚聲器。PR為控制信號,當(dāng)PR為高電平時,多諧振蕩器工作,反之,電路停振。
4)時序控制電路
時序控制電路是搶答器設(shè)計的關(guān)鍵,它要完成以下三項功能:
①主持人將控制開關(guān)撥到“開始”位置時,揚聲器發(fā)聲,搶答電路和定時電路進(jìn)入正常搶答工作狀態(tài)。②當(dāng)參賽選手按動搶答鍵時,揚聲器發(fā)聲,搶答電路和定時電路停止工作。
③當(dāng)設(shè)定的搶答時間到,無人搶答時,揚聲器發(fā)聲,同時搶答電路和定時電路停止工作。
根據(jù)上面的功能要求以及圖 2,設(shè)計的時序控制電路如圖 5所示。圖中,門G1 的作用是控制時鐘信號CP的放行與禁止,門G2的作用是控制74LS148的輸人使能端。圖11、4的工作原理是:主持人控制開關(guān)從“清除”位置撥到“開始”位置時,來自于圖11、2中的74LS279的輸出 1Q=0,經(jīng)G3反相,A=1,則時鐘信號CP能夠加到74LS192的CPD時鐘輸入端,定時電路進(jìn)行遞減計時。同時,在定時時間未到時,則“定時到信號”為 1,門G2的輸出 =0,使 74LS148處于正常工作狀態(tài),從而實現(xiàn)功能①的要求。當(dāng)選手在定時時間內(nèi)按動搶答鍵時,1Q=1,經(jīng) G3反相,A=0,封鎖 CP信號,定時器處于保持工作狀態(tài);同時,門G2的輸出 =1,74LS148處于禁止工作狀態(tài),從而實現(xiàn)功能②的要求。當(dāng)定時時間到時,則“定時到信號”為0,=1,74LS148處于禁止工作狀態(tài),禁止選手進(jìn)行搶答。同時,門G1處于關(guān)門狀態(tài),封鎖 CP信號,使定時電路保持00狀態(tài)不變,從而實現(xiàn)功能③的要求。集成單穩(wěn)觸發(fā)器74LS121用于控制報警電路及發(fā)聲的時間。
六、系統(tǒng)的組裝與調(diào)試及測試方法:
3塊實驗電路板分別做成數(shù)字搶答器電路、可預(yù)置時間的定時電路、報警電路及時序控制電路,根據(jù)EWB仿真電路及工程上的可操作性布置芯片、元件、導(dǎo)線等。
在焊接過程中,由于經(jīng)驗不足多次發(fā)生虛焊或者相鄰焊點接觸導(dǎo)致短路等事故,心急時也有小組成員被電烙鐵燙傷的事發(fā)生。
制作的第一塊板即數(shù)字搶答電路板一開始測試時不能工作,又由于沒有穩(wěn)壓電源而不能檢驗。情急之下,靈機一動,把3節(jié)干電池制成4.5伏電壓源,又用萬用表逐點排查,原來有虛焊的點。找出原因后并排斥故障后,電路板正常工作。深感欣慰!
制作第2塊板即可預(yù)置時間的定時電路時,3位成員都已有了自我感覺十分嫻熟的焊接技術(shù),不料忙中出錯,重蹈覆轍,又有虛焊點。遂相互提醒,前事不忘,后事之師。
七、EWB仿真圖:
由于EWB中沒有74LS121,并且沒有可以代替的74LS221,故時序控制電路的仿真無法完成。
八、儀器: 1.數(shù)字實驗箱。
2.集成電路74LS148 1片,74LS279 1片,74LS48 3片,74LS192 2片,NE555 2片,74LS00 1片,74LS121 1片。
3.電阻 510Ω 2只,1KΩ 9只,4.7kΩ l只,5.1kΩ l只,100kΩ l只,10kΩ 1只,15kΩ 1只,68kΩ l只。
4.電容 0.1uF 1只,10uf 2只,100uf 1只。5.三極管 3DG12 1只。
6.其它:發(fā)光二極管2只,共陰極顯示器3只。
九、擴展功能:
1、可以設(shè)計聲控裝置,在主持人說開始時,系統(tǒng)自動完成清零并開始計時的功能。
2、在主持人讀題的過程中,禁止搶答,可以在主持人控制的開關(guān)上另接一個與圖2一樣的電路,即可實現(xiàn)“違規(guī)者可見”的功能,即在主持人讀題時如果有人違反比賽規(guī)定搶先按動按鈕,顯示器可以顯示是哪個參賽隊搶先,便于作出相應(yīng)的處理。
如果提供相應(yīng)的器材及時間上的寬限,我想我們已定可以完成上述擴展功能,進(jìn)一步完善我們的作品。
十、心得體會:
經(jīng)歷數(shù)星期的電子競賽眼看塵埃落定,感覺忍不住要長出一口氣。我們組的3位成員除學(xué)習(xí)外均有一定的日常工作,數(shù)日來,為了這個競賽可謂廢寢忘食,在實驗室里日出而作,日落不息。將所有的課余時間均奉獻(xiàn)給了這個比賽。
結(jié)果怎樣已然不再重要,在這幾日里,我們經(jīng)歷了階段性成功的狂喜、測試失敗后的絕望、陷入困境時的不知所措,重新投入的振作。這樣的比賽是無法孤軍作戰(zhàn)的,只有通力合作才有可能成功。3位成員在數(shù)日里的朝夕相伴中培養(yǎng)出了無與倫比的默契和深厚的友誼。
由于前幾次去實驗室比較晚,結(jié)果沒有空余的電腦可供使用,我們商量后,決定早上6點到實驗室。于是,在零下的溫度下,我們陸續(xù)到達(dá)。途中數(shù)次感嘆,早晨的空氣真好。
除此之外,我們學(xué)會了焊接電路板,掌握了書本以外的電子技術(shù)知識,培養(yǎng)了專心致志的工作學(xué)習(xí)習(xí)慣,懂得了相互之間的理解與體諒,可謂獲益匪淺。
如果非要用一句話來概括我們的體會的話,那只能是:痛并快樂著。
十一、致謝:
感謝電氣工程學(xué)院提供者次比賽的機會;感謝長通公司提供電子器件;感謝電子實習(xí)基地提供場所及工具;感謝電子信息系主任王建元老師在我們陷入困境時的點撥;感謝我隊指導(dǎo)于建立同學(xué)對我們的切實指導(dǎo);感謝02級學(xué)長學(xué)姐們在實驗室對我們的幫助與鼓勵。
十二、參考文獻(xiàn):
1、《電子技術(shù)基礎(chǔ).數(shù)字部分(第四版)》
高等教育出版社2003年3月 主編:康華光
2、《74系列芯片手冊》
重慶大學(xué)出版社 1999年9月 主編:李海
圖11、1數(shù)字搶答器框圖
表10、1
11、2 數(shù)字搶答器電路
74LS148的功能真值表
圖
2)定時電路
圖11、3 可預(yù)置時間的定時電路
圖11、4 報警電路
圖 11、5 時序控制電路
第四篇:單片機課設(shè)_AT89C51八路搶答器
《單片機原理及應(yīng)用》
課程設(shè)計
題 目∶
院 系∶ 專業(yè)班級∶ 姓 名∶ 學(xué) 號∶ 指導(dǎo)教師∶ 成 績∶
流水燈 機電工程系 機電一體化機電0911
曉寒 21 沈全鵬
2011年 12 月 日
單片機課程設(shè)計任務(wù)書
1.課題名稱
搶答器設(shè)計 2.設(shè)計目的
1. 進(jìn)一步理解和掌握單片機理論課程知識,加強對專業(yè)知識的合運用;
2. 學(xué)會熟練使用單片機編程工具軟件及單片機軟件編程; 3. 學(xué)習(xí)單片機小系統(tǒng)的硬件設(shè)計及PCB布線。4. 學(xué)會如何整理資料,劃分模塊,提高自己的編程技巧;3.設(shè)計思路
a.了解搶答器的工作方式; b.單片機按鍵輸入的設(shè)計;
c.單片機驅(qū)動發(fā)光二極管顯示及數(shù)碼管的動態(tài)掃描工作方式; d.延時子程序設(shè)計; e.定時器的應(yīng)用; 4.設(shè)計要求
1.在本設(shè)計中要求設(shè)計一個八組單片機控制的搶答器模擬器; 2.要求由兩個LED(紅綠)指示搶答成功或失??; 3.要求由1位數(shù)碼管顯示搶答成功(或失?。┑慕M; 4.發(fā)揮部分:剩余時間顯示,各組積分顯示; 5.課程設(shè)計結(jié)束后,要求交設(shè)計心得,課程設(shè)計報告;
目錄
第一章 概述 ………………………………………………………………
第二章 八路搶答器設(shè)計方案及選取 …………………… 2
2.1電路設(shè)計方案一 ………………………………………… 2 2.2電路設(shè)計方案二 ………………………………………… 2 2.3電路設(shè)計方案的選取 …………………………………… 2 第三章 電路設(shè)計原理及硬件設(shè)計 …………………………
3.1單片機最小系統(tǒng)的原理 ………………………………… 3 3.2八路搶答器工作原理 ………………………………… 4 3.3控制系統(tǒng)及所需元件 …………………………………
第四章 軟件系統(tǒng)設(shè)計及仿真 ……………………………… 7
4.1軟件系統(tǒng)設(shè)計 …………………………………………… 7 4.2電路仿真 ………………………………………………… 8
第五章 電路板制作與調(diào)試 ……………………………………
5.1電路板制作 ……………………………………………… 9 5.2電路調(diào)試 ………………………………………………… 9 第六章 心得體會 ………………………………………………
第七章 參考文獻(xiàn) ……………………………………………
鳴謝
………………………………………………………………
附錄一 源程序……………………………………………………
2 第一章 概述
《單片機原理及應(yīng)用技術(shù)》是一門技術(shù)性,應(yīng)用性、實踐性很強的學(xué)科。課程設(shè)計是學(xué)好本門課程的又一重要實踐性教學(xué)環(huán)節(jié),課程設(shè)計的目的和任務(wù)就是配合單片機的教學(xué)和平時實驗,以達(dá)到鞏固消化課程的內(nèi)容,進(jìn)一步加強綜合應(yīng)用能力及單片機應(yīng)用系統(tǒng)開發(fā)和設(shè)計能力的訓(xùn)練,啟發(fā)創(chuàng)新思維,使之具有獨立單片機產(chǎn)品和科研的基本技能,是以培養(yǎng)學(xué)生綜合運用所學(xué)知識的過程,是知識轉(zhuǎn)化為能力和能力轉(zhuǎn)化為工程素質(zhì)的重要階段。在實際生活中有好多地方都用到了單片機,因此學(xué)習(xí)好這門課程有著十分重要的意義。
在本設(shè)計中要求設(shè)計一個八組單片機控制的搶答器模擬器;要求由兩個LED(紅綠)指示搶答成功或失敗;要求由1位數(shù)碼管顯示搶答成功(或失敗)的組;發(fā)揮部分:剩余時間顯示,各組積分顯示;
1)控制系統(tǒng)主要由單片機應(yīng)用電路、存儲器接口電路、顯示接口電路組成。其中單片機AT89C51是系統(tǒng)工作的核心,它主要負(fù)責(zé)控制各個部分協(xié)調(diào)工作.2)硬件組成及所需元件:該系統(tǒng)的核心器件是AT89C51。在其外圍接上復(fù)位電路、上拉電阻、數(shù)碼管、按鈕及揚聲器(沒有驅(qū)動器,所以就沒有用揚聲器了)。元件為:晶振X1、電容C1、C2、C3、電阻RP1。P3.0和P3.1由裁判控制,分別是搶答開始和停止鍵。P1.0-P1.7是8組搶答的輸入口, P2.0--P2.3口為數(shù)碼管的段選口,位選口用的是P0.0--P0.6口輸出,外部中斷0、1實現(xiàn)的對個隊進(jìn)行計時,P3.6為蜂鳴器的控制口。
控制系統(tǒng)防真用到了protuse軟件,用keil軟件與protuce軟件級聯(lián)可以進(jìn)行模擬調(diào)試,既可以檢測方案的正確性,又可以避免實物多次調(diào)試。Keil集成調(diào)試環(huán)境,集成了編緝器、編譯器、調(diào)試器,支持軟件模擬,支持項目管理功能強大的觀察窗口,支持所有的數(shù)據(jù)類型。支持ASM(匯編)、C語言,多語言多模塊源程序混合調(diào)試,在線直接修改、編譯、調(diào)試源程序,錯誤指令定位。功能很強大。可通過仿真可以完全顯示出所設(shè)計系統(tǒng)的功能,對于程序的調(diào)試等有很大的幫助.第二章 八路搶答器設(shè)計方案及選取
2.1電路設(shè)計方案一: 系統(tǒng)各部分采用中小規(guī)模集成數(shù)字電路,用機械開關(guān)按鈕作為控制開關(guān),完成搶答輸入信號的觸發(fā)。該方案的特點是中小規(guī)模集成電路應(yīng)用技術(shù)成熟,性能可靠,能方便地完成選手搶答的基本功能,但是由于系統(tǒng)功能要求較高,所以電路連接集成電路相對較多,而且過于復(fù)雜,并且制作過程工序比較煩瑣,使用不太方便。
2.2電路設(shè)計方案二: 該系統(tǒng)采用MCS-51系列單片機AT89S51作為控制核心,該系統(tǒng)可以完成運算控制、信號識別以及顯示功能的實現(xiàn)。由于用了單片機,使其技術(shù)比較成熟,應(yīng)用起來方便、簡單并且單片機周圍的輔助電路也比較少,便于控制和實現(xiàn)。整個系統(tǒng)具有極其靈活的可編程性,能方便地對系統(tǒng)進(jìn)行功能的擴張和更改性。CS-51單片機特點如下: 可靠性好:單片機按照工業(yè)控制要求設(shè)計,抵抗工業(yè)噪聲干擾優(yōu)于一般的CPU,程序指令和數(shù)據(jù)都可以燒寫在ROM許多信號通道都在同一芯片,因此可靠性高。易擴充:單片機有一般電腦所必須的器件,如三態(tài)雙向總線,串并行的輸入及輸出引腳,可擴充為各種規(guī)模的微電腦系統(tǒng) 控制功能強:單片機指令除了輸入輸出指令,邏輯判斷指令外還有更豐富的條件分支跳躍指令。
2.3電路設(shè)計方案的選取:
方案比較及其選用依據(jù),顯然方案二比方案一簡單的多,不但從性能上優(yōu)于方案一,而且在使用上及其功能的實現(xiàn)上都較方案一簡潔,并且由于單片機具有優(yōu)越的高集成電路性,使其工作速度更快、效率更高。另外AT89S51單片機采用12MHz的晶振,提高了信號的測量精度,并且使該系統(tǒng)可以通過軟件改進(jìn)來擴張功能。而方案一采用了中小規(guī)模集成電路,有其復(fù)雜的電路性能,從而可能會使信號的輸入輸出產(chǎn)生延時及不必要的誤差。依此依據(jù)選擇方案二比較適合。第三章 電路設(shè)計原理及硬件設(shè)計
3.1單片機最小系統(tǒng)的原理
本課題采用了單片機最小系統(tǒng)來實現(xiàn)八路搶答器,下面是單片機最小系統(tǒng)的原理。單片機的主要功能是負(fù)責(zé)整個系統(tǒng)的控制,不承擔(dān)復(fù)雜的數(shù)據(jù)處理任務(wù),因此在設(shè)計單片機最小系統(tǒng)時通常選用AT89C5l、AT89C52、AT89S51、AT89S52(S系列芯片支持ISP功能)等型號的8位單片機作為MCU。本單片機最小系統(tǒng)采用的是AT89S51。
一個典型的單片機最小系統(tǒng)一般由時鐘電路、復(fù)位電路、片外RAM、片外ROM、按鍵、數(shù)碼管、液晶顯示器、外部擴展接口等部分組成,圖3-1、圖3-2分別給出了單片機最小系統(tǒng)的結(jié)構(gòu)框圖、原理圖。
圖3-1 單片機最小系統(tǒng)的結(jié)構(gòu)框圖
圖3-2單片機最小系統(tǒng)的原理圖
3.2八路搶答器工作原理
智力競賽搶答器用單片機來設(shè)計制作完成,由于其功能的實現(xiàn)主要通過軟件編程來完成, 采用單片機AT89C51,它是低功耗、高性能的CMOS型8位單片機。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。該智力競賽搶答器的準(zhǔn)確度很高,其誤差主要由晶振自身的誤差所造成。
AT89C51單片機由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲器在物理上設(shè)計成程序存儲器和數(shù)據(jù)存儲器兩個獨立的空間,片內(nèi)程序存儲器的容量為4KB,片內(nèi)數(shù)據(jù)存儲器為128個字節(jié)。89C51單片機有4個8位的并行I/O口:P0口,P1口,P2口和P3口。各個接口均由接口鎖存器,輸出驅(qū)動器,和輸入緩沖器組成。P1口是唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲器和數(shù)據(jù)存儲器擴展時,P0可作為分時復(fù)用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號。3.3控制系統(tǒng)及所需元件
控制系統(tǒng)主要由單片機應(yīng)用電路、存儲器接口電路、顯示接口電路組成。其中單片機AT89C51是系統(tǒng)工作的核心,它主要負(fù)責(zé)控制各個部分協(xié)調(diào)工作.所需元件:該系統(tǒng)的核心器件是AT89C51。在其外圍接上復(fù)位電路、上拉電阻、數(shù)碼管、按鈕及揚聲器。元件為:晶振X1、電容C1、C2、C3、電阻RP1、P3.0和P3.1由裁判控制,分別是搶答開始和停止鍵。P1.0-P1.7是8組搶答的輸入口, P2.0--P2.3口為數(shù)碼管的段選口,位選口用的是P0.0--P0.6口輸出, P3.6為蜂鳴器的控制口。
AT89C51的管腳圖如下圖3-3所示:
圖3-3 AT89c51的管腳圖
外部振蕩電路單片機必須在AT89C51的驅(qū)動下才能工作.在單片機內(nèi)部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片機內(nèi)部的各個單元。外部振蕩電路見圖3-4所示:
圖3-4外部振蕩電路 外部中斷和內(nèi)部中斷并存,單片機有硬件復(fù)位端,只要輸入持續(xù)4個機器周期的高電平即可實現(xiàn)復(fù)位。硬件復(fù)位后的各狀態(tài)可知寄存器及存儲器的值都恢復(fù)到了初始值,應(yīng)為本設(shè)計功能中有倒計時時間的記憶功能,所以不能對單片機進(jìn)行硬件復(fù)位。只能用軟復(fù)位。軟復(fù)位實際上就是當(dāng)程序執(zhí)行完畢之后,將程序指針通過一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到程。復(fù)位電路采用圖3-5所示:
圖3-5復(fù)位電路
采用七段碼7SEG-MPX4-CC 顯示,它是共陰極的由高電平點亮。圖形如下圖3-6所示。:
圖3.6 共陰極
采用八個BUTTON按鈕作為搶答的選擇按鍵如圖3-7所示:
圖3-7八個BUTTON按鈕
第四章 軟件系統(tǒng)設(shè)計及仿真
4.1軟件系統(tǒng)設(shè)計
智力競賽搶答器要求有計時記憶功能,一次時間設(shè)置完, 復(fù)位后不需重新進(jìn)行時間設(shè)定,通過鍵盤掃描輸出按鍵信息,再通過單片機將它轉(zhuǎn)換成能在七段數(shù)碼管上顯示字型碼.當(dāng)搶答完畢時,會在數(shù)碼管上顯示搶答者數(shù)字號碼提示以表示搶答成功.同時顯示其分?jǐn)?shù),分?jǐn)?shù)的加減可由裁判手動進(jìn)行.采用獨立式鍵盤,可實現(xiàn)8路搶答.在顯示時使用的是七段數(shù)碼管顯示在本設(shè)計中根據(jù)實際情況采用的是動態(tài)顯示方法.并通過查表法 將其在數(shù)碼管上顯示出來,其中P1口為字型碼輸入端,P2口低6位為字選段輸入端.通過查表將字型碼送給7段數(shù)碼管顯示的數(shù)字。軟件去抖動,如果“開始鍵”按下就向下執(zhí)行,否者跳到開始。采用倒計時程序,使其具有倒計時功能。回答倒計時30秒。搶答時間5秒。采用發(fā)聲警報(缺少驅(qū)動器,所以沒有用揚聲器了),起到報警作用。
1、如果想調(diào)節(jié)搶答時間或答題時間,按“搶答時間調(diào)節(jié)”鍵或“答題時間調(diào)節(jié)”鍵進(jìn)入調(diào)節(jié)狀態(tài),此時會顯示現(xiàn)在設(shè)定的搶答時間或回答時間值,主持人按“搶答開始”鍵,會有提示音,并立刻進(jìn)入搶答倒計時(預(yù)設(shè)30s搶答時間),如有選手搶答,會有提示音,并會顯示其號數(shù)并立刻進(jìn)入回答倒計時(預(yù)設(shè)30s搶答時間),不進(jìn)行搶答查詢,所以只有第一個按搶答的選手有效。數(shù)碼管上只顯示第一個搶答的選手號,倒數(shù)時間到小于5s會每秒響一下提示音。如倒計時期間,主持人想停止倒計時可以隨時按“停止”按鍵,系統(tǒng)會自動進(jìn)入準(zhǔn)備狀態(tài),等待主持人按“搶答開始”進(jìn)入下次搶答計時。下次搶答是先按復(fù)位鍵。
4、如果主持人未按“搶答開始”鍵,而有人按了搶答按鍵,犯規(guī)搶答,LED上不斷閃爍FF和犯規(guī)號數(shù)并響個不停,直到按下“停止” 鍵為止。
5、P3.0為開始搶答,P3.1為停止,p1.0-p1.7為八路搶答輸入 數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P3.6口。P3.6為蜂鳴器的控制口。八路搶答器的源程序見附錄1.7 4.2 電路仿真
利用keil軟件編寫源程序,其源程序見附錄1,在protues中畫好其總電路圖如下圖4.1所示::
圖4-1 八路搶答器總電路圖
把keil軟件中的源程序生成可執(zhí)行文件,下載到protuce中進(jìn)行仿真,調(diào)試。其選手沒有搶答時的狀態(tài)如下圖4-2所示:
圖4-2 選手準(zhǔn)備搶答時的顯示圖
6號選手搶答成功如下圖4-3所示:
圖4-3 6號選手搶答成功顯示
第五章 電路板制作與調(diào)試
5.1電路板制作:
單片機最小系統(tǒng)的PCB圖如下圖4-1所示:
圖4-1單片機最小系統(tǒng)的PCB圖
將打印好PCB的轉(zhuǎn)印紙平鋪在覆銅板上,準(zhǔn)備轉(zhuǎn)印。再用電熨斗加溫(要很熱)將轉(zhuǎn)印紙上黑色塑料粉壓在覆銅板上形成高精度的抗腐層。準(zhǔn)備好三氯化鐵溶液進(jìn)行腐蝕。腐蝕好后進(jìn)行焊接。清理出焊盤部分,剩下的部分用于阻焊,安裝所需預(yù)定原件并焊接好。然后進(jìn)行調(diào)試。
5.2電路調(diào)試
5.2.1總結(jié)調(diào)試的原則和方法(1)通電觀察 把經(jīng)過準(zhǔn)確測量的電源接入電路。觀察有無異?,F(xiàn)象,包括有無元件發(fā)熱,甚至冒煙有異味電源是否有短路現(xiàn)象等;如有此現(xiàn)象,應(yīng)立即斷電源,待排除故障后才能通電。(2)靜態(tài)調(diào)試
交流和直流并存是電子電路工作的一個重要組成部分。一般情況下,直流為交流服務(wù),直流是電路工作的基礎(chǔ)。因此,電子電路的調(diào)試有靜態(tài)和動態(tài)調(diào)試之分。靜態(tài)調(diào)試過程:如,通過靜態(tài)測試模擬電路的靜態(tài)工作點,數(shù)字電路和各輸入端和輸出端的高低電平值及邏輯關(guān)系等,可以及時發(fā)現(xiàn)已損壞的元器件,判斷電路工作情況,并及時調(diào)整電路參數(shù),使電路工作狀態(tài)符合設(shè)計要求。(3)動態(tài)調(diào)試
調(diào)試的方法是在電路的輸入端接入適當(dāng)頻率和幅值的信號,并循著信號流向來檢測各有關(guān)點的波形,參數(shù)和性能指標(biāo)。發(fā)現(xiàn)故障應(yīng)采取各種方法來排除。通過調(diào)試,最后檢查功能塊和整機的各種指標(biāo)是否滿足設(shè)計要求,如必要再進(jìn)一步對電路參數(shù)提出合理的修正。5.2.2調(diào)試中注意的事項
我們在調(diào)試時,為了保證效果,必須盡量減小測量誤差,提高測量精度。調(diào)試結(jié)果是否正確,很大程度受測量正確與否和測量精度的影響。為此,需注意以下幾點:
(1)正確使用測量儀器的接地端。
(2)測量電壓所用儀器的輸入端阻抗必須遠(yuǎn)大于被測處的等效阻抗。因為,若測量儀器輸入阻抗小,則在測量時會引起分流給測量結(jié)果帶來很大誤差。(3)要正確選擇測量點,用同一臺測量儀進(jìn)行測量進(jìn),測量點不同,儀器內(nèi)阻引起的誤差大小將不同。
(4)調(diào)試過程中,不但要認(rèn)真觀察和測量,還要于記錄。記錄的內(nèi)容包括實驗條件,觀察的現(xiàn)象。只有有了大量的可靠實驗記錄并與理論結(jié)果加以比較,才能發(fā)現(xiàn)電路設(shè)計上的問題,完善設(shè)計方案。
(5)調(diào)試時出現(xiàn)故障,要認(rèn)真查找故障原因,切不可一遇故障解決不了的問題就拆掉線路重新安裝。因為重新安裝的線路仍可能存在各種問題。我們應(yīng)該認(rèn)真檢查.第六章 心得體會
單片機課程設(shè)計是一門很實用,很難的設(shè)計。這次課程設(shè)計歷時二個星期多左右,通過這兩個星期的學(xué)習(xí),發(fā)現(xiàn)了自己的很多不足,自己知識的很多漏洞,看到了自己的實踐經(jīng)驗還是比較缺乏,理論聯(lián)系實際的能力還急需提高。
這次的課程設(shè)計也讓我看到了團(tuán)隊的力量,我認(rèn)為我們的工作是一個團(tuán)隊的工作,團(tuán)隊需要個人,個人也離不開團(tuán)隊,必須發(fā)揚團(tuán)結(jié)協(xié)作的精神。剛開始的時候,大家就分配好了各自的任務(wù),大家有的繪制原理圖,進(jìn)行仿真實驗,有的積極查詢相關(guān)資料,并且經(jīng)常聚在一起討論各個方案的可行性。在課程設(shè)計中只有一個人知道原理是遠(yuǎn)遠(yuǎn)不夠的,必須讓每個人都知道,否則一個人的錯誤,就有可能導(dǎo)致整個工作失敗。團(tuán)結(jié)協(xié)作是我們成功的一項非常重要的保證。而這次設(shè)計也正好鍛煉我們這一點,這也是非常寶貴的。
在這個過程中,我也曾經(jīng)因為實踐經(jīng)驗的缺乏失落過,也曾經(jīng)仿真成功而熱情高漲。生活就是這樣,汗水預(yù)示著結(jié)果也見證著收獲。勞動是人類生存生活永恒不變的話題。雖然這只是一次的極簡單的課程制作(八路搶答器),可是平心而論,也耗費了我們不少的心血,這就讓我不得不佩服專門搞單片機開發(fā)的技術(shù)前輩,才意識到老一輩對我們社會的付出,為了人們的生活更美好,他們?yōu)槲覀兩鐣冻龆嗌傩难?!但?dāng)課程設(shè)計完成時,那感覺是甜蜜的,沒有耕耘,哪來得收獲的喜悅,不懂付出怎么能知道回報的快樂,一分耕耘一分收獲,有付出才會有回報,就在這樣的痛與快樂的交換中,我學(xué)到了知識,學(xué)到了做人的道理。
這次的課程設(shè)計,讓我學(xué)到了很多書本上學(xué)不到的東西,學(xué)到了實際應(yīng)用時,是取用成本的最小化,做設(shè)計不僅要考慮大的方面,小的方面也必須做到完美。最大的收獲是:對鍵盤,顯示器,C51語言(雖然最后還是用匯編語言編寫的,但是,我也試著學(xué)用了C51)的應(yīng)用有了深刻的了解。還有學(xué)會了團(tuán)隊合作精神。
第七章 參考文獻(xiàn)
[1]謝自美.電子線路設(shè)計.華中科技大學(xué)出版社, 2005-08.[2]曹才開,電工電子實訓(xùn)教程.清華大學(xué)出版社,1998.[3] 余發(fā)山,單片機原理及應(yīng)用技術(shù).中國礦業(yè)大學(xué)出版社,2002.[4] 張淑清,單片微型計算機接口技術(shù)及其應(yīng)用.國防工業(yè)出版社,2002.[5]李光飛,單片機課程設(shè)計實例指導(dǎo),北京航空航天大學(xué)出版社,2001.鳴謝
在這三個星期的課程設(shè)計中,感謝老師的細(xì)心指導(dǎo);感謝實驗室老師的鼎力支持;感謝同學(xué)們的熱心幫助;感謝湖南工學(xué)院。因為有了你們的幫助,才使我們圓滿的完成了這次課程設(shè)計。附錄1 源程序
OK EQU 20H;搶答開始標(biāo)志位 RING EQU 22H;響鈴標(biāo)志位 ORG 0000H AJMP MAIN ORG 000BH AJMP TT0 ORG 001BH AJMP TT1 ORG 0040H;避開中斷向量區(qū)
MAIN: MOV R1,#30;初設(shè)搶答時間為30s MOV TMOD,#11H;設(shè)置定時器/方式1 MOV TH0,#0F0H MOV TL0,#0FFH;越高發(fā)聲頻率越高,越尖 MOV TH1,#3CH MOV TL1,#0B0H;50ms為一次溢出中斷/F=12MHz SETB EA SETB ET0 SETB ET1;允許2個中斷,T0/T1 CLR OK CLR RING SETB TR1 SETB TR0;一開始就運行定時器,以開始顯示PPP.如果想重新計數(shù),重置TH1/TL1就可以了;=====查詢程序===== START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY;未開始搶答時候顯示PPP JB P3.0,FEIFA;ACALL DELAY JB P3.0,FEIFA;去抖動,如果“開始鍵”按下就向下執(zhí)行,否者跳到非法搶答查詢
ACALL BARK;按鍵發(fā)聲 MOV A,R1 MOV R6,A;送R1->R6,因為R1中保存了搶答時間
SETB OK;搶答標(biāo)志位,用于COUNT子程序中判斷是否查詢搶答 MOV R3,#0AH;搶答只顯示計時,滅號數(shù)
AJMP COUNT;進(jìn)入倒計時程序,“查詢有效搶答的程序”在COUNT里面 FEIFA: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4 JNB P1.4,FALSE5 JNB P1.5,FALSE6 JNB P1.6,FALSE7 JNB P1.7,FALSE8 AJMP START;=====非法搶答處理程序===== FALSE1: ACALL BARK;按鍵發(fā)聲 MOV R3,#01H AJMP ERROR FALSE2: ACALL BARK MOV R3,#02H AJMP ERROR FALSE3: ACALL BARK MOV R3,#03H AJMP ERROR FALSE4: ACALL BARK MOV R3,#04H AJMP ERROR FALSE5: ACALL BARK MOV R3,#05H AJMP ERROR FALSE6: ACALL BARK MOV R3,#06H AJMP ERROR FALSE7: ACALL BARK MOV R3,#07H AJMP ERROR FALSE8: ACALL BARK MOV R3,#08H AJMP ERROR;=====倒計時程序(搶答倒計時跳到改程序)===== COUNT: MOV R0,#00H;重置定時器中斷次數(shù) MOV TH1,#3CH MOV TL1,#0B0H;重置定時器
RECOUNT: MOV A,R6;R6保存了倒計時的時間,之前先將搶答時間給R6 MOV B,#0AH DIV AB;除十分出個位/十位 MOV 30H,A;十位存于(30H)MOV 31H,B;個位存于(31H)MOV R5,30H;取十位 MOV R4,31H;取個位 MOV A,R6 SUBB A,#016H JNC LARGER;大于10s跳到LARGER/小于等于10s會提醒 MOV A,R0 CJNE A,#0AH,FULL;1s中0.5s向下運行 CLR RING AJMP CHECK FULL: CJNE A,#14H,CHECK;下面是1s的情況,響并顯示號數(shù)并清R0,重新計數(shù)
SETB RING MOV A,R6 JZ QUIT;計時完畢 MOV R0,#00H DEC R6;一秒標(biāo)志減1 AJMP CHECK LARGER: MOV A,R0 CJNE A,#14H,CHECK;如果1s向下運行,否者跳到查“停/顯示” DEC R6;計時一秒R6自動減1 MOV R0,#00H CHECK: JNB P3.1,QUIT;如按下停止鍵退出 ACALL DISPLAY JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)AJMP RECOUNT ACCOUT: JNB P1.0,TRUE1 JNB P1.1,TRUE2 JNB P1.2,TRUE3 JNB P1.3,TRUE4 JNB P1.4,TRUE5 JNB P1.5,TRUE6 JNB P1.6,TRUE7 JNB P1.7,TRUE8 AJMP RECOUNT QUIT: CLR OK;如果按下了“停止鍵”執(zhí)行的程序 CLR RING
ACALL BARK AJMP START;=====正常搶答處理程序===== TRUE1: ACALL BARK;按鍵發(fā)聲 MOV R3,#01H CLR OK;因為答題的計時不再查詢搶答,所以就鎖了搶答 AJMP COUNT TRUE2: ACALL BARK;MOV R3,#02H CLR OK AJMP COUNT TRUE3: ACALL BARK;MOV R3,#03H CLR OK AJMP COUNT TRUE4: ACALL BARK;MOV R3,#04H CLR OK AJMP COUNT TRUE5: ACALL BARK;MOV R3,#05H CLR OK AJMP COUNT TRUE6: ACALL BARK;MOV R3,#06H CLR OK AJMP COUNT TRUE7: ACALL BARK;MOV R3,#07H CLR OK AJMP COUNT TRUE8: ACALL BARK;MOV R3,#08H CLR OK AJMP COUNT;=====犯規(guī)搶答程序===== ERROR: MOV R0,#00H MOV TH1,#3CH MOV TL1,#0B0H MOV 34H,R3;犯規(guī)號數(shù)暫存與(34H)HERE: MOV A,R0 CJNE A,#0AH,FLASH;0.5s向下運行->滅并停響
CLR RING
MOV R3,#0AH MOV R4,#0AH MOV R5,#0AH;三燈全滅 AJMP CHECK1 FLASH: CJNE A,#14H,CHECK1;下面是1s的情況,響并顯示號數(shù)并清R0,重新計 SETB RING MOV R0,#00H MOV R3,34H;取回號數(shù) MOV R5,#0BH MOV R4,#0BH;顯示pp和號數(shù) AJMP CHECK1 CHECK1: JNB P3.1,QUIT1 ACALL DISPLAY AJMP HERE QUIT1: CLR RING CLR OK AJMP START;=====顯示程序===== DISPLAY: MOV DPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出, MOV A,R3 MOVC A,@A+DPTR MOV P2,#0feH MOV P0,A ACALL DELAY MOV DPTR,#DAT2 MOV A,R5 MOVC A,@A+DPTR MOV P2,#0fdH MOV P0,A ACALL DELAY MOV A,R4 MOVC A,@A+DPTR MOV P2,#0fbH MOV P0,A ACALL DELAY RET DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,73H;“滅”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“滅”,“p” DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,73H;第一個為零,其他與上相同,因為十位如果為零顯示熄滅;=====報警延時====== DELAY1: MOV 35H,#08H LOOP0: ACALL DISPLAY DJNZ 35H,LOOP0 RET;=====延時(顯示和去抖動用到)===== DELAY: MOV 32H,#12H LOOP: MOV 33H,#0AFH LOOP1: DJNZ 33H,LOOP1 DJNZ 32H,LOOP RET;=====發(fā)聲程序===== BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING;按鍵發(fā)聲 RET;=====TO溢出中斷(響鈴程序)===== TT0: MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT;CPL P3.6;RING標(biāo)志位為1時候P3.6口不斷取反使喇叭發(fā)出一定頻率的聲音
OUT: RETI;=====T1溢出中斷(計時程序)===== TT1: MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END 18
第五篇:51單片機四路搶答器程序
#include
void delay_100ms(unsigned int t){ unsigned char i,j,k;for(i=t;i>0;i--){
for(j=200;j>0;j--);
{
for(k=248;k>0;k--);
} } } void beep(){
BEEP=1;
delay_100ms(100);
BEEP=0;
}
void T0_int()interrupt 1
{
static unsigned char count;unsigned char a=1;count++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;if(count==20){
count=0;
P0=TAB[pulse_number1--];
}
beep();
if(pulse_number1==0)
{
P0=TAB[0];
TR0=0;
while(a)
{ beep();if(!key5)a=0;
}
}
}
void main(){
bit flag;
temp=0x00;
P2=temp;
P0=0x3f;
TMOD=0x01;
TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;
TR0=1;
while(!flag)
{
}
while(flag);}
if(!key1){P0=0x06;beep();flag=1;TR0=0;}
else if(!key2){P0=0x5b;beep();flag=1;TR0=0;} else if(!key3){P0=0X4f;beep();flag=1;TR0=0;} else if(!key4){P0=0x66;beep();flag=1;TR0=0;}