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
这个是我写的跑马灯程序,没如返有左右振荡,自己参考参考加上去吧
我们要用到2X5的独立键盘控制的,可是我是新手不懂搜轮裂 能给我一个程序不??呵呵,下面就是程序,你试试看桐基就知道了。
--------------------------
你的程序,有三种流水灯的模式,就是按键功能,检测不出来。
电路图,不清楚,看个大概。
现在是:K1、K2分别按下,世闭各显示一种模式,
两个键盘都不按,显示第三种模式。
你原来只是在起动的时候,按键才管用,要想更换模式,必须重新起动。
现在增加了三行:“LJMP START 本行可删除”,就可以在运行期间,更换模式。.
ORG 0000H
START:
MOV P1, #255
CLR P1.6
MOV P2, #0
SETB P2.1
SETB P2.3
JNB P1.0, LOOPB
JNB P1.1, LOOPC
MOV A,#01H
LOOPA:MOV R0,#7
LOOPAL:
MOV P0, A
RL A
LCALL DELAY
DJNZ R0, LOOPAL
MOV R0,#7
LOOPAR:
MOV P0, A
RR A
LCALL DELAY
DJNZ R0, LOOPAR
LJMP START 本行可删除.
LJMP LOOPA
LOOPB:MOV A,#03H
LOOPBL:
MOV P0,A
RL A
LCALL DELAY
JNB ACC.7, LOOPBL
LOOPBR:
MOV P0, A
RR A
LCALL DELAY
JNB ACC.0,LOOPBR
LJMP START 本行可删除.
LJMP LOOPB
LOOPC:MOV R0,#3
MOV A,#01H
LOOPCL:
MOV P0, A
RL A
RL A
LCALL DELAY
DJNZ R0,LOOPCL
MOV R0, #3
RL A
LOOPCR:
MOV P0, A
RR A
RR A
LCALL DELAY
DJNZ R0, LOOPCR
LJMP START 本行可删除.
LJMP LOOPC
DELAY:MOV R4,#2
L3:MOV R2,#250
L1:MOV R3,#250
L2:DJNZ R3,L2
DJNZ R2,L1
DJNZ R4,L3
RET
END
本程序在PROTEUS中仿真调试通过。
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个
多看书,多看数据手册对你有好处!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)