余 丹
(江西工業(yè)職業(yè)技術(shù)學(xué)院,江西 南昌 330096)
單片機(jī)是集成在一塊芯片上的計(jì)算機(jī),功能強(qiáng)大,質(zhì)量輕,體積小,供電方便,具有計(jì)算機(jī)的強(qiáng)大功能。單片機(jī)把中央處理器、存儲(chǔ)器、定時(shí)/計(jì)數(shù)器、各種輸入輸出接口等集成在一塊電路芯片上,相當(dāng)于一個(gè)微型的計(jì)算機(jī)。具有結(jié)構(gòu)簡單、控制功能強(qiáng)、可靠性高、體積小、價(jià)格低、使用方便靈活、通用性強(qiáng)等優(yōu)點(diǎn),廣泛應(yīng)用于工業(yè)控制、智能化儀器儀表、家用電器、電子玩具等領(lǐng)域[1]。51單片機(jī)價(jià)格低廉,使用廣泛,本文采用AT89C51型號(hào)單片機(jī),搭建硬件電路,采用C語言進(jìn)行程序設(shè)計(jì),實(shí)現(xiàn)分?jǐn)?shù)計(jì)數(shù)器的設(shè)計(jì)。
計(jì)數(shù)器用于很多場合,可以對(duì)一場比賽進(jìn)行分?jǐn)?shù)計(jì)數(shù),也能對(duì)貨品數(shù)量進(jìn)行計(jì)數(shù)。根據(jù)不同要求可以采用不同的計(jì)數(shù)器。計(jì)數(shù)器可以根據(jù)計(jì)數(shù)范圍、計(jì)數(shù)方式等來選擇,如1位數(shù)計(jì)數(shù)、2位數(shù)計(jì)數(shù)器、3位數(shù)計(jì)數(shù)器,一般采用LED數(shù)碼管顯示,計(jì)數(shù)方式可以通過按鈕控制,有加按鈕或減按鈕,每次加/減不一樣,就需多個(gè)按鈕。根據(jù)具體的控制要求,設(shè)計(jì)出專門的計(jì)數(shù)器。本文設(shè)計(jì)1個(gè)2位的簡易分?jǐn)?shù)計(jì)數(shù)器,只有1個(gè)按鈕,每按1次按鈕就加1分,采用LED數(shù)碼管進(jìn)行顯示。
根據(jù)要求分析,2位計(jì)數(shù)器采用LED數(shù)碼管顯示,需要2個(gè)LED數(shù)碼管,1個(gè)按鈕進(jìn)行加分,要1個(gè)按鈕按鍵,按鍵按1次加1分,按2次加2分,即需要加幾分就按幾次。用1塊51單片機(jī)結(jié)合單片機(jī)最小系統(tǒng)電路就能設(shè)計(jì),硬件電路如圖1所示。也可以根據(jù)分?jǐn)?shù)計(jì)數(shù)器的實(shí)際要求來更改設(shè)計(jì),如分?jǐn)?shù)有加有減,可以增加一個(gè)減分按鈕,即在此電路上就能更改,變化很小,給設(shè)計(jì)留有余量,增加功能變換,更改簡單。
圖1 分?jǐn)?shù)計(jì)數(shù)器硬件圖
LED數(shù)碼管能清晰顯示字符,經(jīng)常用來作為單片機(jī)人機(jī)對(duì)話的輸出設(shè)備,用于顯示單片機(jī)系統(tǒng)的計(jì)算結(jié)果、顯示信息等。LED數(shù)碼管由7段或8段發(fā)光二極管構(gòu)成,含有小數(shù)點(diǎn)的為8段,不含小數(shù)點(diǎn)的為7段數(shù)碼管,每一個(gè)發(fā)光二極管組成一個(gè)段,分別為a、b、c、d、e、f、g、dp段,并且以a段為8位二進(jìn)制的低位,dp段為最高位。將發(fā)光二極管組合好,就能顯示不同的字符或數(shù)字。LED數(shù)碼管有共陽、共陰極之分,發(fā)光二極管要點(diǎn)亮,需要連成一個(gè)完整電路,有電源端、接地端,發(fā)光二極管有正負(fù)極之分,正極對(duì)應(yīng)電源端,負(fù)極對(duì)應(yīng)接地端,如果將8個(gè)發(fā)光二極管的負(fù)極連在一起接低電平,就是共陰數(shù)碼管,反之,將8個(gè)發(fā)光二極管的正極連在一起接高電平,就是共陽數(shù)碼管,本系統(tǒng)采用共陽數(shù)碼管。當(dāng)共陽數(shù)碼管的公共端接高電平,該數(shù)碼管就能點(diǎn)亮,如果公共端接低電平,該數(shù)碼管不能被點(diǎn)亮。采用共陽數(shù)碼管,需要某段被點(diǎn)亮,該段應(yīng)接上低電平,即對(duì)應(yīng)的發(fā)光二極管導(dǎo)通,如顯示數(shù)字2,需要a、b、g、e、d段接低電平,其它段接高電平,公共端接高電平。
LED數(shù)碼管有靜態(tài)顯示和動(dòng)態(tài)顯示2種,靜態(tài)顯示就是數(shù)碼管顯示字符時(shí),其公共端恒定接低電平(共陰數(shù)碼管)或高電平(共陽數(shù)碼管),每個(gè)數(shù)碼管的8段都由單片機(jī)的1個(gè)8位I/O端口連接,這種方式需要占用較多單片機(jī)I/O端口,硬件成本高,電路復(fù)雜,適用于顯示位數(shù)少的場合。動(dòng)態(tài)顯示就是利用人肉眼辨別時(shí)間差,合理控制每個(gè)數(shù)碼管點(diǎn)亮的時(shí)間,給人一種是同時(shí)點(diǎn)亮的假象,讓多個(gè)數(shù)碼管看起來是同時(shí)被點(diǎn)亮的,呈現(xiàn)穩(wěn)定的顯示。這種方式可以節(jié)省單片機(jī)I/O端口,一塊單片機(jī)能控制多個(gè)數(shù)碼管顯示,硬件電路簡單。LED數(shù)碼管是靜態(tài)顯示還是動(dòng)態(tài)顯示,通過程序設(shè)計(jì)來實(shí)現(xiàn),在硬件電路設(shè)計(jì)上只需將數(shù)碼管公共端是直接接低電平(共陰數(shù)碼管)或高電平(共陽數(shù)碼管),還是其公共端由單片機(jī)的I/O端口來控制,8段是每個(gè)數(shù)碼管分別由1個(gè)8位的I/O端口來控制,還是全部數(shù)碼管都由1個(gè)8位的I/O端口來控制。本系統(tǒng)采用數(shù)碼管動(dòng)態(tài)顯示,由P2.0、P2.1端口控制數(shù)碼管公共端即位選,P1口控制段選。
計(jì)數(shù)器的加分按鍵由P0.0端口外接上拉電阻,當(dāng)按鍵按下時(shí)相應(yīng)P0.0端口為低電平,當(dāng)按鍵斷開時(shí),P0.0端口為高電平。
2位的分?jǐn)?shù)計(jì)數(shù)器系統(tǒng)采用LED數(shù)碼管動(dòng)態(tài)顯示的方式,先第一個(gè)數(shù)碼管顯字,關(guān)閉第一個(gè)數(shù)碼管顯字,接著第二個(gè)數(shù)碼管顯字,關(guān)閉第二個(gè)數(shù)碼管顯字,再循環(huán)第一個(gè)數(shù)碼管顯字,關(guān)閉第一個(gè)數(shù)碼管顯字,第二個(gè)數(shù)碼管顯字,這樣的循環(huán)方式,顯示當(dāng)前的分?jǐn)?shù)。51單片機(jī)采用C語言編寫程序,先設(shè)計(jì)程序流程圖,如圖2所示。
圖2 程序流程圖
在主函數(shù)中,while無限循環(huán),先if判斷是否有按鍵按下,并采用按鍵去抖動(dòng),若有按鍵按下,分?jǐn)?shù)就加1,并判斷分?jǐn)?shù)是否達(dá)到100,若達(dá)到100,就立馬清0,重新開始計(jì)數(shù),2位簡易分?jǐn)?shù)計(jì)數(shù)器計(jì)數(shù)的最大值為99。2個(gè)LED數(shù)碼管控制好顯示時(shí)間,利用人肉眼的視覺差形成2個(gè)LED數(shù)碼管同時(shí)顯示的假象,穩(wěn)定顯示2位的分?jǐn)?shù)值。數(shù)碼管動(dòng)態(tài)顯示的主要程序?yàn)椋?/p>
P1=0xff;
P2=0x01;//選中第一個(gè)數(shù)碼管
P1=led[jishu/10];//顯示分?jǐn)?shù)計(jì)數(shù)器的十位數(shù)值
delay(100);
P1=0xff;
P2=0x02;//選中第二個(gè)數(shù)碼管
P1=led[jishu%10];//顯示分?jǐn)?shù)計(jì)數(shù)器的個(gè)位數(shù)值
delay(100);
在Keil C51軟件中編寫好程序,在Proteus仿真軟件中進(jìn)行如圖1搭建硬件電路,將.HEX文件下載至單片機(jī)中,調(diào)試程序,可以觀看到2個(gè)LED數(shù)碼管初始狀態(tài)為00,通過按鍵按下1次,會(huì)加1,當(dāng)顯示99后,再次按下按鍵,會(huì)顯示00,重新開始計(jì)數(shù)。若有實(shí)際的硬件電路,可以通過STC-ISP將程序下載至單片機(jī),調(diào)試結(jié)果與仿真結(jié)果一致??梢姡趩纹瑱C(jī)的2位簡易分?jǐn)?shù)計(jì)數(shù)器軟硬件設(shè)計(jì)合理,達(dá)到控制要求,實(shí)現(xiàn)計(jì)數(shù)功能。
本文以2位簡易分?jǐn)?shù)計(jì)數(shù)器軟硬件開發(fā)過程為例,通過硬件和軟件設(shè)計(jì),在Keil C51軟件中編寫好程序,在Proteus軟件中仿真,查看分?jǐn)?shù)計(jì)數(shù)器的仿真效果,得出基于單片機(jī)的分?jǐn)?shù)計(jì)數(shù)器設(shè)計(jì)合理有效的結(jié)論。