LED灯与汇编语言
大小:0.1 MB 人气: 2017-09-06 需要积分:0
1、如何点亮一个LED发光管
LOOP:CLR P1.0;用CLR命令使P1.1输出低电平,点亮LED
CLR P1.2;用CLR命令使P1.1输出低电平,点亮LED
LCALL DELAY;调用延时子程序DELAY
AJMP LOOP;通过AJMP执行LOOP,从最开始循环执行,无限循环下去
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
2、让点亮后的LED发光管可以闪动
LOOP:SETB P1.0 ;用SETB命令使P1.0输出高电平,熄灭LED
SETB P1.2 ;用SETB命令使P1.2输出高电平,熄灭LED
LCALL DELAY;调用延时子程序DELA
CLR P1.0;用CLR命令使P1.1输出低电平,点亮LED
CLR P1.2;用CLR命令使P1.1输出低电平,点亮LED
LCALL DELAY;调用延时子程序DELAY
AJMP LOOP;通过AJMP执行LOOP,从最开始循环执行,无限循环下去
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
3、LED流水灯
ORG 0000HLJMP MAIN
MAIN:
MOV P0,#0FEH ; 初始点亮LED1
MOV R7,#0FEH ; 保存P0
MAIN_LP:
LCALL DELAY ; 延时
MOV A,R7 ;
RL A ; 循环移位
MOV R7,A ; 保存到R7
MOV P0,A ; 点亮下一个LED
JMP MAIN_LP ; 不停循环
;===========================================================
DELAY: ; 延时子程序
MOV R0,#0FFH
MOV R1,#0FFH
DLY_LP:
NOP
NOP
DJNZ R0,DLY_LP
MOV R0,#0FFH
DJNZ R1,DLY_LP
RET
END
4、LED流水灯(移位方式)
;用移位方式实现流水灯;///////////////////////////////////////////
org 00h ;程序上电从00h开始
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main:
; mov p2,#0f0h
mov a,#0feh ;给A赋值成11111110
loop:
mov p0,a ;将A送到P1口,发光二极管低电平点亮
lcall delay ;调用延时子程序
rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
delay:
mov r3,#20 ;最外层循环二十次
d1:
mov r4,#80 ;次外层循环八十次
d2:
mov r5,#250 ;最内层循环250次
djnz r5,$ ;总共延时2us*250*80*20=0.8S
djnz r4,d2
djnz r3,d1
ret
end
5、正反流水灯
;左移star: mov r3,#8 ;设置流水位数
mov p0,#11111110b ;从p0.0开始
loop: acall d01s
mov a,p0 ;读取p0当前数据到acc
rl a ;左移一位
mov p0,a ;将左移的数据再送到p1
djnz r3,loop ;没有完成8位继续
;******************
mov p0,#0ffh ;熄灭所有灯
;******************
;右移
mov r3,#8 ;设置流水位数
mov p0,#01111111b ;从p0.7开始
loop1: acall d01s
mov a,p0 ;读取p0当前数据到acc
rr a ;右移一位
mov p0,a ;将左移的数据再送到p1
djnz r3,loop1 ;没有完成8位继续
ljmp star ;完成后返回到开始再来
;延时子程序
d01s: mov r0,#255
d01l1: mov r1,#198
djnz r1,$
djnz r0,d01l1
ret
end
1、如何点亮一个LED发光管
LOOP:CLR P1.0;用CLR命令使P1.1输出低电平,点亮LED
CLR P1.2;用CLR命令使P1.1输出低电平,点亮LED
LCALL DELAY;调用延时子程序DELAY
AJMP LOOP;通过AJMP执行LOOP,从最开始循环执行,无限循环下去
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
2、让点亮后的LED发光管可以闪动
LOOP:SETB P1.0 ;用SETB命令使P1.0输出高电平,熄灭LED
SETB P1.2 ;用SETB命令使P1.2输出高电平,熄灭LED
LCALL DELAY;调用延时子程序DELA
CLR P1.0;用CLR命令使P1.1输出低电平,点亮LED
CLR P1.2;用CLR命令使P1.1输出低电平,点亮LED
LCALL DELAY;调用延时子程序DELAY
AJMP LOOP;通过AJMP执行LOOP,从最开始循环执行,无限循环下去
DELAY: MOV R7,#250
D1: MOV R6,#250
D2: DJNZ R6,D2
DJNZ R7,D1
RET
END
3、LED流水灯
ORG 0000HLJMP MAIN
MAIN:
MOV P0,#0FEH ; 初始点亮LED1
MOV R7,#0FEH ; 保存P0
MAIN_LP:
LCALL DELAY ; 延时
MOV A,R7 ;
RL A ; 循环移位
MOV R7,A ; 保存到R7
MOV P0,A ; 点亮下一个LED
JMP MAIN_LP ; 不停循环
;===========================================================
DELAY: ; 延时子程序
MOV R0,#0FFH
MOV R1,#0FFH
DLY_LP:
NOP
NOP
DJNZ R0,DLY_LP
MOV R0,#0FFH
DJNZ R1,DLY_LP
RET
END
4、LED流水灯(移位方式)
;用移位方式实现流水灯;///////////////////////////////////////////
org 00h ;程序上电从00h开始
ajmp main ;跳转到主程序
org 0030h ;主程序起始地址
main:
; mov p2,#0f0h
mov a,#0feh ;给A赋值成11111110
loop:
mov p0,a ;将A送到P1口,发光二极管低电平点亮
lcall delay ;调用延时子程序
rl a ;累加器A循环左移一位
ajmp loop ;重新送P1显示
delay:
mov r3,#20 ;最外层循环二十次
d1:
mov r4,#80 ;次外层循环八十次
d2:
mov r5,#250 ;最内层循环250次
djnz r5,$ ;总共延时2us*250*80*20=0.8S
djnz r4,d2
djnz r3,d1
ret
end
5、正反流水灯
;左移star: mov r3,#8 ;设置流水位数
mov p0,#11111110b ;从p0.0开始
loop: acall d01s
mov a,p0 ;读取p0当前数据到acc
rl a ;左移一位
mov p0,a ;将左移的数据再送到p1
djnz r3,loop ;没有完成8位继续
;******************
mov p0,#0ffh ;熄灭所有灯
;******************
;右移
mov r3,#8 ;设置流水位数
mov p0,#01111111b ;从p0.7开始
loop1: acall d01s
mov a,p0 ;读取p0当前数据到acc
rr a ;右移一位
mov p0,a ;将左移的数据再送到p1
djnz r3,loop1 ;没有完成8位继续
ljmp star ;完成后返回到开始再来
;延时子程序
d01s: mov r0,#255
d01l1: mov r1,#198
djnz r1,$
djnz r0,d01l1
ret
end
非常好我支持^.^
(2) 100%
不好我反对
(0) 0%