首先我們來了解一下為什么點(diǎn)陣他會(huì)亮?看下面的電路圖
 點(diǎn)陣亮的條件有2個(gè):1.陰極為0,2.陽(yáng)極為1
先說第一個(gè)條件因?yàn)辄c(diǎn)陣的陰極是接在u1 74hc573上的,而這個(gè)573是接在p0口的,與數(shù)碼管和流水燈的控制端口重復(fù),所以我們?cè)隍?qū)動(dòng)數(shù)碼管或者流水燈的時(shí)候也會(huì)有可能把點(diǎn)陣的陰極置為了0,這時(shí)候一旦點(diǎn)陣陽(yáng)極的某個(gè)腳為1,第2個(gè)條件也成立了點(diǎn)陣就會(huì)立刻出現(xiàn)亮條, 那么為什么陽(yáng)極會(huì)出現(xiàn)1呢?因?yàn)槲覀儧]有對(duì)74hc164進(jìn)行初始化,他輸出的是一個(gè)隨機(jī)值
那么如何不讓他亮呢?其實(shí)我們只要在程序的開頭將74hc164的所有輸出引腳初始化為0,則點(diǎn)陣將不會(huì)再亮
1.c語(yǔ)言的解決辦法:
這個(gè)功能我已經(jīng)寫在51hei.h 這個(gè)頭文件里了
你只需要在程序的開頭寫一行#include"51hei.H" 并且把51hei.h文件復(fù)制到當(dāng)前目錄 然后在main主函數(shù)的開頭加入下面2個(gè)函數(shù)即可
guanled(); //關(guān)8個(gè)數(shù)碼管
guandz(); //關(guān)8*8點(diǎn)陣
關(guān)于這兩個(gè)函數(shù)的原理51hei.h里有非常詳細(xì)的注釋你可以看看.
51hei.h這個(gè)文件及其使用范例http://www.torrancerestoration.com/f/流水燈_c語(yǔ)言.rar 你在"程序"文件夾中搜索一下便可找到很多.
2.匯編語(yǔ)言的解決辦法: ;以下5行的功能是關(guān)閉8*8點(diǎn)陣的輸出,也就是把所有的行置0,這樣不管列為任何電平點(diǎn)陣都不會(huì)亮了. MOV R2,#8 ;輸出數(shù)據(jù)8位 hei: CLR P2.4 ;拉低SCL,以便下次拉高便可產(chǎn)生上升沿 CLR P2.5 ;數(shù)據(jù)先送入74hc164,等待clk上升沿的到來 SETB P2.4 ;低電平到高電平邊沿觸發(fā)到來,并行數(shù)據(jù)輸出至164的Q0-Q7 DJNZ R2,hei ;判斷輸出完畢了沒有
總結(jié): 雖然流水燈,數(shù)碼管,8*8點(diǎn)陣這3個(gè)設(shè)備都是接在p0口上的,但因其各自都具有使能端(可令其有效或失效) ,使得我們能獨(dú)立的控制其中的某一個(gè)設(shè)備,互不干擾,這樣設(shè)計(jì)的好處就是節(jié)約了單片機(jī)有限的端口資源
[此貼子已經(jīng)被作者于2011-1-29 17:50:38編輯過]
|