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

📄 a20_key_led.asm

📁 winbond的W567B030驱动ISD17240的例子
💻 ASM
字号:
;****************************************************************************************
;****************************************************************************************
;========================按键扫描,以及处理和LED闪烁======================================
;1.	实现的功能:
;	按键功能执行
;2.	包含函数:
;	1.MLED_FLASH						;LED闪动
;	2.MKEY_SCAN							;按键扫描
;	3.MKEY1_Record_ISD					;K1处理,依据gChoose_SEG,录音ISD相应的段
;	4.MKEY2_PLAY_ISD					;K2处理,依据gChoose_SEG,播放ISD相应的段
;	5.MKEY3_Choose_SEG					;K3处理,gChoose_SEG加一,在1-45之间循环
;	6.MKEY4_Choose_SEG					;K4处理,gChoose_SEG减一,在1-45之间循环
;	7.MDIP_NUM							;显示
;	8.MDELAY_500MS						;延时500s,并检查按键是否松开
;	9.MCHECK_Record						;在录音过程中,检查录音是否结束,录音按键是否松开
;3.	修改日期: 2008/08/21
;========================================================================================
Mac_KEY_Port 		EQU IP0
Mac_KEY_NUM	 		EQU FDH

Mac_KEY1_NUM 		EQU 01H
Mac_KEY2_NUM 		EQU 04H
Mac_KEY3_NUM 		EQU 08H
Mac_KEY4_NUM 		EQU 10H

Mac_SYSLED_Port 	EQU BP0
Mac_SYSLED_NUM		EQU	04H
;========================================================================================
;1.LED闪动
;-----------------------------------------------
MLED_FLASH:
	LDA !Mac_SYSLED_Port	;取接口数值
	EOR #Mac_SYSLED_NUM
	STA !Mac_SYSLED_Port
	RTS
;========================================================================================
;2.	按键扫描
;	键盘属性:	一般的键盘,一个端口对应一个按键
;========================================================================================
MKEY_SCAN:
	LDA #80H
	TRB !BP2
	LDA Mac_KEY_Port	;按键端口
	AND #Mac_KEY_NUM	;总按键对应的数值
	CMP #Mac_KEY_NUM
	BCS SKEY_SCAN_END
;------------------------------------------------有键按下
	INC gKEY_Filter
	LDA gKEY_Filter		;滤波处理
	CMP #3				;数值可调
	BCC SKEY_SCAN_RTS
	STZ gKEY_Filter
	;--------------------------------------------
	LDA Mac_KEY_Port
	AND #Mac_KEY_NUM	;总按键对应的数值
	STA gKEY_NUM		;传送键值
	TRB gKEY_Process
	;--------------------------------------------
	STZ gSTOP_Counter	;清SLEEP计数器
	;--------------------------------------------
	BRA SKEY_SCAN_RTS
SKEY_SCAN_END:
;------------------------------------------------没键按下
	STZ gKEY_Filter
	LDA #Mac_KEY_NUM
	TRB gKEY_Process
	TSB gKEY_NUM
SKEY_SCAN_RTS:
	RTS
;========================================================================================
;3.	K1处理,依据gChoose_SEG,录音ISD相应的段
;	K1对应的端口:BP12
;----------------------------------------------
MKEY1_Record_ISD:
	LDA gKEY_NUM
	BIT #Mac_KEY1_NUM
	BNE SKEY1_Record_ISD_RTS
	LDA gKEY_Process
	BIT #Mac_KEY1_NUM
	BNE SKEY1_Record_ISD_RTS
	;-------------------------------------------确定有键按下
	LDA #Mac_KEY1_NUM
	TSB gKEY_Process
	;--------------------------------------------
	STZ gSTOP_Counter	;清SLEEP计数器
	;--------------------------------------------

	MACRO_ISD17XX_COMM_RD_STATUS
	LDA gISD_Receive_DATA+2		;检测ISD是否在播放声音
	BIT #04H
	BEQ SKEY1_Record_ISD_Record_RUN
	JSR MISD17XX_STOP
SKEY1_Record_ISD_Record_RUN:
	;--------------------------------------------
	JSR MDELAY_500MS
	LDA !Mac_KEY_Port			;延时1S,检测按键是否还在按下
	BIT #Mac_KEY1_NUM
	BEQ SKEY1_Record_ISD_Record_RUN_CH
	RTS							;没键按下就退出
SKEY1_Record_ISD_Record_RUN_CH:
	;----------------------------
	MACRO_TurnOn_MIC			;打开MIC
	;----------------------------

	LDA gChoose_SEG
	;------------------------------
	BNE SKEY1_Record_ISD_Record_RUN_START
	LDA #1
	STA gChoose_SEG
	BRA SKEY1_Record_ISD_Record_RUN_START_RUN
SKEY1_Record_ISD_Record_RUN_START:
	CMP #45
	BCC SKEY1_Record_ISD_Record_RUN_START_RUN
	LDA #1
	STA gChoose_SEG
SKEY1_Record_ISD_Record_RUN_START_RUN:
	LDA gChoose_SEG
	STA gISD_SGEBuff
	JSR MISD17XX_SET_Erase_SEG
	JSR MISD17XX_SET_REC_SEG
	;----------------------------
	JSR MCHECK_Record
 	;----------------------------

SKEY1_Record_ISD_RTS:
	RTS
;========================================================================================
;4.	K2处理,依据gChoose_SEG,播放ISD相应的段
;	K2对应的端口:BP13
;------------------------------------------------
MKEY2_PLAY_ISD:
	LDA gKEY_NUM
	BIT #Mac_KEY2_NUM
	BNE SKEY2_PLAY_ISD_RTS
	LDA gKEY_Process
	BIT #Mac_KEY2_NUM
	BNE SKEY2_PLAY_ISD_RTS
	;--------------------------------------------确定有键按下
	LDA #Mac_KEY2_NUM
	TSB gKEY_Process
	;--------------------------------------------
	STZ gSTOP_Counter	;清SLEEP计数器
	;--------------------------------------------

	MACRO_ISD17XX_COMM_RD_STATUS
	LDA gISD_Receive_DATA+2
	BIT #04H
	BEQ SKEY2_PLAY_ISD_PLAY
	;-----------------------------
	JSR MISD17XX_STOP
	LDA gChoose_SEG
	CMP gISD_SGEBuff
	BEQ SKEY2_PLAY_ISD_RTS
SKEY2_PLAY_ISD_PLAY:
	;-----------------------------
	LDA gChoose_SEG
	BNE SKEY2_PLAY_ISD_PLAY_START
	LDA #1
	STA gChoose_SEG
	BRA SKEY2_PLAY_ISD_PLAY_START_RUN
SKEY2_PLAY_ISD_PLAY_START:
	CMP #45
	BCC SKEY2_PLAY_ISD_PLAY_START_RUN
	LDA #1
	STA gChoose_SEG
SKEY2_PLAY_ISD_PLAY_START_RUN:
	LDA gChoose_SEG
	STA gISD_SGEBuff			;播放所选择的段
	JSR MISD17XX_SET_PLAY
SKEY2_PLAY_ISD_RTS:
	RTS
;========================================================================================
;5.	K3处理,gChoose_SEG加一,在1-45之间循环
;	K3对应的端口:IP03
;------------------------------------------------
MKEY3_Choose_SEG:
	LDA gKEY_NUM
	BIT #Mac_KEY3_NUM
	BNE SKEY3_Choose_SEG_RTS
	LDA gKEY_Process
	BIT #Mac_KEY3_NUM
	BNE SKEY3_Choose_SEG_RTS
	;--------------------------------------------确定有键按下
	LDA #Mac_KEY3_NUM
	TSB gKEY_Process
	;--------------------------------------------
	STZ gSTOP_Counter	;清SLEEP计数器
	;--------------------------------------------
	INC gChoose_SEG
	LDA gChoose_SEG
	CMP #45
	BCC SKEY3_Choose_SEG_RTS
	LDA #1
	STA gChoose_SEG
SKEY3_Choose_SEG_RTS:
	RTS
;========================================================================================
;6.	K4处理,gChoose_SEG减一,在1-45之间循环
;	K4对应的端口:IP04
;------------------------------------------------
MKEY4_Choose_SEG:
	LDA gKEY_NUM
	BIT #Mac_KEY4_NUM
	BNE SKEY4_Choose_SEG_RTS
	LDA gKEY_Process
	BIT #Mac_KEY4_NUM
	BNE SKEY4_Choose_SEG_RTS
	;--------------------------------------------确定有键按下
	LDA #Mac_KEY4_NUM
	TSB gKEY_Process
	;--------------------------------------------
	STZ gSTOP_Counter	;清SLEEP计数器
	;--------------------------------------------
	DEC gChoose_SEG
	LDA gChoose_SEG
	BNE SKEY3_Choose_SEG_RTS
	LDA #44
	STA gChoose_SEG
SKEY4_Choose_SEG_RTS:
	RTS
;========================================================================================
;7.显示
;-----------------------------------------------
MDIP_NUM:
	LDA FSYS_FlAG
	BIT #MACRO_SYS_FLAG_DIP
	BNE SDIP_NUM_RTS

	LDA gChoose_SEG
	STA	!BP0
SDIP_NUM_RTS:
	RTS
;========================================================================================
;8.	延时500s,并检查按键是否松开
;-----------------------------------------------
MDELAY_500MS:
	STZ gTime100ms
	STZ gTime500ms
	LDA #MACRO_SYS_500MS
	TRB FSYS_Time_Flag
SRecord_Delay_Check_LOOP:
	LDA #01H
	STA !WDTC
	LDA !Mac_KEY_Port
	BIT #Mac_KEY2_NUM				;按键是否松开
	BNE SDELAY_500MS_RTS
	;---------------------------------------------
	LDA FSYS_Time_Flag
	BIT #MACRO_SYS_500MS
	BEQ SRecord_Delay_Check_LOOP
SDELAY_500MS_RTS:
	RTS
;========================================================================================
;9.	在录音过程中,检查录音是否结束,录音按键是否松开.
;	并闪动LED
;-----------------------------------------------
MCHECK_Record:
	LDA #MACRO_SYS_FLAG_DIP
	TSB FSYS_FlAG
	STZ gTime500ms
	LDA #MACRO_SYS_500MS
	TRB FSYS_Time_Flag
SCHECK_Record_LP:
	LDA FSYS_Time_Flag
	BIT #MACRO_SYS_10MS
	BEQ SCHECK_Record_100MS
	LDA #MACRO_SYS_10MS
	TRB FSYS_Time_Flag
	;------------------------------------------------------10MS
	LDA #01H
	STA !WDTC
SCHECK_Record_100MS:
	LDA FSYS_Time_Flag
	BIT #MACRO_SYS_100MS
	BEQ SCHECK_Record_500MS
	LDA #MACRO_SYS_100MS
	TRB FSYS_Time_Flag
	;------------------------------------------------------100MS
	LDA !Mac_KEY_Port
	BIT #Mac_KEY1_NUM
	BNE SCHECK_Record_END
	;---------------------------------------------
	MACRO_ISD17XX_COMM_RD_STATUS
	LDA gISD_Receive_DATA+2
	BIT #08H
	BEQ SCHECK_Record_END

SCHECK_Record_500MS:
	LDA FSYS_Time_Flag
	BIT #MACRO_SYS_500MS
	BEQ SCHECK_Record_LP
	LDA #MACRO_SYS_500MS
	TRB FSYS_Time_Flag
	;------------------------------------------------------500MS
	LDA !BP0
	AND #7FH
	CMP #7FH
	BNE SCHECK_Record_LED_OFF
	;---------------------------------------------
	LDA gChoose_SEG			;打开LED
	STA	!BP0		
	BRA SCHECK_Record_LP
SCHECK_Record_LED_OFF:
	;---------------------------------------------
	LDA #7FH
	TSB !BP0				;turn off LED
	BRA SCHECK_Record_LP
	;---------------------------------------------
SCHECK_Record_END:

	MACRO_ISD17XX_COMM_RD_STATUS
	LDA gISD_Receive_DATA+2
	BIT #08H
	BEQ SCHECK_Record_RTS
	JSR MISD17XX_STOP
SCHECK_Record_RTS:
	MACRO_TurnOff_MIC	;关闭MIC
	LDA #MACRO_SYS_FLAG_DIP
	TRB FSYS_FlAG
	RTS












⌨️ 快捷键说明

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