📄 dtfmsend.asm
字号:
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 + -