對于這個問題,首先你要了解一下硬件,比如下圖數碼管的原理,其實就是7個LED,分共陰和共陽數碼管。共陰數碼管就是七個數碼管共用一個接地引腳,七個LED顯示七個段,所以,點亮七個LED也叫段選,這里共陰的數碼管在段選a-g分別接高電位,公用引腳接低電位,這樣就可以點亮選定的LED顯示數字,例如,b、c接高電位,COM接低電位,就顯示數字1,以此類推。(共陽數碼管電位是相反的,另外所說七段是沒有顯示小數點的情況,有些數碼管直接把DP和公共引腳連在一起是無法顯示的)
20141230153242.jpg (25.75 KB, 下載次數: 78)
下載附件
2018-12-30 15:57 上傳
所謂的位選,就是提供給公共的引腳以相應的電壓,比如上圖的共陰數碼管,位選就是給在一起的幾個數碼管其中的某一位提供對應的電位,比如下邊的1、2、3、4就是位選,a-g是段選。
2749557-1G1031515412S.jpg (32.02 KB, 下載次數: 79)
下載附件
2018-12-30 15:57 上傳
明白了這個數碼管的用法之后,那么來說下普中開發板教程里所寫的那幾行,因為普中開發板的教程從開始寫第一個點亮一個LED程序的時候就為后邊使用74LS138譯碼器做準備,所以第一個例程就開始用LSA LSB LSC這樣的語句,其實開始并沒有用。74LS138譯碼器是用三個引腳通過不同的電平組合來輸出8個引腳的電平變化。這樣可以利用單片機的三個IO口來解決需要8個IO口的解決法案。
如果直接使用單片機的IO口來驅動數碼管,那么首先需要7-8個引腳來驅動段(8段包括小數點)。然后有幾位就需要幾個IO口來控制位,只有位和段同時有電位差的時候數碼管的該段才被點亮,這就是數碼管的動態顯示原理。
單片機驅動的時候,從低位至高位依次接入數碼管的段,假如用P0口,那么P0.0 - P0.3 P0.4 - P0.7分成兩組,分別為8 4 2 1,8 4 2 1 ,他們全部點亮的時候就是共陰數碼管的話輸出全部為高電平,也就是P0.0 - P0.7(小數點也點亮)全部為高電平,那么值就是8+4+2+1,8+4+2+1,就是16,16。16進制就是FF,寫成C語音就是P0 = 0xFF; 其他的自己研究吧,共陽數碼管相反,就是數碼管一個8字加小數點全部點亮C語言寫的程序就是:
P0 = 0x00;
如果使用LSA LSB LSC的方式編碼按上邊38譯碼器的真值表來確定0-F這16個數字的碼表來寫上邊的程序就可以了,這個你就自己去思考吧。
|