|
1. 實驗任務 如圖13所示,利用AT89S51單片機的P0端口的P0.0-P0.7連接到一個共陰數碼管的a-h的筆段上,數碼管的公共端接地。在數碼管上循環顯示0-9數字,時間間隔0.2秒。 2. 電路原理圖  3. 系統板上硬件連線 把“單片機系統”區域中的P0.0/AD0-P0.7/AD7端口用8芯排線連接到“四路靜態數碼顯示模塊”區域中的任一個數碼管的a-h端口上;要求:P0.0/AD0與a相連,P0.1/AD1與b相連,P0.2/AD2與c相連,……,P0.7/AD7與h相連。 4. 程序設計內容 (1. LED數碼顯示原理 七段LED顯示器內部由七個條形發光二極管和一個小圓點發光二極管組成,根據各管的極管的接線形式,可分成共陰極型和共陽極型。 LED數碼管的g~a七個發光二極管因加正電壓而發亮,因加零電壓而不以發亮,不同亮暗的組合就能形成不同的字形,這種組合稱之為字形碼,下面給出共陰極的字形碼見表2
 (2. 由于顯示的數字0-9的字形碼沒有規律可循,只能采用查表的方式來完成我們所需的要求了。這樣我們按著數字0-9的順序,把每個數字的筆段代碼按順序排好!建立的表格如下所示:TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 5.程序框圖  6. 匯編源程序 ORG 0 START: MOV R1,#00H NEXT: MOV A,R1 MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A LCALL DELAY INC R1 CJNE R1,#10,NEXT LJMP START DELAY: MOV R5,#20 D2: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,D2 RET TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END 7. C語言源程序 #include <AT89X51.H> unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char dispcount;
void delay02s(void) { unsigned char i,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); }
void main(void) { while(1) { for(dispcount=0;dispcount<10;dispcount++) { P0=table[dispcount]; delay02s(); } } }
|