首页 » 技术SOS » 元件/连接器 » 其他 » 这儿有一段89C51单片机8*8led点阵显示程序,但不是很懂,希望有人帮忙解释下,另外画下流程图

这儿有一段89C51单片机8*8led点阵显示程序,但不是很懂,希望有人帮忙解释下,另外画下流程图

菜鸟
2010-01-04 15:26:54     悬赏20分
ORG 00H JMP MAIN ORG 0BH LJMP INTS_T0 ORG 30H MAIN: CLR EA MOV R2,#0 MOV R1,#16 ;16个字符 MOV R0,#40H MOV DPTR,#TAB ;把全部字符复制到40H MOVEDATA: MOV A,R2 ;清除屏幕 MOVC A,@A+DPTR ;到TAB取码 MOV @R0,A ;输出到@RO显示 INC R2 INC R0 DJNZ R1,MOVEDATA MOV TMOD,#01H ;定时器0工作方式1 MOV TL0,#0FFH ;置计数初值 MOV TH0,#03CH ;0FFFFH-3CAFH=50000,50MS MOV R7,#5 ;软件计数器,循环5次 SETB ET0 ;允许T0中断 CLR ET1 ;禁止T1中断 SETB EA SETB TR0 MOV SCON,#00H ;串行口工作模式0 CLR P3.2 MOV SP,#60H MOV R3,#080H ;第一行 A0: MOV R2,#08H MOV R0,#40H LOOP: MOV DPTR,#TAB ;字符首地址 MOV R1,#2 MOV A,R3 RR A ;行码右移一位转下一行 MOV R3,A MOV SBUF,A ;发送行码 WAIT1: JNB TI,WAIT1 ;等待一帧发送完 CLR TI A1: MOV A,@R0 MOV SBUF,A WAIT2: JNB TI,WAIT2 CLR TI INC R0 DJNZ R1,A1 SETB P3.2 ;显示一行 CLR P3.2 DJNZ R2,LOOP ;下一行 JMP A0 JMP $ INTS_T0: CLR EA PUSH 00H PUSH 01H PUSH 02H DJNZ R7,BACK ;软件次数,次数不到返回 MOV R7,#5 MOV R0,#40H MOV R1,#8 SHIFT1: MOV R2,#2 CLR C PUSH 00H MOV A,R0 ADD A,#1 MOV R0,A MOV A,@R0 ; 把指针指向的地址的内容给ACC POP 00H RLC A SHIFT2: MOV A,@R0 RLC A MOV @R0,A INC R0 DJNZ R2,SHIFT2 DJNZ R1,SHIFT1 BACK: POP 02H POP 01H POP 00H MOV TMOD,#01H ;定时器0工作方式1 MOV TL0,#0FFH MOV TH0,#03CH ;0FFFFH-3CAFH=50000。50MS SETB ET0 ;禁止T0中断 CLR ET1 ;禁止T1中断 SETB EA SETB TR0 RETI TAB: DB 0FFH,0FFH ;箭头符号 DB 0DFH,0FFH DB 0BFH,0FFH DB 001H,0FFH DB 0BFH,0FFH DB 0DFH,0FFH DB 0FFH,0FFH END
需求补充: 是89C52单片机
分享
关键词: 8*8LED点阵显示, 解释  
高工
2010-01-04 16:14:18
1楼

这个恐怕没人帮你,自己好好把51的指令都看懂,自己画下流程图就懂了。

菜鸟
2010-01-04 19:15:42
2楼

这个应该不难吧?关键要了解LED点阵是怎样驱动的,LED点阵实际上是生成字模数据后,一行一行的在显示,所以DB定义的应该是字模数据.上面的程序只是一行一行的在扫描显示而已!

菜鸟
2010-01-10 11:57:18
3楼

程序不难,只要把8*8led显示的原理搞懂就行了,它是一行一行显示的,有一个行控制和列控制,相应的行和相应的列对应后就亮,

专家
2023-02-25 12:25:06
4楼

看看