1.分類
數(shù)碼管分 共陽數(shù)碼管 和 共陰數(shù)碼管。
數(shù)碼管其實就是8個段的發(fā)光二極管,只點亮其中的幾個段即可顯示出數(shù)字或字母用來表達信息。
共陽數(shù)碼管:把8段LED的正極并在一起作為公共端連接在5V上(共陽極),然后8個LED通過單片機的8個IO端口輸出高低電平使其決定點亮哪幾個段。原理跟第二章的8盞LED硬件連接一樣。
共陰數(shù)碼管的介紹參考《手把手教你學51單片機》文檔5.3.1節(jié)即可,因為我們的開發(fā)板用的是共陽數(shù)碼管,所以共陰數(shù)碼管在這里就不講解了。
2.硬件連接
我們先拿一個數(shù)碼管進行簡單講解
上圖是開發(fā)板上6個數(shù)碼管中最右端那個的硬件連接簡化圖,我們叫它數(shù)碼管0以好區(qū)分。引腳1和6(也就是A A)做為所有內(nèi)部LED的公共端,此時IO0輸出低電平三極管導通,那么這個公共端就接上了5V,而通過P0的8個IO端口中哪幾個IO端口輸出0數(shù)碼管中的哪幾個段就被點亮。
3.代碼分析
我們把第二章第4講的代碼復制過來,修改三八譯碼器的邏輯選擇,使IO0輸出為0,也就是P1.2輸出0,P1.1輸出0,P1.0輸出0。但這樣之前講的8盞小燈就不能被點亮了,因為三八譯碼器一次只能使其中的IOx輸出低電平,其他7個IO都輸出高電平了。
如果我們要讓數(shù)碼管顯示數(shù)字0,那么看到上圖所示,只需a,b,c,d,e,f段的LED點亮,剩下g段和dp段不點亮即可。
對應的二進制值為 11000000,十六進制就為0xC0。把0xC0賦值給P0即可點亮最右端的數(shù)碼管0顯示數(shù)字0。
#include <reg52.h> sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit ENLED = P1^4; sbit ADDR3 = P1^3; void main() { ADDR3 = 1;//使能三八譯碼器 ENLED = 0;// ADDR2 = 0;//***************************************************************************** ADDR1 = 0;//讓三八譯碼器的IO0輸出低電平。此時的小燈是不可能被點亮了,因為IO6輸出高電平了 ADDR0 = 0;//***************************************************************************** P0=0xC0; //使最右端的數(shù)碼管0顯示數(shù)字0 while (1); }
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程