Skip to content

Instantly share code, notes, and snippets.

@clive819
Created November 30, 2016 08:39
Show Gist options
  • Save clive819/7994f5292ba6a7d4fe2ce65938eecede to your computer and use it in GitHub Desktop.
Save clive819/7994f5292ba6a7d4fe2ce65938eecede to your computer and use it in GitHub Desktop.
port4 EQU 0E8h
shift7LED EQU 0FEh
dispBuf EQU 40h
keyBuf1 EQU 44h
keyBuf2 EQU 45h
keyCode EQU 46h
decBuf0 EQU 50h
t0Buf EQU 49h
t0Count EQU 10
decBuf1 EQU 4Ch
t1Buf EQU 4Bh
t1Count EQU 20
bitflag0 BIT 00h
bitflag1 BIT 01h
keyCheck EQU 47h
debCounter EQU 48h
debTimes EQU 60
org 0000h
LJMP main
org 000bh
LJMP T0_ISR
org 001bh
LJMP T1_ISR
main:
MOV IE, #10001010b
MOV TMOD, #00010001b
SETB TR0
SETB TR1
MOV t0Buf, #t0Count
MOV decBuf0, #0
MOV t1Buf, #t1Count
MOV decBuf1, #0
CLR bitflag0
CLR bitflag1
MOV a, #0
ACALL setdigits
MOV A, #0ffh
MOV P2, a
MOV P3, a
MOV keyBuf1, #0ffh
MOV keyBuf2, #0ffh
MOV keyCode, #0
MOV dptr, #led_table
reset:
MOV r0, #dispBuf
MOV a, #shift7LED
loop:
MOV port4, A
ACALL covled
ACALL getkeycode
ACALL DELAYKEYDEBOUNCE
inc r0
RL A
jb ACC.4, loop
Sjmp reset
Getkeycode:
PUSH 0E0h
MOV a, p2
MOV keyBuf1, a
MOV a, p3
MOV keyBuf2, a
MOV a, keyBuf2
cjne a, #0ffh, nextcode0
MOV a, keyBuf1
MOV r2, #0
nextcode1:
jnb 0e0h, gotkeycode
inc r2
rr a
cjne r2, #8, nextcode1
sjmp exitgetkeycode
nextcode0:
MOV a, keyBuf2
MOV r2, #8
nextcode2:
jnb 0e0h, gotkeycode
inc r2
rr a
cjne r2, #16, nextcode2
sjmp exitgetkeycode
gotkeycode:
MOV keyCode, r2
exitgetkeycode:
POP 0E0h
ret
Displaykeycode:
PUSH 0E0h
MOV a, keyCode
MOV dispBuf, a
MOV dispBuf+1, a
MOV dispBuf+2, a
MOV dispBuf+3, a
POP 0E0h
ret
Delay:
MOV r4, #1
delay0: MOV r5, #2
delay1: MOV r6, #100
delay2: MOV r7, #100
delay3: djnz r7, delay3
djnz r6, delay2
djnz r5, delay1
djnz r4, delay0
ret
Covled:
PUSH 0E0h
MOV a, @R0
ANL a, #0fh
MOVC a, @a+dptr
MOV p0, a
POP 0E0h
ret
setdigits:
PUSH 0E0h
MOV 40h,0e0h
MOV 41h,0e0h
MOV 42h,0e0h
MOV 43h,0e0h
POP 0e0h
RET
DELAYKEYDEBOUNCE:
PUSH 0E0h
ACALL DELAY
INC debCounter
MOV R5,debCounter
CJNE R5,#debTimes,DELAYEXIT
MOV debCounter,#0
MOV A,keyCode
CJNE A,#0FFh,HASINPUT
SJMP DELAYEXIT
EXIT4:
MOV keyCheck,keyCode
DELAYEXIT:
POP 0E0h
RET
RESET2:
MOV keyCode,#0FFh
MOV keyCheck,#0FFh
SJMP DELAYEXIT
HASINPUT:
MOV A,keyCheck
CJNE A,keyCode,EXIT4
CJNE A,#0Ch,ISD
SETB bitflag1
SJMP RESET2
ISD:
CJNE A,#0Dh,ISE
CLR bitflag1
SJMP RESET2
ISE:
CJNE A,#0Eh,ISF
SETB bitflag0
SJMP RESET2
ISF:
CJNE A,#0Fh,RESET2
CLR bitflag0
SJMP RESET2
display2decimal0:
PUSH 0E0h
MOV A, decBuf0
MOV B, #10
DIV AB
MOV dispBuf+2, A
MOV dispBuf+3, B
JB bitflag0, decrease
INC decBuf0
MOV A, decBuf0
CJNE A, #100, exit
MOV decBuf0, #0
exit:
POP 0E0h
RET
decrease:
DEC decBuf0
MOV A, decBuf0
CJNE A, #255, exit
MOV decBuf0, #99
SJMP exit
T0_ISR:
PUSH 0E0h
CLR TR0
MOV TH0, #60
MOV TL0, #176
SETB TR0
DEC t0Buf
MOV A, t0Buf
JNZ exit1
MOV t0Buf, #t0Count
ACALL display2decimal0
exit1:
POP 0E0h
RETI
display2decimal1:
PUSH 0E0h
MOV A, decBuf1
MOV B, #10
DIV AB
MOV dispBuf, A
MOV dispBuf+1, B
JB bitflag1, decrease1
INC decBuf1
MOV A, decBuf1
CJNE A, #100, exit2
MOV decBuf1, #0
exit2:
POP 0E0h
RET
decrease1:
DEC decBuf1
MOV A, decBuf1
CJNE A, #255, exit2
MOV decBuf1, #99
SJMP exit2
T1_ISR:
PUSH 0E0h
CLR TR1
MOV TH1, #60
MOV TL1, #176
SETB TR1
DEC t1Buf
MOV A, t1Buf
JNZ exit3
MOV t1Buf, #t1Count
ACALL display2decimal1
exit3:
POP 0E0h
RETI
Led_table:
DB 0c0h
DB 0F9h
DB 0A4h
DB 0B0h
DB 99h
DB 92h
DB 82h
DB 0D8h
DB 80h
DB 90h
DB 88h
DB 83h
DB 0C6h
DB 0A1h
DB 86h
DB 8Eh
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment