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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

10、0.1F,以便掃描矩陣鍵盤KM:鍵盤消除抖動(dòng)電路,并發(fā)出兩種信號(hào)。(1)內(nèi)部計(jì)數(shù)器停止計(jì)數(shù)。(2)若有鍵按下,使DA腳由未按鍵時(shí)的低電平變?yōu)楦唠娖?若按鍵未放開則一直保持高電平,當(dāng)按鍵放開時(shí),才轉(zhuǎn)為低電平。此引腳外接一個(gè)電容是OSC所接電容的10倍。DA:數(shù)據(jù)有效信號(hào)。若無鍵按下,保持低電平。若有鍵按下,變?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,

11、X412Y4,X113Y4,X214Y4,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è)計(jì)與分析2.2.1由74C922夠成的鍵盤電路圖2-2-1 74C922構(gòu)成的鍵盤電路在鍵盤部分采用74C922來完成工作。鍵盤電路圖如圖2-2-1所示。74922芯片是專用編碼鍵盤

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29、發(fā)現(xiàn)由74C922芯片構(gòu)成的鍵盤電路本身能正常工作(按下相應(yīng)的鍵連接ABCD的管腳會(huì)輸出正確的數(shù)據(jù));然而按下投票按鍵數(shù)碼管確不能顯示正確的數(shù)據(jù),說明是顯示的問題。而檢查過共陰型的四聯(lián)數(shù)碼管發(fā)現(xiàn)它可以正常工作,調(diào)試時(shí)發(fā)現(xiàn)數(shù)碼管的亮度不夠,說明需要增強(qiáng)驅(qū)動(dòng)能力,同時(shí)數(shù)碼管的顯示不正常,很有可能是因?yàn)槌绦蛑械年P(guān)于數(shù)碼管動(dòng)態(tài)顯示的方面有問題。在設(shè)計(jì)的電路AT89C51的P1口(P1.0P1.6)直接接上四聯(lián)數(shù)碼管的AG腳,顯然這樣單靠P1口的驅(qū)動(dòng)是不夠的,后在P1口(P1.0P1.6)加上7個(gè)510歐的上拉電阻(利用排阻511實(shí)現(xiàn))來增強(qiáng)其驅(qū)動(dòng)能力,修改調(diào)試后發(fā)現(xiàn)數(shù)碼管可顯示的足夠的亮度。做好以上的

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

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

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

33、= P33;unsigned char key=0;#define max_xuanmin 45 /最多選民數(shù)量unsigned char beixuan11;/選手選票數(shù)unsigned char xuanmin=1;/選民編號(hào)unsigned char present=1;/目前這個(gè)被選者,用于顯示整體選票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_c

34、s=0;bit ok=0;/投票輸入OKbit intbit=0;void delay(unsigned int time) unsigned int mm; for(mm=0;mm<time;) mm+;void led_init(void)unsigned char n;for(n=0;n<=9;n+) beixuann=0; LED=1; ok=0;/*進(jìn)行數(shù)據(jù)轉(zhuǎn)換*/void change_led(unsigned char xuan,unsigned char value) unsigned char x,change; x=xuan; change=x/100; x=x

35、uan; ledout3=x/10-change*10; x=xuan; ledout2=(unsigned char)(x-change*100-ledout3*10); x=value; change=x/100; x=value; ledout1=x/10-change*10; x=value; ledout0=(unsigned char)(x-change*100-ledout1*10);/*外部中斷1的入口* */int1_in() interrupt 2 using 3 LED=0;/*外部中斷0的入口*/int0_in() interrupt 0 using 3 key=0;

36、if(P2_0=1) key=key+1; if(P2_1=1) key= key+2; if(P2_2 =1) key= key+4; if(P2_3=1) key= key+8; key=key+1; intbit=1;/*定時(shí)1的入口*/Time1() interrupt 3 using 3unsigned char bb; flash_cs+;if( flash_cs=10)/每隔10個(gè)定時(shí)中斷換一個(gè)數(shù)據(jù) if(cs=0) P0=0xff-8; if(cs=1) P0=0xff-4; if(cs=2) P0=0xfd; if(cs=3) P0=0xfe; flash_cs=0; bb=

37、ledoutcs; P1=led1bb; if(cs!=3) cs+; else cs = 0; /*主函數(shù)*/void main()EX0=1;IT0=1;EX1=1;IT1=1;ET1=1;TMOD=0x20;/采用定時(shí)器1的第二種工作方式 TL1=0x00;TH1=0x11;TR1=1;EA=1;led_init();change_led(0,0);for(;)/整個(gè)系統(tǒng)進(jìn)入死循環(huán)if(intbit) if(key>0 && key<=10 && ok=0 && LED=0) change_led(xuanmin,key); b

38、eixuankey+;/被投的那個(gè)人選票+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) present+; 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按鍵編碼成一個(gè)矩陣。鍵盤掃描可以由外部時(shí)鐘或者外部電容器來實(shí)現(xiàn)。這些編碼器也擁有片上上拉裝置,它最大允許上拉50 k的電阻按鍵。按鍵矩陣中沒有二極管,它需要消除按鍵的抖動(dòng)。內(nèi)部去抖動(dòng)電路僅僅需要一個(gè)外部的電容器,若缺失這個(gè)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論