26. 点阵式 LED 简单图形显示技术 1. 实验任务 在 8X8 点阵式 LED 显示“★”、“●”和心形图,通过按键来选择要显示的图形。 2. 电路原理图 图 4.26.1 3. 硬件系统连线 (1). 把“单片机系统”区域中的 P1 端口用 8 芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2). 把“单片机系统”区域中的 P3 端口用 8 芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; (3). 把“单片机系统”区域中的 P2.0/A8 端子用导线连接到“独立式键盘”区域中的 SP1 端子上; 4. 程序设计内容 (1). “★”在 8X8LED 点阵上显示图如下图所示 1 2 3 4 5 6 7 8 ● ● ●●● ●●●●●●● ●●● ●● ●● ● ● 12H,14H,3CH,48H,3CH,14H,12H,00H (2). “●”在 8X8LED 点阵上显示图如下图所示 1 2 3 4 5 6 7 8 ●●● ● ● ● ● ● ● ●●● 00H,00H,38H,44H,44H,44H,38H,00H (3). 心形图在 8X8LED 点阵上显示图如下图所示 1 2 3 4 5 6 7 8 ●● ●● ● ● ● ● ● ● ● ● ● ● 30H,48H,44H,22H,44H,48H,30H,00H 5. 汇编源程序CNTA EQU 30HCOUNT EQU 31HORG 00HLJMP STARTORG 0BHLJMP T0XORG 30HSTART: MOV CNTA,#00HMOV COUNT,#00HMOV TMOD,#01HMOV TH0,#(65536-4000) / 256MOV TL0,#(65536-4000) MOD 256SETB TR0SETB ET0SETB EAWT: JB P2.0,WTMOV R6,#5MOV R7,#248D1: DJNZ R7,$DJNZ R6,D1JB P2.0,WTINC COUNTMOV A,COUNTCJNE A,#03H,NEXTMOV COUNT,#00HNEXT: JNB P2.0,$SJMP WTT0X: NOPMOV TH0,#(65536-4000) / 256MOV TL0,#(65536-4000) MOD 256MOV DPTR,#TABMOV A,CNTAMOVC A,@A+DPTRMOV P3,AMOV DPTR,#GRAPHMOV A,COUNTMOV B,#8MUL ABADD A,CNTAMOVC A,@A+DPTRMOV P1,AINC CNTAMOV A,CNTACJNE A,#8,NEXMOV CNTA,#00HNEX: RETITAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FHGRAPH: DB 12H,14H,3CH,48H,3CH,14H,12H,00HDB 00H,00H,38H,44H,44H,44H,38H,00HDB 30H,48H,44H,22H,44H,48H,30H,00HEND6. C 语言源程序#include
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char code graph[3][8]={{0x12,0x14,0x3c,0x48,0x3c,0x14,0x12,0x00},{0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00},{0x30,0x48,0x44,0x22,0x44,0x48,0x30,0x00}};unsigned char count;unsigned char cnta;void main(void){unsigned char i,j;TMOD=0x01;TH0=(65536-4000)/256;TL0=(65536-4000)%256;TR0=1;ET0=1;EA=1;while(1){if(P2_0==0){for(i=5;i>0;i--)for(j=248;j>0;j--);if(P2_0==0){count++;if(count==3){count=0;}while(P2_0==0);}}}}void t0(void) interrupt 1 using 0{TH0=(65536-4000)/256;TL0=(65536-4000)%256;P3=tab[cnta];P1=graph[count][cnta];cnta++;if(cnta==8){cnta=0;}}