日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数码管和573锁存器的细节问题

發布時間:2023/12/15 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数码管和573锁存器的细节问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天在QQ群上一個初學單片機的人提了一個關于數碼管的問題,主要是程序的問題,由于對基礎知識掌握不夠,花了比較長的時間才解決,現總結一下其中的細節。

?

電路中8位數碼管是由兩個74HC573鎖存器分別控制位選和段選的。



原程序大致如下(省去了include和sbit定義),目的是要實現第一個數碼管顯示“1",但是后面有幾個數碼管也有顯示:

程序1

void main() {WELA=1;//1P1=0xFE;//2WELA=0;//3DULA=1;//4P1=0x06;//5DULA=0;//6 }
由于程序沒有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

void main() {while(1) {WELA=1; //1P1=0xFE; //2WELA=0; //3DULA=1; //4P1=0x06; //5DULA=0; //6} }
程序2和1效果相近,由于while(1)的原因,切換更快,顯示亮度更高



后來有人說中間加一個P1=0xFF,看上去好了一些,后面幾個數碼管不亮了,實際上第一個數碼管顯示不正常,還是沒有完全解決問題:
程序3

void main() {DULA=1; //1P1=0x06; //2DULA=0; //3P1=0xFF; //4WELA=1; //5P1=0xFE; //6WELA=0; //7 }
執行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锁存器的细节问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。