单片机按键程序(汇编)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;P0.0为键盘,P2.0为LED指示,按下LED亮,再按0.5秒,LED灭
;00h为识别LED状态的标志位,当00H为1时LED亮,当00H为0时,LED灭。
初始化00H为0
LED_OFF BIT P2.0
K0 BIT P0.0
LED_STATE EQU 00H
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN: CLR LED_STA TE ;清标志位
START:
JNB K0,LOOP
SJMP START ;判断K0状态,若KO不为0,则继续检测K0状态,若k0为0,则跳到loop
LOOP:
CLR LED_OFF
SETB LED_STATE ;点亮LED以及置标志位,CHECK1:
LCALL DELAY
JNB K0,CHECK1 ;若开关未弹起,则一直循环,直至开关弹起。
CHECK_LED_ON:
LCALL DELAY
JB K0,CHECK_LED_ON ;检查开关是否被按下,若未被按下则一直循环,若被按下,则判断标志位
MOV C,LED_STATE
JC CHECK_LED_OFF ;若标志位为1,则跳转到CHECK_LED_OFF
CLR LED_OFF
SETB LED_STATE ;若标志位为0,则点亮LED,同时置标志位为1
CHECK2:
LCALL DELAY
JNB K0,CHECK2 ;检查开关是否被弹起,一直循环
JMP CHECK_LED_ON ;开关弹起后,跳到CHECK_LED_ON,检查开关是否被按下
CHECK_LED_OFF:
JB K0,CHECK_LED_ON
LCALL DELAY
JB K0,CHECK_LED_ON
LCALL DELAY
JB K0,CHECK_LED_ON
LCALL DELAY
JB K0,CHECK_LED_ON
LCALL DELAY
JB K0,CHECK_LED_ON
LCALL DELAY
JB K0,CHECK_LED_ON
LCALL DELAY
JB K0,CHECK_LED_ON ;检查开关是否被按下0.5s,若中途弹起则跳转到CHECK_LED_ON。
SETB LED_OFF
CLR LED_STA TE ;若开关未弹起,则关闭LED,清标志位
CHECK_LED:
LCALL DELAY
JNB K0,CHECK_LED
JMP CHECK_LED_ON ;检查开关是否弹起,弹起后进入CHECK_LED_ON,继续判断开关是否按下
DELAY:
MOV R4,#0FFH
F2: MOV R5,#0FFH
F1: DJNZ R5,F1
DJNZ R4,F2
RET ;延时子程序
END。