标题:
用学习板上数码管显示8051
[打印本页]
作者:
雪中梅花
时间:
2014-10-20 14:14
标题:
用学习板上数码管显示8051
我是初学单片机的学员只懂汇编语言编的程序是否合理请各位老师指正,使用的学习板是在论坛买的。
ORG 0000H ;晶振6,数码显示8051右移程序
AJMP START
START: MOV SP,#60H
MOV R0,#250
aaa1: MOV R1,#250 ;上电延时
DJNZ R1,$
DJNZ R0,aaa1
KKK: CLR P1.4
MOV R2,#0FFH ;循环次数
KK: MOV A,#7FH ;数码显示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111110B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;数码显示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111101B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;数码显示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111011B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;数码显示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK
MOV R3,#1
DEC R3
CJNE R3,#0H,KK
KK1: MOV A,#7FH ;数码显示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111101B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;数码显示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111011B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;数码显示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;数码显示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK1
MOV R3,#1
DEC R3
CJNE R3,#0H,KK1
KK2: MOV A,#7FH ;数码显示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11111011B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;数码显示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;数码显示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;数码显示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11011111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK2
MOV R3,#1
DEC R3
CJNE R3,#0H,KK2
KK3: MOV A,#7FH ;数码显示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11110111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;数码显示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;数码显示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11011111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;数码显示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#10111111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK3
MOV R3,#1
DEC R3
CJNE R3,#0H,KK3
KK4: MOV A,#7FH ;数码显示8
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11101111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#3FH ;数码显示0
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#11011111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#6DH ;数码显示5
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#10111111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
MOV A,#06H ;数码显示1
MOV P0,A
SETB P2.6
CLR P2.6
MOV A,#01111111B ;数码显示位置
MOV P0,A
SETB P2.7
CLR P2.7
LCALL DELAY1
DEC R2
CJNE R2,#0H,KK4
MOV R3,#1
DEC R3
CJNE R3,#0H,KK4
MOV P0,#11111111B ;数码显示关闭
SETB P2.7
CLR P2.7
LCALL DELAY
LCALL DELAY
LCALL DELAY
LJMP KKK
DELAY: MOV R0,#0A5H ;100毫秒延时子程序
DL0: MOV R1,#96H
DJNZ R1,$
DJNZ R0, DL0
RET
DELAY1: MOV R0,#31H ;500微秒延时子程序
DL1: MOV R1,#01H
DJNZ R1,$
DJNZ R0,DL1
RET
END
作者:
a119
时间:
2014-10-20 21:17
这个程序能成功实现左移动吗?
作者:
雪中梅花
时间:
2014-10-21 08:14
谢谢老师的回复,这个程序我在学习板上试验正常但是循环右移请老师指点。
作者:
明白
时间:
2014-10-21 09:20
程序属于机器操作,其实可以采用算法进行循环
作者:
明白
时间:
2014-10-21 12:45
采用循环程序就短很多了,程式就下面
LP1:循环显示8位数码管、
LP2:右移所到之处,重复循环显示多遍
LP3:右移4个位置
没有电路板调试,自己调整吧
ORG 0000H ;晶振6,数码显示8051右移程序
AJMP START
START: MOV SP,#60H
MOV R6,#250
aaa1: MOV R7,#250 ;上电延时
DJNZ R7,$
DJNZ R6,aaa1
KKK: CLR P1.4
MOV R5,#0 ;数码管右移4次
LP3: MOV R2,#250 ;每一个花样显示遍数
LP2: MOV DPTR,#TAB
MOV R3,#8 ;显示8位数码管
MOV R4,#01111111B ;开始数码显示的位置
LP1: MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
CLR P2.6
MOV P0,R4 ;数码显示位置
SETB P2.7
CLR P2.7
LCALL DELAY1
INC DPTR ;指向表格中的下一个数值
MOV A,R4 ;指向下一个数码显示的位置
RR A ;指向下一个数码显示的位置
MOV R4,A ;指向下一个数码显示的位置
DJNZ R3,LP1 ;8位都显示了吗?
DJNZ R2,LP2 ;遍数显示完成了吗
INC R5
CJNE R5,#4,LP3
MOV P0,#11111111B ;数码显示关闭
SETB P2.7
CLR P2.7
LCALL DELAY
LCALL DELAY
LCALL DELAY
LJMP KKK
TAB: DB 0, 0, 0, 0, 06H, 6DH, 3FH, 7FH, 0, 0, 0, 0
; 熄 熄 熄 熄 1 5 0 8 熄 熄 熄 熄
DELAY: MOV R6,#0A5H ;100毫秒延时子程序
DL0: MOV R7,#96H
DJNZ R7,$
DJNZ R6, DL0
RET
DELAY1: MOV R6,#31H ;500微秒延时子程序
DL1: MOV R7,#01H
DJNZ R7,$
DJNZ R6,DL1
RET
END
作者:
雪中梅花
时间:
2014-10-21 15:09
感谢老师的指点学习了今后有不明白的问题在向您请教。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1