- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
点阵式 LED 简单图形显示技术
实验任务
在 8X8 点阵式 LED 显示“★”、“●”和心形图,通过按键来选择要显示的图形。
电路原理图
图 4.26.1
硬件系统连线
(1).把“单片机系统”区域中的 P1 端口用 8 芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上; (2).把“单片机系统”区域中的 P3 端口用 8 芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上; (3).把“单片机系统”区域中的 P2.0/A8 端子用导线连接到“独立式键盘”区域中的 SP1 端子上; 4.程序设计内容
“★”在 8X8LED 点阵上显示图如下图所示
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
1
2
3
4
5
6
7 8
12H,14H,3CH,48H,3CH,14H,12H,00H
“●在”8X8LED 点阵上显示图如下图所示
● ● ●
● ●
● ●
● ●
● ● ●
1 2 3 4 5 6 7 8
00H,00H,38H,44H,44H,44H,38H,00H
心形图在 8X8LED 点阵上显示图如下图所示
● ● ● ●
● ● ●
● ●
● ●
● ●
●
1 2 3 4 5 6 7 8
30H,48H,44H,22H,44H,48H,30H,00H
5.汇编源程序CNTA EQU 30H COUNT EQU 31H
ORG 00H LJMP START ORG 0BH LJMP T0X ORG 30H
START: MOV CNTA,#00H
MOV COUNT,#00H MOV TMOD,#01H
MOV TH0,#(65536-4000) / 256
MOV TL0,#(65536-4000) MOD 256 SETB TR0
SETB ET0
SETB EA
WT: JB P2.0,WT MOV R6,#5 MOV R7,#248
D1: DJNZ R7,$
DJNZ R6,D1 JB P2.0,WT INC COUNT
MOV A,COUNT CJNE A,#03H,NEXT MOV COUNT,#00H
NEXT: JNB P2.0,$ SJMP WT
T0X: NOP
MOV TH0,#(65536-4000) / 256 MOV TL0,#(65536-4000) MOD 256 MOV DPTR,#TAB
MOV A,CNTA MOVC A,@A+DPTR MOV P3,A
MOV DPTR,#GRAPH MOV A,COUNT MOV B,#8
MUL AB ADD A,CNTA
MOVC A,@A+DPTR MOV P1,A
INC CNTA MOV A,CNTA CJNE A,#8,NEX
MOV CNTA,#00H
NEX: RETI
TAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH GRAPH: DB 12H,14H,3CH,48H,3CH,14H,12H,00H
DB 00H,00H,38H,44H,44H,44H,38H,00H
DB 30H,48H,44H,22H,44H,48H,30H,00H END
6.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)%6;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(P2_0==0)
{
for(i=5;i0;i--)
for(j=248;j0;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)%6;
P3=tab[cnta]; P1=graph[count][cn
文档评论(0)