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

📄 dtfmsend.asm

📁 用汇编写的可以根据电阻网络发送软件发送DTMF的程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
	mov	@r0,a
	inc	r0
	cjne	r0,#80h,_Inti_8051		
	ret
	;-------------------------

;------------------------------------------------------------------------------
; Function Name    	: Inti_Port                                              
; Description      	: intializtion Port                                                        
; Input        		:                                                          
; Output       		:                             
; Effect       		:                                                           
; Create by        	: Cloud zhou                                                          
; Last modified by	: 
;------------------------------------------------------------------------------ 
Inti_Port:
	mov	p1,#0xff
	mov	p2,#0x00	
	ret
	;-------------------------       
	
;------------------------------------------------------------------------------
; Function Name 	: Inti_Time0                                              
; Description		: intializtion time0, time0 use mode1 is 16bit timer,per 40ms interrupt once                                                        
;			: intializtion time1, time1 use mode1 is 16bit timer,per 10ms interrupt once                                                        
; Input			:                                                          
; Output		:                             
; Effect		:                                                           
; Create by		: Cloud zhou                                                          
; Last modified by	: 
;------------------------------------------------------------------------------ 
Inti_Time:
	mov	TMOD,#00010001b 	;time0 use mode1 is 16bit timer
	mov	TL0,#0xc0		; 40ms
	mov	TH0,#0x63
	
	mov	TL1,#0xf0
	mov	TH1,#0xd8		; 10ms		
	ret
	;--------------------------

;------------------------------------------------------------------------------
; Function Name    		: Inti_KeyBoard                                              
; Description      		: intializtion KeyBoard                                                      
; Input        			:                                                          
; Output       			: nKeySaveNow, nKeyValue, nCountTime, nError, nKeyBoardStae
;				: bKeyPressFlag, bKeyPressFlag10ms, bKeyPress1SecFlag                       
; Effect       			:                                                           
; Create by        		: Cloud zhou                                                          
; Last modified by		: 
;------------------------------------------------------------------------------ 
Inti_KeyBoard:
	mov	nKeyValue,#NOKEY				; No key is press
	mov	nKeySaveNow,#nBuffferStartTemp	; The keyboard buffer set NULL
	mov	nCountTime,#00		
	mov	nKeyANum,#0x00		
	mov	nError,#0x00
	mov	nKeyBoardState,#KB_IDLESTATE	; start state is idle
	clr	bKeyPressFlag 				
	clr	bKeyPressFlag10ms
	clr	bKeyPress1SecFlag

	ret
	;--------------------------------------

;------------------------------------------------------------------------------	
; Function Name    		: GetKey                                              
; Description      		: Scan Keyboard and  fetch keyValue                                                       
; Input        			:                                                          
; Output       			: nKeyValue                           
; Effect       			:                                                           
; Create by        		: Cloud zhou                                                          
; Last modified by		: 
;------------------------------------------------------------------------------ 
GetKey:
	mov	p1,#0x0f
	mov	a,p1
	mov	nKeyValue,a				; col value save
	mov	p1,#0xf0
	mov	a,p1					; row value save
	orl	a,nKeyValue				; encode keyValue (row or col), and confirm keyValue

_NOKEY:									; Confirm KeyValue		
	cjne   	a,#0xff,_KEY_1			; 0xff NOKEY
	mov	nKeyValue,#NOKEY
	jmp	_GetKeyEnd
		
_KEY_1:  								
	cjne	a,#0x7e,_KEY_2			; KEY_1
	mov	nKeyValue,#KEY_1
	jmp	_GetKeyEnd
		
_KEY_2:							
	cjne	a,#0xbe,_KEY_3			; KEY_2
	mov	nKeyValue,#KEY_2
	jmp	_GetKeyEnd
		
_KEY_3:
	cjne	a,#0xde,_KEY_4			; KEY_3
	mov	nKeyValue,#KEY_3
	jmp	_GetKeyEnd
		
_KEY_4:
	cjne	a,#0x7d,_KEY_5			; KEY_4
	mov	nKeyValue,#KEY_4
	jmp	_GetKeyEnd
	
_KEY_5:
	cjne	a,#0xbd,_KEY_6			; KEY_5
	mov	nKeyValue,#KEY_5
	jmp	_GetKeyEnd
		
_KEY_6:
	cjne	a,#0xdd,_KEY_7			; KEY_6
	mov	nKeyValue,#KEY_6
	jmp	_GetKeyEnd
		
_KEY_7: 
	cjne	a,#0x7b,_KEY_8			; KEY_7
	mov	nKeyValue,#KEY_7
	jmp	_GetKeyEnd
		
_KEY_8:
	cjne	a,#0xbb,_KEY_9			; KEY_8
	mov	nKeyValue,#KEY_8
	jmp	_GetKeyEnd
		
_KEY_9:
	cjne	a,#0xdb,_KEY_STAR		; KEY_8 
	mov	nKeyValue,#KEY_9
	jmp	_GetKeyEnd
		
_KEY_STAR:
	cjne	a,#0x77,_KEY_0			; KEY_STAR
	mov	nKeyValue,#KEY_STAR
	jmp	_GetKeyEnd
		
_KEY_0:
	cjne	a,#0xb7,_KEY_WELL		; KEY_0
	mov	nKeyValue,#KEY_0																
	jmp	_GetKeyEnd
		
_KEY_WELL:
	cjne	a,#0xd7,_KEY_SHIFT		; KEY_WELL
	mov	nKeyValue,#KEY_WELL		
	jmp	_GetKeyEnd
		
_KEY_SHIFT:
	cjne	a,#0xe7,_KEY_OK			; KEY_SHIFT
	mov	nKeyValue,#KEY_SHIFT
	jmp	_GetKeyEnd
		
_KEY_OK:
	cjne	a,#0xed,_KEY_RESET	; KEY_OK
	mov	nKeyValue,#KEY_OK
	jmp	_GetKeyEnd
		
_KEY_RESET:
	cjne	a,#0xeb,_KEY_CLEAR		; KEY_RESET
	mov	nKeyValue,#KEY_RESET
	jmp	_GetKeyEnd
		
_KEY_CLEAR:
	cjne	a,#0xee,_KEY_A			; KEY_CLEAR
	mov	nKeyValue,#KEY_CLEAR
	jmp	_GetKeyEnd
		
_KEY_A:
	cjne	a,#0x66,_KEY_B			; KEY_A
	mov	nKeyValue,#KEY_A
	jmp	_GetKeyEnd
		
_KEY_B:
	cjne	a,#0xa6,_KEY_C			; KEY_B
	mov	nKeyValue,#KEY_B
	jmp	_GetKeyEnd
										
_KEY_C:
	cjne	a,#0xc6,_KEY_D			; KEY_C
	mov	nKeyValue,#KEY_C
	jmp	_GetKeyEnd
		
_KEY_D:	
	cjne	a,#0x65,_KEY_ERROR			; KEY_D
	mov	nKeyValue,#KEY_D
	jmp	_GetKeyEnd
		
_KEY_ERROR:
	mov	nKeyValue,#KEY_ERROR	; KEY_ERROR
								
_GetKeyEnd:
			
	ret
	;---------------------------------		
		
;------------------------------------------------------------------------------
; Function Name    	: KeyTransact
; Description      	: per 10ms Scan KeyBoard once and deal with keyValue
; Input       		: 
; Output       		: 
; Effect       		: 
; Create by        	: Cloud Zhou
; Last modified by 	: 
;------------------------------------------------------------------------------           
KeyTransact:   
	mov	a,nKeyBoardState
	cjne	a,#KB_IDLESTATE,_KeyTransact1
	jmp	_KeyPressState				; start is Idle 

_KeyTransact1:
	cjne	a,#KB_KEYPRESSSTATE,_KeyTranscat2
	jmp	_WaitFreeKeyState			; start is key press, and wait next key and free 
	
_KeyTranscat2:

	jmp	_FreeKeyState	
	;---------------------------

;********************************************************************
; State Name     	  	: _KeyPressState
; Description     	 	: if one key is press, it first in this state
; Create by        		: Cloud zhou
; Last modified by 		: 
;********************************************************************
_KeyPressState:
	setb	bKeyPressFlag						; set enable scan next key
	mov	nCountTime,#0x01					; set countTime is 1
	mov	nFirstKey,nKeyValue					; save the Firstkey value
	mov	nKeyBoardState,#KB_KEYPRESSSTATE 	; change state KB_KEYPRESSSTATE

	ret 
	;---------------------

;********************************************************************
; State Name     	  	: _KeyPressState
; Description     	 	: if one key is press, it first in this state
; Create by        		: Cloud zhou
; Last modified by 		: 
;********************************************************************
_WaitFreeKeyState:
	setb	bKeyPressFlag							; set enable scan next key
	mov	a,nKeyValue
	cjne	a,#NOKEY, _WaitFreeKeyState1		
	jmp	_WaitFreeKeyStateEnd1					; if keyVlue = NoKey, end this state

_WaitFreeKeyState1:
	cjne	a,#KEY_SHIFT,_WaitFreeKeyState2
	jmp	_WaitFreeKeyStateEnd1

_WaitFreeKeyState2:
	cjne	a,nFirstKey,_WaitFreeKeyStateEnd2		; if KeyValue <> First key end
	inc	nCountTime
	jb	bKeyPress1SecFlag,_WaitFreeKeyState3	; has't 1Second ?
	mov	a,nCountTime
	cjne	a,#100,_WaitFreeKeyStateNext			; wait 1 Second,
	call	ExectuPressKey							; 1's ,anc call exectu to action the key
	setb	bKeyPress1SecFlag
	mov	nCountTime,#0x00						; clear count time
	jmp	_WaitFreeKeyStateNext	
	
_WaitFreeKeyState3:	
	mov	a,nCountTime
	cjne	a,#50,_WaitFreeKeyStateNext				; wait 0.5 Second	
	call	ExectuPressKey						
	mov	nCountTime,#0x00
	jmp	_WaitFreeKeyStateNext	

_WaitFreeKeyStateEnd1:
	mov	nKeyBoardState,#KB_FREESTATE
	
	ret
	
_WaitFreeKeyStateEnd2:
	mov	nKeyBoardState,#KB_IDLESTATE			; if KeyValue <> First key end, and state in Idle
	
	ret
	
_WaitFreeKeyStateNext:

	ret
	;--------------------------------

;********************************************************************
; State Name     	  	: _KeyPressState
; Description     	 	: if one key is press, it first in this state
; Create by        		: Cloud zhou
; Last modified by 		: 
	;********************************************************************
_FreeKeyState:
	mov	a,nCountTime
	cjne	a,#0x01,_FreeKeyState1
	jmp	_FreeKeyState2		
		
_FreeKeyState1:
	call	ExectuPressKey					; exectu the keyvalue

_FreeKeyState2:
	mov	nCountTime,#0x00				; clear counter time
	mov	nFirstKey,#NOKEY				; clear First key value
	mov	nKeyBoardState,#KB_IDLESTATE	; change state to idle
	clr	bKeyPressFlag					; stop keyBoard scan
	clr	bKeyPress1SecFlag				; clr bkeyPress1Sec flag
	
	ret
	;------------------------------

;------------------------------------------------------------------------------
; Function Name    	: KeyTransact
; Description      	: per 10ms Scan KeyBoard once and deal with keyValue
; Input       		: 
; Output       		: 
; Effect       		: 
; Create by        	: Cloud Zhou
; Last modified by 	: 
;------------------------------------------------------------------------------           
ExectuPressKey:
	mov	a,nFirstKey							; scan have the key press
	cjne	a,#NOKEY,_ExectuPressKey1
	ret											; no key press, jamp Idle state

⌨️ 快捷键说明

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