org 0000h
jmp start
org 0030h
start:
mov p0,#11111110b ; 此时第一个灯亮
call t10s
mov p0,#11111101b ;此时第二个灯亮
call t10s
mov p0,#11111011b
call t10s
mov p0,#11110111b
call t10s
mov p0,#11101111b
call t10s
mov p0,#11011111b
call t10s
jmp start ;此处跳到开始 即 循环
;延时子程序10秒=250usX2X200X100
t10s:mov r5,#100
lpr5:mov r6,#200
lpr6:mov r7,#250
djnz r7,$
djnz r6,lpr6
djnz r5,lpr5
ret
end
把灯的正极接电源正极 即vcc 负极分别接p00-p05
此时 给p0 送0灯就亮 1灯就不亮
程序已经过调试 可用
仿真如下:
ORG
0000H
LJMP
MAIN
;转主程序
ORG
001BH
LJMP
IT0P
;转T1中断服务程序
ORG
1000H
;主程序入口
MAIN:
LTB2:
MOV
DPTR,#TAB2
;把数据指针移到TAB2位址
CLR
P13
;猜测是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个
多看书,多看数据手册对你有好处!
就是所谓的流水灯,可以说是单片机中最简单的了,直接用一组总线控制(P0,P1,P2,P3口都可以),控制相应的LED的端口的高低电平就可以(至于是高电平还是低电平就要看你的硬件电路了)
以上就是关于51单片机 跑马灯程序全部的内容,包括:51单片机 跑马灯程序、求一个单片机大神,给我解释下跑马灯程序的注释、单片机中走马灯如何编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)