单片机汇编语言程序
ly:DB00H,00H,00H,00H,3FH,0FCH,20HDB04H,21H,84H,22H,44H,24H,24H,28H,14HDB20H,04H,27H,0...
ly: DB 00H,00H,00H,00H,3FH,0FCH,20H
DB 04H,21H,84H,22H,44H,24H,24H,28H,14H
DB 20H,04H,27H,0E4H,24H,24H,24H,24H
DB 24H,24H,3FH,0FCH,00H,00H,00H,00H
ORG 0000H
LJMP MAIN
ORG 0100H
MOV DPTR,#ly
MOV R0,#LHJ
LCALL COPY
MOV R5,#2
LCALL DISPLAYS
COPY: MOV R7,#32
C1: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R7,C1
RET
DISPLAY:MOV DATAOUT,#0XFF;
MOV R0,#LHJ
CLR LAB
MOV R7,#16
D1: CLR LSCK ;
CLR LSCLT
MOV B,@R0 ;
INC R0 ;
MOV A,@R0 ;
CPL A
MOV R6,#8 ;
D2: CLR LSCLH ;
RRC A
MOV LDATA,C ;
SETB LSCLH
DJNZ R6,D2
MOV A,B ;
CPL A
MOV R6,#8 ;
D3: CLR LSCLH ;
RRC A ;
MOV LDATA,C ;
SETB LSCLH ;
DJNZ R6,D3 ;
INC R0 ;进入第二行数据
ORL DATAOUT,#0X24;此句可以用以下两句来理解,如果不将两句合为一句,将出现拖影现像
;SETB LSCK ;行数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳)
;SETB LSCLT ;将数据锁存输出到相应列的点阵发光管显示,显示一行后将保持到下一行显示开始
SETB LAB ;列数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位,移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱
DJNZ R7,D1 ;
MOV R7,#64
DJNZ R7,$
CLR LSCK
SETB LSCK ;将最后一行数据移出
RET
我现在很不理解"MOV DPTR,#LY",我自己想了想,我说说,看我说的对不!
假设DPTR的地址为0100H,(我也不确定是不是这个地址),把#LY中的数分别送到01001H=00H
01002H=00H
01003H=00H
01004H=3FH
01005H=0FCH
01006H=20H中,
DPTR增1是什么意思,是0100增1吗?
MOVC A,@A+DPTR,假设DPTR不增1,A增1,那照上面的存放,A每增1都会去取DPTR中的数,对吗?
16*16LED点阵显示怎样设定文字不同的动作,显示的程序好复杂,看不懂。
延时程序:
DELAY:
DS1:MOV R4,#0X7F
DS2:MOV R5,#250
DJNZ R5,DS2
DKNZ R4,DS1
RET
END
请问在第一行程序中被送的“#0X7F”是个什么数啊!X是什么作用。
对了,本程序是16*16LED点阵的一个程序,不全,都复制过来太长了,麻烦各位好友帮个忙。
我的邮箱:lsliushuo@126.com 展开
DB 04H,21H,84H,22H,44H,24H,24H,28H,14H
DB 20H,04H,27H,0E4H,24H,24H,24H,24H
DB 24H,24H,3FH,0FCH,00H,00H,00H,00H
ORG 0000H
LJMP MAIN
ORG 0100H
MOV DPTR,#ly
MOV R0,#LHJ
LCALL COPY
MOV R5,#2
LCALL DISPLAYS
COPY: MOV R7,#32
C1: CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R7,C1
RET
DISPLAY:MOV DATAOUT,#0XFF;
MOV R0,#LHJ
CLR LAB
MOV R7,#16
D1: CLR LSCK ;
CLR LSCLT
MOV B,@R0 ;
INC R0 ;
MOV A,@R0 ;
CPL A
MOV R6,#8 ;
D2: CLR LSCLH ;
RRC A
MOV LDATA,C ;
SETB LSCLH
DJNZ R6,D2
MOV A,B ;
CPL A
MOV R6,#8 ;
D3: CLR LSCLH ;
RRC A ;
MOV LDATA,C ;
SETB LSCLH ;
DJNZ R6,D3 ;
INC R0 ;进入第二行数据
ORL DATAOUT,#0X24;此句可以用以下两句来理解,如果不将两句合为一句,将出现拖影现像
;SETB LSCK ;行数据移位,相应行拉低,三极管导通输出电量到相应行点阵管阳极(共阳)
;SETB LSCLT ;将数据锁存输出到相应列的点阵发光管显示,显示一行后将保持到下一行显示开始
SETB LAB ;列数据位只在第一行时为0,其它时候都为1,当将这个0移入寄存器后,从第一位开始一直移位最后一位,移位的过程,AB就必需是1,这是因为不能同时有两个及两个以上0的出现,否则显示出乱
DJNZ R7,D1 ;
MOV R7,#64
DJNZ R7,$
CLR LSCK
SETB LSCK ;将最后一行数据移出
RET
我现在很不理解"MOV DPTR,#LY",我自己想了想,我说说,看我说的对不!
假设DPTR的地址为0100H,(我也不确定是不是这个地址),把#LY中的数分别送到01001H=00H
01002H=00H
01003H=00H
01004H=3FH
01005H=0FCH
01006H=20H中,
DPTR增1是什么意思,是0100增1吗?
MOVC A,@A+DPTR,假设DPTR不增1,A增1,那照上面的存放,A每增1都会去取DPTR中的数,对吗?
16*16LED点阵显示怎样设定文字不同的动作,显示的程序好复杂,看不懂。
延时程序:
DELAY:
DS1:MOV R4,#0X7F
DS2:MOV R5,#250
DJNZ R5,DS2
DKNZ R4,DS1
RET
END
请问在第一行程序中被送的“#0X7F”是个什么数啊!X是什么作用。
对了,本程序是16*16LED点阵的一个程序,不全,都复制过来太长了,麻烦各位好友帮个忙。
我的邮箱:lsliushuo@126.com 展开
展开全部
MOV DPTR,#LY;是将一个数据表的首地址送入DPTR,作为基本地址,配合“MOVC A,@A+DPTR”读取表中的数据。
MOVC A,@A+DPTR;以DPTR中的内容为基本地址,加上A中的内容(该值就决定了要读取的数据在数据表中的位置)形成实际地址,将实际地址所指向的单元中存放的数据读出到A中。
INT DPTR;进行DPTR内容增1。当要连续读取下一个数据时,此实际地址是需要修正的,修正的方法,可以用A加1,也可以用DPTR加1,但因为在执行“MOVC A,@A+DPTR”后,A中原内容已经被读出的数据所取代,恢复原内容会比较麻烦,所以一般都用DPTR加1来实现地址修正。
“#0X7F”:0X表示7F是一个十六进制数,#表示7F是一个立即数。相当于“#7FH”
MOVC A,@A+DPTR;以DPTR中的内容为基本地址,加上A中的内容(该值就决定了要读取的数据在数据表中的位置)形成实际地址,将实际地址所指向的单元中存放的数据读出到A中。
INT DPTR;进行DPTR内容增1。当要连续读取下一个数据时,此实际地址是需要修正的,修正的方法,可以用A加1,也可以用DPTR加1,但因为在执行“MOVC A,@A+DPTR”后,A中原内容已经被读出的数据所取代,恢复原内容会比较麻烦,所以一般都用DPTR加1来实现地址修正。
“#0X7F”:0X表示7F是一个十六进制数,#表示7F是一个立即数。相当于“#7FH”
展开全部
问题较多。
1. 延时程序:
DELAY:
DS1:MOV R4,#0X7F
DS2:MOV R5,#250
......
其中的#0X7F,#代表数字,0x7F代表16进制形式数字,即十进制127;
#250就简单了,就是数字,250。
2。DPTR增1是什么意思,是0100增1吗?
是的,DPTR的内容将变为0101。
1. 延时程序:
DELAY:
DS1:MOV R4,#0X7F
DS2:MOV R5,#250
......
其中的#0X7F,#代表数字,0x7F代表16进制形式数字,即十进制127;
#250就简单了,就是数字,250。
2。DPTR增1是什么意思,是0100增1吗?
是的,DPTR的内容将变为0101。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#0x7f是该单片机的立即数mov方法,不像80x86汇编不需要这个#号。
0x代表随后的是十六进制数,
相当于80x86汇编的
mov ax,07FH
0x代表随后的是十六进制数,
相当于80x86汇编的
mov ax,07FH
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好吧,你把分给我,我介绍个群给你,在群上找一个人问他,他刚做完16*32的屏.
帮你少走弯路.
帮你少走弯路.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询