因為led數碼管和跑馬燈都是用的P0口做數據口,所以會有你說的現象,但是只要我們把led數碼管的顯示關掉就可以了,但是怎么關呢? 有2種方法搞定這個問題
1.硬件法 拔掉P2.7口的雙排針跳線,將遠離單片機的一端用杜邦線短路到地,就可以了.(解釋:根據電路圖分析我們可以知道:共陰的數碼管如果將所有位選置1的話,所有的數碼管都會處于滅的狀態,而單片機上電所有io口上電時都是1,將負責位選的74hc573的鎖存端 一直短路到地就可實現)
2.軟件法 C語言: 將下面的幾行代碼復制到 mian函數的開始 P2_7=1; //令位選的U2-747c573直通 P0=0xFF; //P0口全送高電平 P2_7=0; //鎖存,也就是U2-74hc573的輸出FF從此不變,這樣8個共陰數碼管的 //公共端都被置為高電平,所以全都會滅掉 P2_6=0; //鎖存,原理同上,干掉8*8點陣
解釋:同理只是用軟件來關閉數碼管而已,注意頭文件要使用#include"AT89x52.h",這個文件比reg52.h使用更方便因為io引腳都定義好了可以直接以P2_7=1;的形式調用
匯編語言: ORG 0000H setb P2.7 mov P0,#11111111B clr P2.7 clr P1.4 mov P0,#11111100B //點亮最后2個燈 sjmp $ end
小知識:
鎖存器就是把當前的狀態鎖存起來,使CPU送出的數據在接口電路的輸出端保持一段時間鎖存后狀態不再發生變化,直到解除鎖定,74hc573就是鎖存器
[此貼子已經被作者于2012-4-15 21:50:24編輯過]
|