![]() |
發布時間: 2023-8-26 16:58
正文摘要:用STC12W204S單片機 直接驅動一個4位數碼管。我們平時都是把段選放在一個口,例如P0,P1,P2,每個口剛好8個IO口,但是這個單片機沒有一個完整的8位口,如圖這樣,段選分散在了P1,P3,P5口。 如果段選全在一個P0 ... |
cnfloatleaf 發表于 2023-8-27 01:36 感謝大佬,就是這個意思! |
|
1、這里不關P0的事。 2、你可以正常使用數組,完成你想要做的事。 3、驅動LED時,加一個【翻譯】(自己寫程序): 【翻譯】這樣工作: 3.1、取出的一個LED的顯示數據是N,(假設你想顯示3,這里的N也=3) 3.2、將N轉LED碼:M。(這里你可以做一個N轉M的表格,其中N=3時,M=hgfedcba=01001111,h=dp),M一個字節共8位,M7-M0,每位對應一個LED的顯示段。請自己先編一個碼生產N-M表格。你想顯示多少種N,就對應做出多少個M,不要怕麻煩。如顯示3,abcdg=1,ef=0,dp=0。N=03H/M=40H。 3.3、取出M,因為M0=a,a接在P3.3上,就將M0送至P3.3(P3.3=M0)。類似處理M1-M7。 3.4、如果M需要顯示在第2位G2,G2接在P3.7上,就讓P3.7=0(共陰LED),其它3位G1/G3/G4=P3.2/P1.0/P1.2=1。 如果是共陽LED,則3.3、3.4、的結果需要求反。 總結:這個作業是為了讓你真正地理解LED掃描顯示的原理。就是不讓你【順心】,必須自己寫驅動,并翻譯LED碼。 事實上,在實戰產品中,大部分情況,為了省錢,也是以硬件優先,LED的引腳不一定與CPU【有序】。當然設計大師們為了方便軟件,也會盡可能做成【有序】。不過,魚和熊掌啊。 |
http://www.zg4o1577.cn/bbs/dpj-56990-1.html 看看這里或許能幫到你。 |
在這里敲程序真累啊,TABLE健不能用,一不小心沒寫完就發出了,應該現在編輯器上敲好復制過來 |
sbit TMP0 = temp^0; sbit TMP1 = temp^1; sbit TMP2 = temp^2; sbit TMP3 = temp^3; sbit TMP4 = temp^4; sbit TMP5 = temp^5; sbit TMP6 = temp^6; sbit TMP7 = temp^7; // 顯示程序 P32 = 1; // 位選全部為1,不顯示,假設數碼管是共陰 P37 = 1; P10 = 1; P12 = 1; temp = table[0]; // 賦值第一個數碼管,數碼管 a b c ~ dp 對應bit0~bit7 P33 = TMP0; P11 = TMP1; P14 = TMP2; P54 = TMP3; P55 = TMP4; P36 = TMP5; P13 = TMP6; P15 = TMP7; P32= 0; // 顯示第一位數碼管 delay(); // 延時 P32= 1; temp= table[1]; // 賦值第二個數碼管, // BIT位賦值同上 P37= 0; // 顯示第二位數碼管 |
可以吧每個bit分開送,然后驅動位選 unsigned char bdata tmp; // 先定義一個可位尋址RAM sbit |