0000H
SJMP
START
ORG
0030H
START:
MOV
A,
#0FEH
先让第一个发光二极管点亮
LOOP:
MOV
P1,
A
从P1口输出到发光二极管
MOV
R1,
#100
延时0.5秒
DEL1:
MOV
R2,
#200
DEL2:
MOV
R3,
#7
DEL3:
DJNZ
R3,
DEL3
DJNZ
R2,
DEL2
DJNZ
R1,
DEL1
RL
A
左移一位,点亮下一个发光二极管
LJMP
LOOP
END
ORG0000H
LJMP
MAIN
转主程序
ORG
001BH
LJMP
IT0P
转T1中断服务程序
ORG
1000H
主程序入口
MAIN:
LTB2:
MOV
DPTR,#TAB2
把数据指针移到TAB2位址
CLR
P1.3
猜测是led总开关
MOV
R1,#00H
清空R1
MOV
A,#00H
清空A
DEL1:
MOV
SP,#60H
;设置堆栈指针
MOV
B,#0AH
;设置中断执行次数
MOV
TMOD,#10H
;选择T1,定时模式,工作方式1
MOV
TL1,#0B0H
;设置低字节计数初值
MOV
TH1,#3CH
;设置高字节计数初值
SETB
TR1
;启动T1开始计时
SETB
ET1
;T1中断允许
SETB
EA
;开全局中断
HERE1:
SJMP
HERE1
;等待
IT0P:
MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
B,LOOP
;非零跳转,在本程序中就是结束
MOV
B,#0AH
;上一句等于零,执行这一句,设置执行次数
MOVC
A,@A+DPTR
;取出偏移后的数据到寄存器A中
MOV
P0,A
;输出
INC
R1
;偏移量自加1
CJNE
R1,#10H,LOOP2
;判断是否全部取出,不相等跳转
MOV
R1,#00H
;上一句相等就清空R1
LOOP2:
MOV
A,R1
;把偏移量赋值给A
LOOP:
RETI
;中断结束,返回
TAB2:
DB
7FH,3FH,1FH,0FH,07H,03H,01H,00H
DB
80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
END
;谢谢观赏
12MHz晶振
定时器50ms一次中断
led500ms亮或灭1个
多看书,多看数据手册对你有好处!
答疑解难 跑马灯程序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: JB P0.7,MAIN ;等待开始键按下
LCALL YS ;按键延时
JB P0.7,MAIN
MOV A,#7FH ;是开始键按下 则跑马灯开始运行
LL: MOV P1,A
LCALL YS ;显示延时
RR A ;循环右移一位
JB P0.6, LL ;没有按下停止键 则继续跑马
LCALL YS ;按键延时
JB P0.6,LL ;按下停止键 则停止跑马;否则继续跑马
MOV A,#0FFH
MOV P1,A
SJMP MAIN ;转到程序开始处,等待开始键的按下
YS: MOV R7,#150 ;延时子程序
YL: MOV R6,#200
YY: NOP
DJNZ R6,YY
DJNZ R7,YL
RET
END
硬件接口电路如下:
哈哈 还满意吗 就请给俺选择(满意选项)吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)