51单片机经典流水灯汇编程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机流水灯汇编程序设计
流水灯汇编程序
8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
;用最直接的方式实现流水灯
ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY ;延时1秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY ;延时1秒
MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)
LCALL DELAY
MOV P1,#11101111B
LCALL DELAY
MOV P1,#11110111B
LCALL DELAY
MOV P1,#11111011B
LCALL DELAY
MOV P1,#11111101B
LCALL DELAY
MOV P1,#11111110B
LCALL DELAY
MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒
AJMP START ;反复循环
;延时子程序,12M晶振延时约250毫秒
DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms
PUSH PSW ;现场保护指令(有时可以不加)
MOV R4,#2
L3: MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)
DJNZ R2 ,L1 ; 中层循环:256次
DJNZ R4 ,L3 ;外层循环:2次
POP PSW
RET
END
51单片机汇编程序集(二)
2008年12月12日星期五 10:27
辛普生积分程序
内部RAM数据排序程序(升序)
外部RAM数据排序程序(升序)
外部RAM浮点数排序程序(升序)
BCD小数转换为二进制小数(2位)
BCD小数转换为二进制小数(N位)
BCD整数转换为二进制整数(1位)
BCD整数转换为二进制整数(2位)
BCD整数转换为二进制整数(3位)
BCD整数转换为二进制整数(N位)
二进制小数(2位)转换为十进制小数(分离BCD码)
二进制小数(M位)转换为十进制小数(分离BCD码)
二进制整数(2位)转换为十进制整数(分离BCD码)
二进制整数(2位)转换为十进制整数(组合BCD码)
二进制整数(3位)转换为十进制整数(分离BCD码)
二进制整数(3位)转换为十进制整数(组合BCD码)
二进制整数(M位)转换为十进制整数(组合BCD码)
三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7
;二进制整数(2位)转换为十进制整数(分离BCD码)
;入口: R3,R4
;占用资源: ACC,R2,NDIV31
;堆栈需求: 5字节
;出口: R0,NCNT
IBTD21 : MOV NCNT,#00H
MOV R2,#00H
IBD211 : MOV R7,#0AH
LCALL NDIV31
MOV A,R7
MOV @R0,A
INC R0
INC NCNT
MOV A,R3
ORL A,R4
JNZ IBD211
MOV A,R0
CLR C
SUBB A,NCNT
MOV R0,A
RET
;二进制整数(2位)转换为十进制整数(组合BCD码)
;入口: R3,R4
;占用资源: ACC,B,R7
;堆栈需求: 3字节
;出口: R0
IBTD22 : MOV A,R0
PUSH A
MOV R7,#03H
CLR A
IBD221 : MOV @R0,A
INC R0
DJNZ R7,IBD221
POP A
MOV R0,A
MOV R7,#10H
IBD222 : PUSH A
CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV B,#03H
IBD223 : MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
INC R0
DJNZ B,IBD223
POP A
MOV R0,A
DJNZ R7,IBD222
RET
;二进制整数(3位)转换为十进制整数(分离BCD码) ;入口: R2,R3,R4
;占用资源: ACC,R2,NDIV31
;堆栈需求: 5字节
;出口: R0,NCNT
IBTD31 : CLR A
MOV NCNT,A
IBD311 : MOV R7,#0AH
LCALL NDIV31
MOV A,R7
MOV @R0,A
INC R0
INC NCNT
MOV A,R2
ORL A,R3
ORL A,R4
JNZ IBD311
MOV A,R0
CLR C
SUBB A,NCNT
MOV R0,A
RET
;二进制整数(3位)转换为十进制整数(组合BCD码) ;入口: R2,R3,R4
;占用资源: ACC,B,R7
;堆栈需求: 3字节
;出口: R0
IBTD32 : MOV A,R0
PUSH A
MOV R7,#04H
CLR A
IBD321 : MOV @R0,A
INC R0
DJNZ R7,IBD321
POP A
MOV R0,A
MOV R7,#18H
IBD322 : PUSH A
CLR C
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV B,#04H
IBD323 : MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
INC R0
DJNZ B,IBD323
POP A
MOV R0,A
DJNZ R7,IBD322
RET
第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程收藏
该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8
然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环
P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮
小喇叭不停发出滴答声:
注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。
显示的数字不对。
该程序在本站XP开发套件上调试通过,以下是程序运行在XP版时的照片.
数码管显示数字
注意0为点亮 1 为灭
显示数字p0.7 p0.6 p0.5 p0.4 p0.3 p0.2 p0.1 p0.0 16进制代码
0 0 0 1 0 1 0 0 0 28H
1 0 1 1 1 1 1 1 0 7EH
2 1 0 1 0 0 0 1 0 A2H
3 0 1 1 0 0 0 1 0 62H
4 0 1 1 1 0 1 0 0 74H
5 0 1 1 0 0 0 0 1 61H
6 0 0 1 0 0 0 0 1 21H
7 0 1 1 1 1 0 1 0 7AH
8 0 0 1 0 0 0 0 0 20H
9 0 1 1 0 0 0 0 0 60H
代码表的意思和方法参照前面的教程;注意0为点亮1 为灭然后我们可以把代码送到P0口,就可以是数码管显示需要的数字;当然,必须有位选,因为我们的实验板是动态扫描数码管,两个8的位选分别是P2.6 P2.7.
LOOP: ;标号
CLR P2.6 ;选中p2.6 数码管左边的8字使能
SETB P2.7 ;p2.7不使能。
右边的数码管消隐
MOV P0,#28H ;把28h送p0口;数码管显示0
LCALL DELAY ;延时
MOV P0,#0FFH ;0ffh 送p0口,数码管清除
CLR P1.0 ;点亮p1.0发光管
MOV P0,#7EH ;把7eh送p0口;数码管显示1
LCALL DELAY
MOV P0,#0FFH
CLR P1.1 ;点亮p1.0发光管
CLR P1.0 ;点亮p1.0发光管
MOV P0,#0A2H ;数码管显示2
LCALL DELAY
MOV P0,#0FFH
CLR P1.2
CLR P1.1
CLR P1.0
MOV P0,#62H ;数码管显示3
LCALL DELAY
MOV P0,#0FFH
CLR P1.3
CLR P1.2
CLR P1.1
CLR P1.0
MOV P0,#74H ; ;数码管显示4
LCALL DELAY
MOV P0,#0FFH
CLR P1.4
CLR P1.3
CLR P1.2
CLR P1.1
CLR P1.0
MOV P0,#61H ;数码管显示5;
LCALL DELAY
MOV P0,#0FFH
CLR P1.5
CLR P1.4
CLR P1.3
CLR P1.2
CLR P1.1
CLR P1.0
MOV P0,#21H ; 数码管显示6
LCALL DELAY
MOV P0,#0FFH
CLR P1.6
CLR P1.5
CLR P1.4
CLR P1.3
CLR P1.2
CLR P1.1
CLR P1.0
MOV P0,#7AH ; 数码管显示7
LCALL DELAY
MOV P0,#0FFH
CLR P1.7
CLR P1.6
CLR P1.5
CLR P1.4
CLR P1.3
CLR P1.2
CLR P1.1
CLR P1.0
MOV P0,#20H ; 数码管显示8
LCALL DELAY
MOV P0,#0FFH
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
;程序到此结果为左边的数码管显示0,1,2,3,4,5,6,7,8 ;p1.0------------p1.7指示灯依次点亮
SETB P2.6 ;左边的8消隐
CLR P2.7 ;选中p2.7 数码管右边的8字使能,;
MOV P0,#28H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.0
MOV P0,#7EH
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.1
MOV P0,#0A2H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.2
MOV P0,#62H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.3
MOV P0,#74H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.4
MOV P0,#61H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.5
MOV P0,#21H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.6
MOV P0,#7AH
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
CLR P1.7
MOV P0,#20H
LCALL DELAY
MOV P0,#0FFH
MOV P1,#0FFH
MOV P0,#0FFH
MOV P1,#0FFH
;这一段和上一段基本相同,不同的是右边的数码管依次显示012345678,左边的不亮;;同时p1口的灯流动显示:
AJMP LOOP;注意:程序运行到此跳转到开始标号,重复执行:
DELAY: ;延时子程序;参考前面的教程:
CLR P3.3 ;注意小喇叭在3.3口,这里可以使小喇叭发出嗒,嗒声
MOV R7,#255
NOP
NOP
D1:MOV R6,#255 setb p3.3
D2: DJNZ R6,D2 clr p3.3
DJNZ R7,D1 SETB P3.3
RET
END。