余 丹
(江西工業(yè)職業(yè)技術學院,江西 南昌 330096)
單片機是集成在一塊芯片上的計算機,功能強大,質量輕,體積小,供電方便,具有計算機的強大功能。單片機把中央處理器、存儲器、定時/計數器、各種輸入輸出接口等集成在一塊電路芯片上,相當于一個微型的計算機。具有結構簡單、控制功能強、可靠性高、體積小、價格低、使用方便靈活、通用性強等優(yōu)點,廣泛應用于工業(yè)控制、智能化儀器儀表、家用電器、電子玩具等領域[1]。51單片機價格低廉,使用廣泛,本文采用AT89C51型號單片機,搭建硬件電路,采用C語言進行程序設計,實現分數計數器的設計。
計數器用于很多場合,可以對一場比賽進行分數計數,也能對貨品數量進行計數。根據不同要求可以采用不同的計數器。計數器可以根據計數范圍、計數方式等來選擇,如1位數計數、2位數計數器、3位數計數器,一般采用LED數碼管顯示,計數方式可以通過按鈕控制,有加按鈕或減按鈕,每次加/減不一樣,就需多個按鈕。根據具體的控制要求,設計出專門的計數器。本文設計1個2位的簡易分數計數器,只有1個按鈕,每按1次按鈕就加1分,采用LED數碼管進行顯示。
根據要求分析,2位計數器采用LED數碼管顯示,需要2個LED數碼管,1個按鈕進行加分,要1個按鈕按鍵,按鍵按1次加1分,按2次加2分,即需要加幾分就按幾次。用1塊51單片機結合單片機最小系統(tǒng)電路就能設計,硬件電路如圖1所示。也可以根據分數計數器的實際要求來更改設計,如分數有加有減,可以增加一個減分按鈕,即在此電路上就能更改,變化很小,給設計留有余量,增加功能變換,更改簡單。

圖1 分數計數器硬件圖
LED數碼管能清晰顯示字符,經常用來作為單片機人機對話的輸出設備,用于顯示單片機系統(tǒng)的計算結果、顯示信息等。LED數碼管由7段或8段發(fā)光二極管構成,含有小數點的為8段,不含小數點的為7段數碼管,每一個發(fā)光二極管組成一個段,分別為a、b、c、d、e、f、g、dp段,并且以a段為8位二進制的低位,dp段為最高位。將發(fā)光二極管組合好,就能顯示不同的字符或數字。LED數碼管有共陽、共陰極之分,發(fā)光二極管要點亮,需要連成一個完整電路,有電源端、接地端,發(fā)光二極管有正負極之分,正極對應電源端,負極對應接地端,如果將8個發(fā)光二極管的負極連在一起接低電平,就是共陰數碼管,反之,將8個發(fā)光二極管的正極連在一起接高電平,就是共陽數碼管,本系統(tǒng)采用共陽數碼管。當共陽數碼管的公共端接高電平,該數碼管就能點亮,如果公共端接低電平,該數碼管不能被點亮。采用共陽數碼管,需要某段被點亮,該段應接上低電平,即對應的發(fā)光二極管導通,如顯示數字2,需要a、b、g、e、d段接低電平,其它段接高電平,公共端接高電平。
LED數碼管有靜態(tài)顯示和動態(tài)顯示2種,靜態(tài)顯示就是數碼管顯示字符時,其公共端恒定接低電平(共陰數碼管)或高電平(共陽數碼管),每個數碼管的8段都由單片機的1個8位I/O端口連接,這種方式需要占用較多單片機I/O端口,硬件成本高,電路復雜,適用于顯示位數少的場合。動態(tài)顯示就是利用人肉眼辨別時間差,合理控制每個數碼管點亮的時間,給人一種是同時點亮的假象,讓多個數碼管看起來是同時被點亮的,呈現穩(wěn)定的顯示。這種方式可以節(jié)省單片機I/O端口,一塊單片機能控制多個數碼管顯示,硬件電路簡單。LED數碼管是靜態(tài)顯示還是動態(tài)顯示,通過程序設計來實現,在硬件電路設計上只需將數碼管公共端是直接接低電平(共陰數碼管)或高電平(共陽數碼管),還是其公共端由單片機的I/O端口來控制,8段是每個數碼管分別由1個8位的I/O端口來控制,還是全部數碼管都由1個8位的I/O端口來控制。本系統(tǒng)采用數碼管動態(tài)顯示,由P2.0、P2.1端口控制數碼管公共端即位選,P1口控制段選。
計數器的加分按鍵由P0.0端口外接上拉電阻,當按鍵按下時相應P0.0端口為低電平,當按鍵斷開時,P0.0端口為高電平。
2位的分數計數器系統(tǒng)采用LED數碼管動態(tài)顯示的方式,先第一個數碼管顯字,關閉第一個數碼管顯字,接著第二個數碼管顯字,關閉第二個數碼管顯字,再循環(huán)第一個數碼管顯字,關閉第一個數碼管顯字,第二個數碼管顯字,這樣的循環(huán)方式,顯示當前的分數。51單片機采用C語言編寫程序,先設計程序流程圖,如圖2所示。

圖2 程序流程圖
在主函數中,while無限循環(huán),先if判斷是否有按鍵按下,并采用按鍵去抖動,若有按鍵按下,分數就加1,并判斷分數是否達到100,若達到100,就立馬清0,重新開始計數,2位簡易分數計數器計數的最大值為99。2個LED數碼管控制好顯示時間,利用人肉眼的視覺差形成2個LED數碼管同時顯示的假象,穩(wěn)定顯示2位的分數值。數碼管動態(tài)顯示的主要程序為:
P1=0xff;
P2=0x01;//選中第一個數碼管
P1=led[jishu/10];//顯示分數計數器的十位數值
delay(100);
P1=0xff;
P2=0x02;//選中第二個數碼管
P1=led[jishu%10];//顯示分數計數器的個位數值
delay(100);
在Keil C51軟件中編寫好程序,在Proteus仿真軟件中進行如圖1搭建硬件電路,將.HEX文件下載至單片機中,調試程序,可以觀看到2個LED數碼管初始狀態(tài)為00,通過按鍵按下1次,會加1,當顯示99后,再次按下按鍵,會顯示00,重新開始計數。若有實際的硬件電路,可以通過STC-ISP將程序下載至單片機,調試結果與仿真結果一致。可見,基于單片機的2位簡易分數計數器軟硬件設計合理,達到控制要求,實現計數功能。
本文以2位簡易分數計數器軟硬件開發(fā)過程為例,通過硬件和軟件設計,在Keil C51軟件中編寫好程序,在Proteus軟件中仿真,查看分數計數器的仿真效果,得出基于單片機的分數計數器設計合理有效的結論。