關(guān)于跑馬燈的問題
問:做跑馬燈試驗時,根據(jù)修改程序,跑馬燈亮了,可是為什么八段譯碼管也會逐個亮起來呢?我把跳帽J26,J27拿掉也沒有用啊?
因為led數(shù)碼管和跑馬燈都是用的P0口做數(shù)據(jù)口,所以會有你說的現(xiàn)象,但是只要我們把led數(shù)碼管的顯示關(guān)掉就可以了,但是怎么關(guān)呢?
有2種方法搞定這個問題
1.硬件法
拔掉P2.7口的雙排針跳線,將遠(yuǎn)離單片機(jī)的一端用杜邦線短路到地,就可以了.(解釋:根據(jù)電路圖分析我們可以知道:共陰的數(shù)碼管如果將所有位選置1的話,所有的數(shù)碼管都會處于滅的狀態(tài),而單片機(jī)上電所有io口上電時都是1,將負(fù)責(zé)位選的74hc573的鎖存端 一直短路到地就可實現(xiàn))
2.軟件法
C語言:
將下面的幾行代碼復(fù)制到 mian函數(shù)的開始
P2_7=1; //令位選的U2-747c573直通
P0=0xFF; //P0口全送高電平
P2_7=0; //鎖存,也就是U2-74hc573的輸出FF從此不變,這樣8個共陰數(shù)碼管的
//公共端都被置為高電平,所以全都會滅掉
P2_6=0; //鎖存,原理同上,干掉8*8點陣
解釋:同理只是用軟件來關(guān)閉數(shù)碼管而已,注意頭文件要使用#include"AT89x52.h",這個文件比reg52.h使用更方便因為io引腳都定義好了可以直接以P2_7=1;的形式調(diào)用
匯編語言:
ORG 0000H
setb P2.7
mov P0,#11111111B
clr P2.7
clr P1.4
mov P0,#11111100B //點亮最后2個燈
sjmp $
end
小知識:
鎖存器就是把當(dāng)前的狀態(tài)鎖存起來,使CPU送出的數(shù)據(jù)在接口電路的輸出端保持一段時間鎖存后狀態(tài)不再發(fā)生變化,直到解除鎖定,74hc573就是鎖存器
學(xué)習(xí)一下
你好,我不是很明白,為什么只能用p2.7和p1.4,p0能不能幫忙解析下。我是剛買了板子學(xué)習(xí)的。謝謝啦
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |