獨立按鍵實現(xiàn)數(shù)碼管的數(shù)字移動,即每按下按鍵一次,數(shù)字加一,以十進制方式進位,滿十進一,最高四位數(shù)。連接好單片機,且用k51進行編程,用宏晶科技軟件進行燒錄,程序燒錄完成后,即可實現(xiàn)此功能。(*注意:我們是對小板進行操作,利用的基礎程序來源于大板)因此,需要我們對小板進行分析。
一、程序分析
小板是四位數(shù)碼管,而大板是八位,所以我們首先必須明白兩者結(jié)構(gòu)的區(qū)別。(結(jié)構(gòu)圖如下)
每個數(shù)碼管的控制
小板數(shù)碼管的顯示(信號直接接到了STC的端口)
大板數(shù)碼管的顯示(通過3線8線譯碼器連接數(shù)碼管)
要實現(xiàn)數(shù)碼管顯示,首先要確定共陰還是共陽,我們選共陽信號,所以置1為高電平,段不亮,置0為低電平,段亮。信號大板小板不同,小板從高位至低位依次為P2.0-P2.3,置低電平時,位被選中。獨立按鍵選擇init 1進行操作。
二、代碼修改
根據(jù)大板和小板的不同點,我們對程序進行修改。
我們來看代碼圖
數(shù)碼管定義及延時:定義位選信號:LSA\LSB\LSC\LSD四個端口,用來顯示數(shù)碼管的1-4位。定義段選信號:共陽極,0為段亮,1為段不亮,且由右到左依次為低位到高位。U8 number為初始時的數(shù)碼管顯示的數(shù)字,即初始數(shù)碼管顯示0000選用init1接口的獨立按鍵
動態(tài)碼顯示:當LSA/LSB/LSC/LSD分別置0位時,才會顯示并且消隱函數(shù)要全都置位為1,否則無法實現(xiàn)消隱。
main函數(shù)部分
實現(xiàn)后的顯示如圖:
存誤顯示(最后一位沒顯示的情況)
三、問題研究
通過實驗,發(fā)現(xiàn)了很多問題,而且有一些還沒有完全解決。在實驗過程中,首先要使用k51進行調(diào)試,然后通過撰寫程序形成.Hex文件,再使用宏晶進行燒錄,完成實驗。
在程序修改過程中,主要問題如下:
1、對于題目的理解,首先要看清楚意思,不然找不到大板的源程序,這也是我在實驗中第一個困難。
2、共陽共陰問題,如果沒有分析小板電路圖的話,很容易將大板上共陰的數(shù)碼管代碼原搬過來,使得一開始現(xiàn)實的時候正好反向。
3、消隱問題。消隱非常的重要,修改完共陽數(shù)碼管的顯示后,會發(fā)現(xiàn)不亮的數(shù)碼管還是會有隱隱約約的亮,而顯示的數(shù)字幾乎看不出來(如下圖),這時我們就要從代碼上找問題,我們分析過共陽的數(shù)碼管當高電平的時候段不亮,所以要想消隱就必須全都置位為高電平,所以要將原先消隱代碼0x00變?yōu)?xff。
未消隱
4、我們會發(fā)現(xiàn)直接用端口進行位選的時候就要相應的改變端口的高低電平。為了讓各個位都能正常顯示,我們還是得需要分析電路圖。置位為0的時候,此位才顯示。所以,當最低位都置為1時,就如上面顯示圖一樣,最低位不顯示。
5、未解決問題
(1)、代碼不進位,只是單循環(huán)。
代碼
(3)、case(0)(1)(2)(3)的順序和LSD的引入,以及0/1值的修正。
代碼