51单片机汇编学习例程(1)——KEY篇

 1.ASM1_KEY:       按键控制LED亮灭,3种情况

/**
******************************************************************************
*     @file        asm.asm
*     @author      Alex——小白
*     @version     V1.0
*     @date        2019.9.1
*     @brief       3种方法实现KEY to LED
*    @store       有家Proteus仿真店子
*    @Link        https://shop484534014.taobao.com/
*    @Email         [email protected]
******************************************************************************
*     @attention    All Rights Reserved  
**/

        ORG     0030H            ;程序执行的起始地址                
        LJMP      Main            ;跳转到main函数
        ORG     0100H            ;程序跳转到0100H开始执行
;方法1:
    Main:                        ;最简单的按键赋值(8个按键)
        MOV        P1,P0            ;将P0状态赋给P1
        SJMP    Main            ;跳转到main,死循环

;方法2:
;    Main:                        ;P0.0按键控制P1.0的LED(1个按键)
;        JB        P0.0,Over        ;判断按键是否检测到,若无跳到Main
;        LCALL    Delay            ;若有,延时消抖
;        JB        P0.0,Over        ;再次判断按键是否检测到
;        JNB        P0.0,$            ;长按检测,若有则一直死循环
;        CPL        P1.0            ;若有按键,则LED状态翻转(CPL表示去反)
;    Over:
;        SJMP    Main            ;跳转到main,死循环
        
;方法3:
;    Main:                        ;P0.0-1按键控制P1.0-1的LED(2个按键)
;        JB        P0.0,Next        ;判断P0.0按键是否检测到,若无跳到Next
;        LCALL    Delay            ;若有,延时消抖
;        JB        P0.0,Next        ;再次判断按键是否检测到
;        JNB        P0.0,$            ;长按检测,若有则一直死循环
;        CPL        P1.0            ;若有按键,则LED状态翻转
;    Next:
;        JB        P0.1,Over        ;判断P0.1按键是否检测到,若无跳到Over
;        LCALL    Delay            ;若有,延时消抖
;        JB        P0.1,Over        ;再次判断按键是否检测到
;        JNB        P0.1,$            ;长按检测,若有则一直死循环
;        CPL        P1.1            ;若有按键,则LED状态翻转
;    Over:        
;        SJMP    Main            ;跳转到main,死循环        
        
    Delay:                        ;t=t1*20=10ms,修改R6的值即可更改时间(不精准)
        MOV        R6, #014H        ;014H=20
    D1:                        
        MOV        R7, #0FAH        ;t1=250*2=500
    D2:        
        DJNZ    R7, D2            ;R7=250自减,直到为0跳出循环,双周期
        DJNZ    R6, D1            ;R6=020自减,直到为0跳出循环,双周期
        RET

    END  

如需其他代码,请联系QQ844545015

发布了14 篇原创文章 · 获赞 1 · 访问量 5010

猜你喜欢

转载自blog.csdn.net/Smile_shao/article/details/103532871