数码管和573锁存器的细节问题
生活随笔
收集整理的這篇文章主要介紹了
数码管和573锁存器的细节问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天在QQ群上一個初學單片機的人提了一個關于數碼管的問題,主要是程序的問題,由于對基礎知識掌握不夠,花了比較長的時間才解決,現總結一下其中的細節。
?
電路中8位數碼管是由兩個74HC573鎖存器分別控制位選和段選的。
原程序大致如下(省去了include和sbit定義),目的是要實現第一個數碼管顯示“1",但是后面有幾個數碼管也有顯示:
程序1
由于程序沒有while(1)循環,導致單片機不斷循環重新執行程序
執行1時,段選鎖存器為0x06,P1為0x06,位選剛打開時,位選鎖存器值為0x06,所以六個數碼管顯示數字“1”
執行2時,位選鎖存器值變為0xFE,第一個數碼管顯示“1”
執行3時,位選值0xFE鎖存起來,第一個數碼管顯示“1”
執行4時,位選鎖存器為0xFE,P1為0xFE,段選剛打開時,段選鎖存器值為0x06,所以第一個數碼管顯示如圖1形狀
執行5時,段選鎖存器值變為0x06,第一個數碼管顯示“1”
執行6時,段選值0xFE鎖存起來,第一個數碼管顯示“1”
我原本是想讓他在程序結尾加一個while(1)空循環,結果加錯了,成了這樣:
程序2
程序2和1效果相近,由于while(1)的原因,切換更快,顯示亮度更高
后來有人說中間加一個P1=0xFF,看上去好了一些,后面幾個數碼管不亮了,實際上第一個數碼管顯示不正常,還是沒有完全解決問題:
程序3
執行1時,位選鎖存器為0xFE,P1為0xFE,段選剛打開時,段選鎖存器值為0xFF,所以第一個數碼管顯示如圖1形狀(時間很短,所以亮度低)
執行2時,段選鎖存器值變為0x06,第一個數碼管顯示“1”
執行3時,段選值0xFE鎖存起來,第一個數碼管顯示“1”
執行4時,P1變為0xFF
執行5時,段選鎖存器為0x06,P1為0xFF,位選剛打開時,位選鎖存器值為0xFF,所以八個數碼管都不顯示
執行6時,位選鎖存器值變為0xFE,第一個數碼管顯示“1”
執行7時,位選值0xFE鎖存起來,第一個數碼管顯示“1”
如果按照我原先的理解,結尾處加一個while(1)空循環,最后是可以正常顯示的:
程序4
void main() {WELA=1; //1P1=0xFE; //2WELA=0; //3DULA=1; //4P1=0x06; //5DULA=0; //6while(1); //7 }執行到3時,位選鎖存器為0xFE
執行到6時,段選鎖存器為0x06
執行到7時,鎖存值不再改變,第一個數碼管顯示“1”,顯示正確
為了使程序更加完善,以下寫法更加可靠:
程序5
void main() {P1=0xFE; //1WELA=1; //2WELA=0; //3P1=0x06; //4DULA=1; //5DULA=0; //6while(1); //7 }執行2、3時,位選鎖存值為0xFE
執行5、6時,段選鎖存值為0x06
執行到7時,鎖存值不再改變,第一個數碼管顯示“1”
附注:
573的 LE鎖存使能引腳 高電平時輸出和輸入相同,低電平時 輸出不再改變,即下降沿鎖存,也就是低電平鎖存。
總結
以上是生活随笔為你收集整理的数码管和573锁存器的细节问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8900元!TP-Link最新Wi-Fi
- 下一篇: STC单片机程序下载失败总结