本文針對蝦米I代單片機(jī)開發(fā)板 觀察單片機(jī)實物圖,在左上角,共有6個數(shù)碼管,從左至右DS6-DS1。怎樣控制它們顯示字母或數(shù)字呢。當(dāng)然是查開發(fā)板原理圖。 從原理圖可知,6個數(shù)碼管是共陽極接法,+V電源接到6個PNP三極管,三極管集電極接到數(shù)碼管,基極通向74HC138譯碼器。DS6-DS1對應(yīng)于譯碼器的LEDS5-LEDS1。在同一時間,只能啟用一個數(shù)碼管,啟用哪個數(shù)碼管由譯碼器控制。 查譯碼器部分電路可知,譯碼器的Y0-Y6對應(yīng)于LEDS0-LEDS6。譯碼器的控制,我們在關(guān)于LED跑馬燈程序中已經(jīng)講過了。如果要讓左邊第一只數(shù)碼管啟用,譯碼器控制代碼如下: sbit enableG1 = P1^3; sbit enableG2 = P1^4; sbit selectC = P1^2; sbit selectB = P1^1; sbit selectA = P1^0; //74HC138譯碼器 void hc138() { enableG1 = 1; enableG2 = 0; selectC = 1; selectB = 0; selectA = 1; } 在這塊板子上,數(shù)碼管的abcdefg dp分別對應(yīng)于P0的8個IO口。共陽數(shù)碼管的特點是低電平0點亮,高電平1關(guān)閉。我們采用一次給P0 byte 賦值的辦法,設(shè)定數(shù)碼管的顯示內(nèi)容。 下面我們試著寫出共陽數(shù)碼管的真值表。這是一個很好的想像練習(xí)。一定要在腦子里想像并計算出真值,千萬不要到紙上去寫或畫,要知道想像練習(xí)比單純的知識重要得多,想像力提高了,智力就提高了,以后學(xué)習(xí)任何知識都會更加快。 1. 想像出數(shù)碼管的樣子,及相應(yīng)部位的字母: abcdefg dp 2. 想像出顯示數(shù)字0的數(shù)碼管 3. 在想像中寫出數(shù)字0的二進(jìn)制值,從高位寫起,也就是從dp 到a 要亮的小燈,寫0,不亮的寫1 dp = 1 表示小數(shù)點,不用亮 g = 1 中間那橫不用亮 f = 0 左邊上面一豎要亮 e = 0 左邊下面一豎要亮 d = 0 下面橫要亮 e = 0 右下豎要亮 b = 0 右上豎亮 a = 0 上面橫亮 二進(jìn)制的1100 0000,我們分成二部分轉(zhuǎn)化成16進(jìn)制,1100也就是8+4=12,10進(jìn)制的12就是16進(jìn)制的C,0000換算成16進(jìn)制還是0。于是得到C0H。我們只要把P0設(shè)成C0H,就能顯示我們想要的數(shù)字0. 下面就是完整代碼: #include <reg52.h> sbit enableG1 = P1^3; sbit enableG2 = P1^4; sbit selectC = P1^2; sbit selectB = P1^1; sbit selectA = P1^0; //74HC138譯碼器 void hc138() { enableG1 = 1; enableG2 = 0; selectC = 1; selectB = 0; selectA = 1; } /** 共陽數(shù)碼管真值表 0 C0H 1 F9H 2 A4H 3 B0H 4 99H 5 92H 6 82H 7 F8H 8 80H 9 90H A 88H b 83H C C6H d A1H E 86H F 8EH **/ void turnDigitalLED() { while(1) { P0 = 0xC0; } } int main(void) { hc138(); turnDigitalLED(); return 0; } |
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |