51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序

简介: 51单片机用汇编语言实现独立按键检测,每个按键有不同功能,包含按键消抖程序

实验内容:

       某单片机控制系统,P1口接有8发光二极管,P3.0P3.1P3.2P3.3接有4个开关K1K2K3K4,试画出接口电路,并编程使得当K1按下时8个发光二极管全亮;当K2按下时8个发光二极管全灭;当K3按下时8个发光二极管由左向右点亮;当K4按下时8个发光二极管由右向左点亮。通过汇编语言实现。

实验环境:

    Keil软件、 51单片机开发板

实验电路:

       独立按键电路连接:

       

LED模块电路连接(共阳极连接方式):

实验效果图:

k1:(LED全部点亮)

k2:(LED全部熄灭)

k3:(LED向右点亮)

 

k4:(LED向左点亮)

 

实现代码:

MOV B,#0FEH   ;用于等下流水灯的左移、右移
MOV P0,#00H   ;熄灭开发板上的数码管
UP2:   MOV   A,P3          
       ANL   A,#0FH        
       CJNE  A,#0FH,NEXT1 ;比较立即数与寄存器,不相等则转移 
       SJMP  UP2          
NEXT1: 
    LCALL D10ms        ;延时消抖
    MOV   A,P3         
        ANL   A,#0FH  
        CJNE  A,#0FH,NEXT2  ;消抖后的重新检测 (一次检测4个按键)
        SJMP  UP2
NEXT2:            ;接下来具体检测是哪一按键被按下
    JB  P3.0,NEXT3   ;不是P3.0按下 转移检测下一个按键
        LCALL K1         ;是P3.0按下,转移到K1按键功能子函数 
NEXT3:  
    JB  P3.1,NEXT4   ;JB是判断位变量的转移指令,如果P3.1是1 那么就转移到NEXT4(说明没有被按下)
        LCALL K2          ;上面不转移,则说明按键P3.1被按下,那么就转移到K2的按键功能子函数 
NEXT4:  
    JB  P3.2,NEXT5   
        LCALL K3           
NEXT5: 
    JB   P3.3,UP2     
        LCALL K4           
        LJMP  UP2
 
K1: MOV   P2,#0FFH      ;LED全亮
    RET
K2: MOV   P2,#00H     ;LED全灭
    RET
K3: MOV   P2,B      ;按一次LED灯向右移动一位 
    LCALL DELAY   ;按住不松手就是流水灯 
    MOV   A,B
    RL    A             ;循环左移 
    MOV   B,A
    RET
K4: MOV   P2,B      ;按一次LED灯向左移动一位 
    LCALL DELAY   ;按住不松手就是流水灯 
    MOV   A,B
    RR    A             ;循环右移移
    MOV   B,A
    RET
 
D10ms:      ;延时函数 用于按键消抖@11.0592MHz
  PUSH 30H
  PUSH 31H
  MOV 30H,#18
  MOV 31H,#230
NEXT6:
  DJNZ 31H,NEXT6
  DJNZ 30H,NEXT6
  POP 31H
  POP 30H
  RET
 
DELAY:        ;将上面的延时函数进行改造
  MOV R7,#50    ;修改立即数,就可以调节流水灯的快慢,当前为50,延时时间为500ms
D1:
  PUSH 30H
  PUSH 31H
  MOV 30H,#18
  MOV 31H,#230
NEXT:
  DJNZ 31H,NEXT
  DJNZ 30H,NEXT
  POP 31H
  POP 30H 
  DJNZ R7,D1
  RET
 
END
相关文章
|
3月前
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
【51单片机】独立按键,每个按键不同功能,数码管数值的加减,控制流水灯模式,包含按键消抖,数码显示,流水灯
261 1
加快软盘操作速度的汇编程序源代码
加快软盘操作速度的汇编程序源代码
|
3月前
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度
|
3月前
|
C语言
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
【51单片机】LCD1602显示字符串,时间、时间+按键校准、秒表计时的功能代码。
|
3月前
|
C语言
51单片机汇编语言流水灯代码
51单片机汇编语言流水灯代码
|
3月前
|
人工智能 开发者 芯片
【51单片机】单片机开发者的福音: 让AI看电路图帮你编写程序(使用ChatGPT 中训练好的单片机工程师模型)
使用AI大语言模型编写 单片机程序. 使用的是 OpenAI公司发布的 ChatGPT .在ChatGPT上有别人训练好的 单片机工程师 with Keil uVision 5 - C Code Explainer模型, 可以上传电路图改模型可以通过这个用户所给的电路图进行编程.
244 0
【51单片机】单片机开发者的福音: 让AI看电路图帮你编写程序(使用ChatGPT 中训练好的单片机工程师模型)
|
3月前
|
程序员 编译器 数据处理
汇编高手秘籍:解锁性能优化新境界,用汇编语言让你的程序飞起来!
【8月更文挑战第31天】汇编语言作为编程基石,其高效性能备受推崇。尽管现代软件开发更偏爱高级语言,但在性能要求极高的场景下,汇编优化仍不可或缺。本文通过示例代码介绍四种优化技巧:循环展开、寄存器分配、指令重排及SIMD指令使用,显著提升执行效率。同时强调分析性能瓶颈、测试优化效果及保持代码可读性的重要性,助力开发者在关键代码路径上实现性能突破。
75 0
|
3月前
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
51单片机汇编语言点亮一位数码管,并计时(超详细分析汇编语言)
138 0
|
6月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
57 1
|
6月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
94 1