基于單片機的班級投票器_第1頁
基于單片機的班級投票器_第2頁
基于單片機的班級投票器_第3頁
基于單片機的班級投票器_第4頁
基于單片機的班級投票器_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于單片機的班級投票器【摘 要】班級投票器是針對班級而設(shè)計的現(xiàn)場投票計數(shù)器系統(tǒng),該系統(tǒng)可用于班級人數(shù)小于99人,職位候選人不超過10人的投票選舉。投票器是由鍵盤接口專用芯片74C922來完成按鍵編碼,再通過單片機采集信息,進(jìn)行票數(shù)的累計,最后有四聯(lián)數(shù)碼管來顯示選舉結(jié)果。投票期間用一個按鍵來控制投票有效性,并通過發(fā)光二極管來完成指示工作。選舉投票期間可暫停投票,查看投票結(jié)果,后可繼續(xù)投票,直至達(dá)到預(yù)設(shè)的最大班級人數(shù)關(guān)閉投票系統(tǒng)。引言 31 系統(tǒng)總體設(shè)計 41.1 設(shè)計要求.41.2 系統(tǒng)組成方框圖.41.3 方案設(shè)計.42 系統(tǒng)硬件設(shè)計 42.1 相關(guān)芯片介紹.42.1.1 AT89C51芯片介

2、紹.42.1.2 74C922芯片介紹.52.1.3 74LS04芯片介紹.62.2 各單元電路設(shè)計與分析.72.2.2 由74C922夠成的鍵盤電路.72.2.2 復(fù)位電路.82.2.3 時鐘電路.82.2.4 顯示模塊.92.2.5 控制投票有效部分102.3 總原理圖和元器件清單.112.3.1 總原理圖.112.3.2 元件清單.113 系統(tǒng)軟件設(shè)計123.1 主程序設(shè)計123.2 中斷程序設(shè)計133.3 定時程序設(shè)計144 調(diào)試165 總結(jié)166 致謝語17參考文獻(xiàn)17附錄一 PCB圖 19附錄二 源程序 19引言在大學(xué)生活中,時常發(fā)生選舉投票事件。目前班級職位選舉采用紙條的方式進(jìn)行

3、投票。具體過程如下:首先,在黑板上列出要選舉的職位及職位候選人的名字;接著班級成員在紙條上寫上候選人的名字,折疊好放在指定的位置(如講臺桌上);再來全部投票完畢后,進(jìn)行唱票,判斷票的有效性(寫上多于一個候選人的名字,或不寫都視為廢票),同時并統(tǒng)計票數(shù)。最后,票數(shù)統(tǒng)計完成后先判斷本次選舉是否有效(若發(fā)生選票多于選民數(shù),視為無效)。確定本次選舉有效后,宣布最高得票者為該職位的的當(dāng)選者。這樣的選舉的缺點是比較費時,效率不高,同時也由于可能發(fā)生的選舉無效問題,造成時間的延長,同時降低班級成員的積極性等。其優(yōu)點就是選舉十分的直觀,可以在唱票時期直接觀察到每個候選人的得票情況,并較直接判斷出當(dāng)選人。針對紙

4、條選舉費時,效率不高的問題,采用設(shè)計投票器來改善這一情況。本設(shè)計是基于單片機設(shè)計的適用于班級選舉的投票器,由鍵盤專用芯片74C922完成投票,再經(jīng)由單片機采集信息,統(tǒng)計票數(shù)。最后由四聯(lián)數(shù)碼管顯示投票結(jié)果。并且利用發(fā)光二極管和一個按鍵來控制投票的有效性。選舉投票期間可暫停投票,查看當(dāng)前投票結(jié)果,后可繼續(xù)投票,直至達(dá)到預(yù)設(shè)的最大班級人數(shù)就會自動關(guān)閉投票系統(tǒng)。本次設(shè)計的班級投票器可以有效地控制投票及選舉的有效性,就節(jié)省了去判斷選票及選舉的有效性及選舉無效延長的時間。同時投票器本身有統(tǒng)計票數(shù)的功能,就又節(jié)省了統(tǒng)計票數(shù)的時間。整體上提高了班級選舉的效率,同時也使得選舉更加地民主,公平。1、系統(tǒng)總體設(shè)計1

5、.1 設(shè)計要求假定班級成員45人,職位候選人10人(不超過10人)。選民(班級成員)分別編號為01,02,44,45;候選人分別編號為01,02,09,10(由10個按鍵構(gòu)成)。(1) 一上電不允許投票,按下允許投票鍵,利用10個按鍵進(jìn)行投票,有效投票后顯示選民編號和所選候選人的編號。將投票結(jié)果儲存起來并且再按其他按鍵無效。(2) 按下允許投票鍵進(jìn)行下一個選民的投票。(3) 投票期間,可暫停投票來查看票數(shù)統(tǒng)計結(jié)果,后按下允許投票鍵又可繼續(xù)投票。(4) 全部成員投票完成后,最后顯示候選人的編號及其得票數(shù)。(5) 按下復(fù)位鍵,進(jìn)行新一輪的職位選舉。1.2 系統(tǒng)組成方框圖單片機(AT89C51)時鐘

6、電路復(fù)位電路由74C922構(gòu)成的鍵盤投票允許投票鍵開啟選民投票LED燈滅提示選民可以進(jìn)行投票;當(dāng)LED燈亮,無法進(jìn)行投票。數(shù)碼管顯示圖1-2 系統(tǒng)模塊組成方框圖1.3 方案設(shè)計設(shè)計時班級成員不超過99,職位候選人10人。由鍵盤接口專用芯片74C922及12個按鍵(10個按鍵用于投票工作,2個按鍵用于查看投票結(jié)果)構(gòu)成的電路來完成鍵盤掃描,編碼,再通過AT89C51芯片來采集信息,進(jìn)行票數(shù)的統(tǒng)計。由四聯(lián)數(shù)碼管完成顯示工作,投票期間顯示選民編號和所選候選人的編號,查看結(jié)果時顯示候選人的編號及其得票數(shù)。設(shè)置一按鍵來控制有效投票,并讓發(fā)光二極管配合指示。選舉投票期間可暫停投票,查看投票結(jié)果,后可繼續(xù)投

7、票,直至達(dá)到預(yù)設(shè)的最大班級人數(shù)關(guān)閉投票系統(tǒng)。2、系統(tǒng)硬件設(shè)計2.1 相關(guān)芯片介紹2.1.1 AT89C51芯片簡介AT89C51是一種低電壓,高性能CMOS8位單片機,采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和FLASH存儲單元,功能強大AT89C51單片機可為您提供許多高性能比的應(yīng)用場合,可靈活應(yīng)用在各種控制領(lǐng)域。1它具有以下特點:4K字節(jié)FLASH閃速存儲器,128字節(jié)內(nèi)部RAM,32個I/O口線,兩個16位定時/計數(shù)器,一個5向量級中斷接口,一個全雙工串行通信口,片內(nèi)振蕩器及時鐘電路。同時,AT89C51可降至0H

8、z的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時/計數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其它所有部件工作直到出現(xiàn)下一個硬件復(fù)位。圖2-1-1 AT89C51引腳圖2.1.2 74C922芯片簡介74C922芯片有16鍵IC和20鍵IC,本設(shè)計采用的是16鍵的IC。圖2-1-2(1)所示為44(16鍵)掃描式編碼鍵盤原理圖。這種鍵盤的按鍵排成矩陣形式,以減少按鍵聯(lián)線。如圖中有16個鍵,排列成4行4列,僅需8根引線。時鐘發(fā)生器的輸出送給4位計數(shù)器進(jìn)行計數(shù),計數(shù)器的低2位經(jīng)譯碼后作為行掃描,高2位經(jīng)譯碼

9、后作為列掃描。若沒有檢出有鍵閉合,則計數(shù)器周而復(fù)始反復(fù)計數(shù),即反復(fù)進(jìn)行掃描,一旦檢出有鍵閉合,就發(fā)出一個脈沖使時鐘振蕩器停振,計數(shù)器隨即停止計數(shù)。單片機通過讀取計數(shù)器的計數(shù)值來獲取閉合鍵所在的行列位置,然后從真值表得到按鍵讀數(shù)。如果有兩個鍵同時按下,則掃描到第一個閉合鍵時就停止掃描,把該鍵當(dāng)作有效按鍵進(jìn)行處理。24位計數(shù)器時鐘發(fā)生器24譯碼器44鍵盤24譯碼器去抖動停振選通3210圖2-1-2(1)掃描式編碼鍵盤74C922芯片(16鍵IC)的引腳排列如圖2-1-2(2)所示:圖2-1-2(2)74C922引腳圖X1X4:列線。Y1Y4:行線。OSC:接振蕩電容0.1F,以便掃描矩陣鍵盤KM:

10、鍵盤消除抖動電路,并發(fā)出兩種信號。(1)內(nèi)部計數(shù)器停止計數(shù)。(2)若有鍵按下,使DA腳由未按鍵時的低電平變?yōu)楦唠娖?若按鍵未放開則一直保持高電平,當(dāng)按鍵放開時,才轉(zhuǎn)為低電平。此引腳外接一個電容是OSC所接電容的10倍。DA:數(shù)據(jù)有效信號。若無鍵按下,保持低電平。若有鍵按下,變?yōu)楦唠娖?,直到鍵放開,才轉(zhuǎn)為低電平。/OE:輸出使能。DA:按鍵值輸出,按BCD碼輸出,具體輸出情況如表2-1-2所示。表2-1-2 真值表數(shù)據(jù)輸出0Y1,X11Y1,X22Y1,X33Y1,X44Y2,X15Y2,X26Y2,X37Y2,X48Y3,X19Y3,X210Y3,X311Y3,X412Y4,X113Y4,X2

11、14Y4,X315Y4,X4A0101010101010101B0011001100110011C0000111100001111D00000000111111112.1.3 74LS04芯片簡介74ls04是一六反向器,其功能表如表2-1-3,其引腳分布如圖2-1-3。表2-1-3功能表Y=輸入輸出AYLHHLH為高電平L為低電平圖2-1-3 74LS04引腳圖2.2 各單元電路設(shè)計與分析2.2.1由74C922夠成的鍵盤電路圖2-2-1 74C922構(gòu)成的鍵盤電路在鍵盤部分采用74C922來完成工作。鍵盤電路圖如圖2-2-1所示。74922芯片是專用編碼鍵盤接口芯片,當(dāng)按下某一按鍵時,該芯

12、片能自動給出相應(yīng)的編碼信息,并可自動消除抖動,從而可免除關(guān)于削抖的軟件編程,提高了CPU的利用率。2因為按鍵掃描要對按鍵進(jìn)行削抖處理,而削抖分為軟件削抖和硬件削抖,一般情況下多采用軟件削抖。74C922為CMOS工藝技術(shù)制造,工作電壓為315V,“二鍵鎖定”功能,編碼輸出為三態(tài)輸出,可直接與微處理器數(shù)據(jù)線相連,內(nèi)部振蕩器完成44矩形鍵盤掃描,當(dāng)有按鍵按下時,DA變高,通過非門接到AT89C51的外部中斷0,并且設(shè)外部中斷0為邊沿觸發(fā)方式,當(dāng)DA變高時,經(jīng)過非門變?yōu)榈碗娖教儺a(chǎn)生外部中斷,通知AT89C51從數(shù)據(jù)總線讀鍵值,判斷鍵值從而完成相應(yīng)的散轉(zhuǎn)程序功能。3根據(jù)圖2-2-1及74C922芯片

13、真值表2-1-2,按鍵S1S10對應(yīng)DCBA輸出(00001001),上下翻查鍵S11,S12對應(yīng)輸出是(1010)和(1011)。同時ABCD輸出連接到AT89C51的P2口的P2.0P2.3。2.2.2復(fù)位電路圖2-2-2 復(fù)位電路單片機的復(fù)位都是靠外部電路來實現(xiàn)的。在時鐘電路工作后,只要在單片機的復(fù)位(RST)腳上出現(xiàn)24個時鐘振蕩脈沖(也就是2個機器周期)以上的高電平,單片機便實現(xiàn)初始化狀態(tài)復(fù)位。4傳統(tǒng)的復(fù)位方法有阻容上電復(fù)位和按鍵電平復(fù)位如圖2-2-2。本設(shè)計采用按鍵手動復(fù)位電路。它們實際上利用RC充放電原理實現(xiàn)的復(fù)位電路,從外部給RST腳2個機器周期以上的高電平。在實際應(yīng)用系統(tǒng)中,

14、為了保證復(fù)位電路可靠地工作,常常將RC電路接斯密特電路后再接入單片機的復(fù)位端和外圍電路復(fù)位端。這樣就特別適用于應(yīng)用現(xiàn)場干擾大、電壓波動大的工作環(huán)境,并且當(dāng)系統(tǒng)有多個復(fù)位端時,也能夠保證可靠的同步復(fù)位。當(dāng)AT89C51的RST引腳到高電平時,單片機就會復(fù)位。按下按紐S13,將高電平接到RST端,從而復(fù)位。復(fù)位后,單片機就從0000H地址開始執(zhí)行程序。P0P3四個并行接口全為高電平,其他寄存器全部清零,只有SBUF寄存器狀態(tài)不確定。2.2.3時鐘電路圖2-2-3 時鐘電路時鐘電路是計算機的心臟,它控制著計算機的工作節(jié)奏。CPU就是通過復(fù)雜的時序電路完成不同的指令功能的。MCS-51的時鐘信號可以由

15、兩種方式產(chǎn)生:一種是內(nèi)部方式,利用芯片內(nèi)部的振蕩電路,產(chǎn)生時鐘信號;另一種為外部方式,時鐘信號由外部引入。MCS-51單片機有HMOS型和CHMOS型,它們的時鐘電路有一定區(qū)別。5內(nèi)部時鐘電路,利用AT89C51內(nèi)部一個高增益的反向放大器,把一個晶振體和兩個電容器組成的自激振蕩電路接于XTAL1(19腳)和XTAL2(18腳)之間。這樣,振蕩器發(fā)出的脈沖直接送入內(nèi)部時鐘電路。如圖2-2-3所示。圖中晶振體可以是石英晶體或陶瓷結(jié)構(gòu),振蕩頻率可任選,一般頻率在1.212MHz。對于石英晶體振蕩器,電容C3,C4在30pF左右,對于陶瓷振蕩器,C3,C4約47pF左右。外部部時鐘電路,MCS-51的

16、內(nèi)部工作時鐘也可以由外部振蕩器提供,這時,對HMOS型芯片,外部振蕩器的信號接至XTAL2,即內(nèi)部時鐘發(fā)生器的輸出端,而內(nèi)部反相放大器的輸人端XTAL1應(yīng)接地.在CHMOS電路中,因內(nèi)部時鐘發(fā)生器的信號取自反相放大器的輸入端(即與非門的一個輸人端),故采用外部時鐘源時,接線方式與HMOS型的有所不同:外部信號接至XTALI,XTAL2不用。外部時鐘引入方式如圖2-2-3(A,B,C)所示。對外部振蕩器的信號沒有特殊的要求,一般為0.5一12 MHz的方波,方波的波形應(yīng)盡量規(guī)范即上升沿、下降沿盡可能垂直。時鐘發(fā)生器把振蕩頻率加以二分頻,給主機提供了一個雙相信號,第一相信號在每一個時鐘周期的前半部

17、分有效,第二相信號則在時鐘周期的后一半有效。圖2-2-3(A)HMOS和CMMOS器件都適用的外部時鐘連接圖 圖2-2-3(B)HMOS器件外部時鐘連接圖 圖2-2-3(C)CHMOS器件外部時鐘連接圖本次設(shè)計采用內(nèi)部時鐘電路,石英晶體(頻率12M),電容C3,C4為30pF。AT89C51的機器周期為1us。2.2.4顯示模塊(1)顯示方式的選擇7段數(shù)碼管的顯示方法可分為靜態(tài)顯示和動態(tài)顯示,所謂靜態(tài)顯示,就是當(dāng)顯示某一字符時,相應(yīng)段的發(fā)光二極管恒定地導(dǎo)通或截止。例如,7段顯示器的a、b、c、d、e、f段導(dǎo)通,g、dp段截止,則顯示0。這種顯示方法的每一位都需要有一個8位輸出口控制。對于51單

18、片機,可以在并行口上擴展多片鎖存器74LS573作為靜態(tài)顯示器接口。所謂動態(tài)顯示就是一位一位地輪流點亮各位顯示器(掃描),對于顯示器的每一位而言,每隔一段時間點亮一次。雖然在同一時刻只有一位顯示器在工作(點亮),但利用人眼的視覺暫流效應(yīng)和發(fā)光二極管熄滅時的余輝效應(yīng),看到的卻是多個字符“同時”顯示。顯示器亮度既與點亮是的導(dǎo)通電流有關(guān),也與點亮?xí)r間和間隔時間的比例有關(guān)。調(diào)整電流和時間參數(shù),可實現(xiàn)亮度較高較穩(wěn)定的顯示。若顯示器的位數(shù)不大于8位,則控制顯示器公共極電位只需一個8位I/O口(稱為掃描口或字位口),控制各位LED顯示器所顯示的字形也需要一個8位口(數(shù)據(jù)口或字形口)。與靜態(tài)驅(qū)動顯示相比,動態(tài)

19、掃描顯示具有以下優(yōu)點:第一,能顯著降低顯示器的功耗,這對于采用電池供電的便攜式數(shù)字儀表尤為重要;第二,能大大減少顯示器的外部引線,給印制板的設(shè)計和安裝帶來方便;第三,能采用BCD碼多路輸出的方式,不僅使譯碼、驅(qū)動電路大為簡化,還可以與微機相連等。6動態(tài)掃描的缺點是CPU工作效率比靜態(tài)掃描低,同時顯示亮度較靜態(tài)顯示器要低。本次設(shè)計選擇采用動態(tài)掃描。如圖2-2-4芯片AT89C51的P1.0P1.6作為數(shù)據(jù)口,P0.0P0.3作為掃描片選口。圖2-2-4 LED顯示電路(2)數(shù)碼管的驅(qū)動本設(shè)計采用共陰型的四聯(lián)數(shù)碼管,關(guān)于數(shù)碼管的驅(qū)動部分把P1口(P1.0 P1.6)作為驅(qū)動接口,并外接上排阻511

20、作為其上拉電阻增強其驅(qū)動能力。這樣的驅(qū)動能力就可使數(shù)碼管顯示合適的亮度。2.2.5控制投票有效部分由一個發(fā)光二極管(DS1)和一個按鍵(S)構(gòu)成控制投票有效部分,如圖2-2-5所示。通過軟件設(shè)置成發(fā)光二極管DS1滅時可允許投票,DS1亮?xí)r不可以投票。而按下按鍵S(允許投票鍵),讓P3.3產(chǎn)生一個負(fù)跳變,開啟外部中斷1(外部中斷選擇邊沿觸發(fā)的方式),通過軟件編程使發(fā)光二極管滅,一檢測到有投票按鍵按下,使發(fā)光二極管亮。通過DS1和S的配合來控制投票有效的問題。圖2-2-5 控制投票有效部分電路2.3總原理圖和元器件清單2.3.1總原理圖圖2-3 總原理圖232元件清單器件名稱器件型號數(shù)量備注單片機

21、AC89C511晶振12M1鍵盤編碼器74C9221非門74LS041四聯(lián)數(shù)碼管共陰型1發(fā)光二極管1按鍵14磁介電容30pf21042電解電容22uf1電阻1K6100歐1排阻5111導(dǎo)線若干電源5V13、系統(tǒng)軟件設(shè)計開始寄存器的配置燈和系統(tǒng)的初始化進(jìn)入for(;)死循環(huán)按下鍵是有效投票嗎?顯示數(shù)據(jù)轉(zhuǎn)換,被選候選人選票加1,選民編號自動加1,燈亮選民編號等于預(yù)設(shè)的最大選民人數(shù)加1關(guān)閉投票系統(tǒng)按下鍵S11?按下鍵S12?上翻操作下翻操作YNNYNNYintbit=1YN31主程序設(shè)計圖3-1 主程序流程圖主程序流程圖如圖3-1所示,在寄存器配置的環(huán)節(jié)中,包含了打開外部中斷1,外部中斷0,選擇2個

22、外部中斷的觸發(fā)方式為邊沿觸發(fā)方式;選擇定時器T1的工作方式為方式2(自動再裝入的8位定時器的工作方式),打開T1的溢出中斷并對其賦初值。當(dāng)intbit=1時,開始執(zhí)行主程序中關(guān)于對選票的統(tǒng)計,上下翻等操作,而外部中斷0打開后的便會執(zhí)行intbit=1。按下鍵是有效投票須同時滿足3個條件,第一個是發(fā)光二極管LED指示燈處于燈滅狀態(tài),第二個是選民編碼未超過最大班級人數(shù),第三個是按下的鍵是鍵S1S10其中一個。與74C922配合的12個按鍵中,S1S10代表的是10個候選人(0110)相應(yīng)被投票鍵,S11是用于查詢結(jié)果時的上翻鍵,S12是用于查詢結(jié)果時的下翻鍵。中斷0的中斷入口Key鍵值清零 Key

23、鍵值加1,并置intbit為1中斷返回P2.0為高電平?Key鍵值加1P2.1為高電平?Key鍵值加2P2.2為高電平?Key鍵值加4P2.3為高電平?Key鍵值加8NNNNYY3.2中斷程序設(shè)計關(guān)閉LED中斷1的中斷入口中斷返回圖3-2(1) 外部中斷1流程圖圖3-2(2) 外部中斷0流程圖外部中斷1流程圖如圖3-2(1)所示,外部中斷0流程圖如圖3-2(1)所示,其中2個外部中斷的觸發(fā)方式皆是邊沿出發(fā),通過硬件電路中P3.3(INT1)引腳處連接一個按鍵(S,也就是允許投票鍵)來控制中斷1。當(dāng)按鍵按下時便會產(chǎn)生一個負(fù)跳變,打開了中斷1。執(zhí)行中斷程序讓發(fā)光二極管滅(允許投票)。通過按鍵S和L

24、ED燈來控制按鍵投票的有效性。外部中斷0用來完成按鍵采集工作,并置intbit為1,轉(zhuǎn)入執(zhí)行主程序中關(guān)于對選票的統(tǒng)計,上下翻等操作。與74C922芯片構(gòu)成的12個按鍵的鍵盤電路,一有按鍵按下,74C922的DA端由低電平轉(zhuǎn)為高電平再經(jīng)74LS04非門的取反作用給P3.2(INT0)產(chǎn)生負(fù)跳變,便打開中斷0。按鍵S1S10(10個候選人0110相應(yīng)被投票鍵)對應(yīng)DCBA輸出(00001001),上下翻查鍵S11,S12按鍵值對應(yīng)輸出是(1010)和(1011)。ABCD輸出端連接到AT89C51的P2口的P2.0P2.3。執(zhí)行如圖3-2(2)所示的操作,便使得從按鍵S1S12采集給Key,分別對

25、應(yīng)Key鍵值為1到12。3.3定時程序設(shè)計定時器T1的主要功能就是用于四聯(lián)數(shù)碼管的片選顯示,每隔10個定時中斷時間(2.39ms)換一位數(shù)據(jù)管顯示相應(yīng)的數(shù)字。定時中斷流程圖如圖3-3所示。通過主程序中的TMOD=0x20語句選擇定時器工作方式為方式二(自動再裝入的8位定時器的工作方式);通過TL1=0x00;TH1=0x11;兩個語句對T1賦初值。T1的定時時間為t,t=(28-TH0初值)*振蕩周期*1 3-3根據(jù)公式3-3可知t=(256-17)*(1/12M)*12=239us,那么10個定時時間就是2.39ms,本設(shè)計中硬件電路中,共陰型的四聯(lián)數(shù)碼管的4個片選端(14)與AT89C51

26、的P0.0P0.3引腳相連。同時共陰型的數(shù)碼管的片選端是低電平有效,cs用于片選,cs等于03相當(dāng)于連接到數(shù)碼管的片選端(41)。本設(shè)計采用的是動態(tài)掃描,而動態(tài)掃描的頻率有一定的要求,頻率太低,LED將出現(xiàn)閃爍現(xiàn)象。若頻率太高,由于每個LED點亮的時間太短,LED的亮度太低,肉眼無法看清,所以一般均取幾個ms左右為宜。本次設(shè)計選擇每隔10個定時中斷時間(2.39ms)換一位數(shù)碼管顯示,利用人眼的視覺暫流效應(yīng)和發(fā)光二極管熄滅時的余輝效應(yīng),就可以看到四聯(lián)數(shù)碼管輸出四個數(shù)字。調(diào)試時,可根據(jù)實際情況再對定時時間做適當(dāng)?shù)恼{(diào)節(jié)。定時器1的中斷入口到了10個定時時間了嗎?cs=0?P0.3置0cs=1?P0

27、.2置0cs=2?P0.1置0cs=3?P0.0置0數(shù)碼管顯示相應(yīng)位的數(shù)字cs!=3cs加1cs置0NNNNNNYYYYYY中斷返回N圖3-3 定時中斷流程圖4調(diào)試調(diào)試包括硬件調(diào)試和軟件調(diào)試。而硬件調(diào)試的主要任務(wù)是排除硬件故障,其中包括設(shè)計錯誤和工藝性錯誤。在利用Keil和Proteus兩個軟件仿真調(diào)試,基本上驗證了設(shè)計方案的可行性后,開始畫原理圖和PCB圖(PCB圖見附錄一),接著制版。對制好的電路板進(jìn)行初步調(diào)試,檢查電路是否符合原理圖的設(shè)計,是否出現(xiàn)短路,斷路等現(xiàn)象。及時對電路板做適當(dāng)?shù)男扪a。接著大致檢查一下要用到的元器件,沒問題后焊接電路。做好硬件電路后,將源程序(源程序見附錄二)燒入A

28、T89C51芯片,后芯片插在電路板上,接上5V的電源進(jìn)行調(diào)試。一開始發(fā)現(xiàn)數(shù)碼管不能正常顯示,同時也不夠亮。同時LED燈指示燈會一直亮,按下允許投票按鍵(S)也不會滅。接著就用萬用表分模塊檢查電路,排查故障。具體地對照仿真圖檢查各個芯片管腳的電壓是否達(dá)到正常的工作電壓。首先檢查單片機是否有起振,是否會正常。發(fā)現(xiàn)EA端懸空,為了單片機能穩(wěn)定工作將EA端接高電平(訪問的地址空間在04KB范圍內(nèi),CPU訪問內(nèi)程序存儲器;訪問的地址空間超出4KB時,CPU將自動訪問外部程序存儲器)。檢查后發(fā)現(xiàn)單片機有起振,可正常工作。其次檢查由74C922芯片構(gòu)成的鍵盤電路,發(fā)現(xiàn)由74C922芯片構(gòu)成的鍵盤電路本身能正

29、常工作(按下相應(yīng)的鍵連接ABCD的管腳會輸出正確的數(shù)據(jù));然而按下投票按鍵數(shù)碼管確不能顯示正確的數(shù)據(jù),說明是顯示的問題。而檢查過共陰型的四聯(lián)數(shù)碼管發(fā)現(xiàn)它可以正常工作,調(diào)試時發(fā)現(xiàn)數(shù)碼管的亮度不夠,說明需要增強驅(qū)動能力,同時數(shù)碼管的顯示不正常,很有可能是因為程序中的關(guān)于數(shù)碼管動態(tài)顯示的方面有問題。在設(shè)計的電路AT89C51的P1口(P1.0P1.6)直接接上四聯(lián)數(shù)碼管的AG腳,顯然這樣單靠P1口的驅(qū)動是不夠的,后在P1口(P1.0P1.6)加上7個510歐的上拉電阻(利用排阻511實現(xiàn))來增強其驅(qū)動能力,修改調(diào)試后發(fā)現(xiàn)數(shù)碼管可顯示的足夠的亮度。做好以上的修改再調(diào)試時,觀察到數(shù)碼管剛開始會顯示初始狀

30、態(tài)(4個0),復(fù)位按鍵也有效,允許投票按鍵也可與LED配合正常顯示,但是按下投票按鍵,數(shù)碼管不會顯示正常的數(shù)鋸。再一次驗證了很有可能是軟件部分?jǐn)?shù)碼管的動態(tài)顯示有問題。后將程序中關(guān)于片選掃描部分P0口(P0.0P0.3)由原先的右移片選掃描改為直接的對P0.0P0.3直接片選賦值后,再次燒入程序便可顯示正常的數(shù)據(jù)。此時,電路板基本上實現(xiàn)了設(shè)計要求。但必須全部投票完成后才可利用上下翻查鍵來查看投票的結(jié)果。接著對程序關(guān)于上下翻查鍵部分作出適當(dāng)?shù)男薷暮螅蓪崿F(xiàn)了再未達(dá)到預(yù)設(shè)的班級人數(shù)時,也可查看當(dāng)時的投票結(jié)果。5總結(jié)本設(shè)計是基于AT89C51設(shè)計的班級投票器。它可實現(xiàn)最多班級人數(shù)99個,最多職位候選人

31、10個的投票選舉。由鍵盤接口專用芯片74C922完成按鍵掃描編碼工作,再通過AT89C51芯片來采集信息,完成票數(shù)統(tǒng)計任務(wù),并有四聯(lián)數(shù)碼管顯示相應(yīng)的數(shù)字(投票期間顯示選民編號和所選候選人的編號,查看結(jié)果時顯示候選人的編號及其得票數(shù))。同時有LED和允許投票按鍵來控制投票的有效性??梢栽谕镀逼陂g或投票結(jié)束時利用上下翻查鍵可以查看投票結(jié)果。而班級投票器主要用來滿足平常班級職位等選舉,它可以較大地提高班級職位選舉的效率,同時更加突出了選舉的公平,公開。本設(shè)計需改進(jìn)的地方,首先,可以增設(shè)一個棄權(quán)鍵和一個用于顯示最后投票選舉的結(jié)果的按鍵,使得投票系統(tǒng)更加的完善。其次,本次設(shè)計的投票器是基于班級設(shè)計,考慮

32、到實際中班級投票的情況,設(shè)計時最多候選人人數(shù)為10人,以滿足班級日常選舉??蛇M(jìn)一步增大候選人人數(shù),來完善投票系統(tǒng),使其更大范圍的選舉。再有,若顯示時編號可配合人名等資料顯示,會使得顯示結(jié)果更加的直觀;最后,可以進(jìn)一步的改善,實現(xiàn)直接手動調(diào)節(jié)相關(guān)按鍵便可設(shè)置最大班級人數(shù),而不需要通過軟件修改來完成。附錄1、PCB圖2、源程序#include reg51.hsbit LED =P24;sbit P2_0 = P20;sbit P2_1 = P21;sbit P2_3 = P23;sbit P2_2 = P22;sbit P3_3 = P33;unsigned char key=0;#define

33、max_xuanmin 45 /最多選民數(shù)量unsigned char beixuan11;/選手選票數(shù)unsigned char xuanmin=1;/選民編號unsigned char present=1;/目前這個被選者,用于顯示整體選票unsigned char ledout4; /顯示數(shù)據(jù)unsigned char code led110=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f;unsigned char cs=0;unsigned char flash_cs=0;bit ok=0;/投票輸入OKbit intbit=0;v

34、oid delay(unsigned int time) unsigned int mm; for(mm=0;mmtime;) mm+;void led_init(void)unsigned char n;for(n=0;n0 & key=10 & ok=0 & LED=0) change_led(xuanmin,key); beixuankey+;/被投的那個人選票+1 xuanmin+;LED=1; key=0;if(xuanmin = max_xuanmin+1) xuanmin=1; ok=1; /進(jìn)行上翻 if( key =11) key=0; if(present!= 10) pr

35、esent+; change_led(present,beixuanpresent); /進(jìn)行下翻 if( key =12) key=0; if(present!= 1) present-; change_led(present,beixuanpresent); intbit=0;MM74C922 16鍵編碼器整體介紹MM74C922 CMOS鍵盤編碼器提供所有必要的邏輯來將所有SPST按鍵編碼成一個矩陣。鍵盤掃描可以由外部時鐘或者外部電容器來實現(xiàn)。這些編碼器也擁有片上上拉裝置,它最大允許上拉50 k的電阻按鍵。按鍵矩陣中沒有二極管,它需要消除按鍵的抖動。內(nèi)部去抖動電路僅僅需要一個外部的電容器,若缺失這個電容器就無法完成消抖。當(dāng)一個按鍵有效按下時,就會有一個相應(yīng)的數(shù)據(jù)有效輸出一個高電平。當(dāng)這個按鍵放

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論