⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 k1-k4-test.asm

📁 单片机中LED显示/数码管显示/键盘控制/蜂鸣器输出/中断应用/定时器和计数器/串口通信/键控看门狗/数据交换
💻 ASM
字号:
;********************************************************************
;*                                                                  *
;* ME500单片机开发系统演示程序 -  按键扫描程序                      *
;*                                                                  *
;* 作者:  伟纳电子 - Freeman                                        *
;* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界)  *
;* 邮箱:  freeman@willar.com                                        *
;* 日期:  2004-1-5                                                  *
;*                                                                  *
;* 改编: gguoqing                                                  * 
;* 版本: V1.1 (2006/11/20)                                         *
;* 作者: gguoqing (Email: gguoqing@willar.com)                     *
;*                                                                  *
;*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved  *
;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!        *
;*                                                                  *
;********************************************************************
;*                                                                  *
;* 描述:                                                            *
;*       按键扫描程序                                               *
;*       上电时, 点亮P00口和P20口的LED                              *
;*       按下K1时, P0口LED向右移一位                                *
;*       按下K2时, P0口LED向左移一位                                *
;*       按下K1时, P2口LED向右移一位                                *
;*       按下K2时, P2口LED向左移一位                                *
;*                                                                  *
;********************************************************************

       KEY_S  EQU  40H
       KEY_V  EQU  41H

       K1  BIT  P1.4		; 
       K2  BIT  P1.5		; 
       K3  BIT  P1.6
       K4  BIT  P1.7

       ORG  0000H
       JMP  MAIN
       ORG  0030H

;**********************************************************

; 主程序

;**********************************************************	

MAIN:
	MOV	SP,#60H	    	; 设置栈指针
	MOV	P0,#0FEH	; 初始点亮LED P00
        MOV	P2,#0FEH	; 初始点亮LED P20
	MOV	KEY_V,#0FH	; 初始键值

KEY_CHKSW:			; 循环检测按键是否按下					
	ACALL	SCAN_KEY	; 输入按键状态
	MOV	KEY_S,A
	XRL	A,KEY_V		; 检查按键值是否改变
	JZ	KEY_CHKSW	; 若无键被按,则跳回KEY_CHKSW
	
	MOV	R7,#10		; 延时10ms
	ACALL	DELAYMS		; 延时去抖
	ACALL	SCAN_KEY	; 再次检查按键值
	MOV	KEY_S,A
	XRL	A,KEY_V
	JZ	KEY_CHKSW
	
	MOV	KEY_V,KEY_S	; 保存按键状态
	ACALL	PROC_KEY		;
	SJMP	KEY_CHKSW

;*********************************************************

; 扫描按键子程序

; 传入参数: 无
; 返回值:   A --- 按键状态

;*********************************************************
SCAN_KEY:				
	CLR  A
	MOV  C,K1
	MOV  ACC.0,C
	MOV  C,K2
	MOV  ACC.1,C
	MOV  C,K3
	MOV  ACC.2,C
	MOV  C,K4
	MOV  ACC.3,C
	RET

;*********************************************************

; 按键处理子程序

; 传入参数: KEY_V --- 按键值
; 返回值:   无

;*********************************************************	
PROC_KEY:
	MOV	A,KEY_V
	JNB	ACC.0,PROC_K1
	JNB	ACC.1,PROC_K2
	JNB	ACC.2,PROC_K3
	JNB	ACC.3,PROC_K4
	RET
	
PROC_K1:				; 按键K1处理程序
	MOV	A,P0			; 右移
	RR	A
	MOV	P0,A
	RET
	
PROC_K2:				; 按键K2处理程序
	MOV	A,P0			; 左移
	RL	A
	MOV	P0,A	 
	RET
PROC_K3:				; 按键K3处理程序
	MOV	A,P2			; 右移
	RR	A
	MOV	P2,A
	RET
	
PROC_K4:				; 按键K4处理程序
	MOV	A,P2			; 左移
	RL	A
	MOV	P2,A	 
	RET

;*********************************************************

; 延时子程序

; 传入参数:R7 --- 延时值(MS) 
; 返回值:  无
;*********************************************************	
DELAYMS:


	MOV	A,R7
	JZ	END_DLYMS	
DLY_LP1:
	MOV	R6,#185
DLY_LP2:
	NOP
	NOP
	NOP
	DJNZ	R6,DLY_LP2
	DJNZ	R7,DLY_LP1
END_DLYMS:
	RET 
	
;*********************************************************
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -