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