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