51汇编按键控制霓虹灯程序设计

@第一次在这里写博客呀~~我也是最近才学单片机的

51汇编按键控制霓虹灯程序设计

问题描述:用P2口控制8个LED,实现跑马灯程序,用软件延时实现1秒的扫描周期。
按键K1(P3.0)、K2(P3.1)作为输入。

K1(P3.1)作为跑马灯的启停控制,松开时跑马灯运行,按下时跑马灯熄灭;
K2(P3.0)作为跑马灯的方式选择,松开时跑马灯左移,按下时跑马灯右移。
晶体振荡器频率为12MHz


源码如下

FLAG EQU R7 ;标志位,用于跳过右移结束时多余的延时
ORG 0000H
AJMP BEGIN
ORG 0100H
BEGIN:
MOV P3,#0FFH ;P3口置1
MOV A,#0FEH
MOV R7,#0
LOOP:
MOV P2,A ;左移
RL A
CJNE FLAG,#0,FLAG2 ;K2松开时可以不停留一秒直接转到下一个灯亮
FLAG1:
ACALL DELAY
FLAG2:
MOV FLAG,#0
MOV R0,A
MOV A,P3 ;读入键盘状态
CJNE A,#0FFH,LOOP1 ;判断是否有按键按下 CJNE比较不等跳
MOV A,R0
JMP LOOP ;没有按键按下则等待
LOOP1: ;消除按键抖动
ACALL DELAY_20 ;延时去抖
MOV A,P3 ;重新读入键盘状态
CJNE A,#0FFH,LOOP2 ;非误读则跳转
LJMP LOOP ; 误读情况,继续等待
LOOP2:
MOV A,R0 ;用于K1按下之后恢复原来状态
RR A
JNB P3.1,K1 ;K1按下跳转至K1
JNB P3.0,K2 ;K2按下跳转至K2
LJMP BEGIN

K1:
MOV P2,#0FFH
JNB P3.1,$ ;按下则保持原理状态(即熄灭)
LJMP LOOP

K2:
RR A ;右移一位
MOV P2,A
ACALL DELAY
JNB P3.0,K2 ;按下则继续右移
MOV FLAG,#1
LJMP LOOP ;不按下时继续左移

DELAY_20: ;9ms延时,去抖时用
MOV R1,#9
LP1:ACALL DE1
DJNZ R1,LP1
RET
DE1:
MOV R5,#250
DE2:
NOP
NOP
DJNZ R5,DE2
RET

DELAY: ;1秒延时
MOV R1,#250
DE5:
ACALL DE3
ACALL DE3
ACALL DE3
ACALL DE3
DJNZ R1,DE5
RET
DE3:
MOV R5,#250
DE4:
NOP
NOP
DJNZ R5,DE4
RET
END

来源:MISS_FEI_

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年4月18日
下一篇 2019年4月18日

相关推荐