Я хочу ввести 2 цифры в ATmega32 с клавиатуры.
По моему коду профессора. Этот проект довольно сложен для меня, я не до конца понимаю код.
Вопрос:
С помощью кнопок введите два шестнадцатеричных числа и сохраните их в R20
, затем с помощью 7-сегментных светодиодов отобразите числа 1
с и 0
с.
Это не полный код вопроса:
только для клавиатуры, это часть, которую я застрял.
Проблема состоит в том, чтобы ввести два числа, так как код работает только для одного ввода. Если я нажму второй раз, предыдущий номер будет удален.
Как я могу решить эту проблему?
.include "m32def.inc"
.EQU KEY_PORT = PORTA
.EQU KEY_PIN = PINA
.EQU KEY_DDR = DDRA
LDI R20,HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
LDI R21, 0xFF
OUT DDRC, R21
LDI R20, 0xF0
OUT KEY_DDR,R20
GROUND_ALL_ROWS:
LDI R20,0x0F
OUT KEY_PORT, R20
WAIT_FOR_RELEASE:
NOP
IN R21, KEY_PIN
ANDI R21, 0x0F
CPI R21, 0x0F
BRNE WAIT_FOR_RELEASE
WAIT_FOR_KEY:
NOP
IN R21, KEY_PIN
ANDI R21, 0x0F
CPI R21, 0x0F
BREQ WAIT_FOR_KEY
CALL WAIT15MS
IN R21,KEY_PIN
ANDI R21, 0x0F
CPI R21, 0x0F
BREQ WAIT_FOR_KEY
LDI R21, 0b01111111
OUT KEY_PORT, R21
NOP
IN R21, KEY_PIN
ANDI R21,0x0F
CPI R21, 0x0F
BRNE COL1
LDI R21, 0b10111111
OUT KEY_PORT, R21
NOP
IN R21, KEY_PIN
ANDI R21, 0x0F
CPI R21,0x0F
BRNE COL2
LDI R21,0b11011111
OUT KEY_PORT, R21
NOP
IN R21, KEY_PIN
ANDI R21, 0x0F
CPI R21, 0x0F
BRNE COL3
LDI R21,0b11101111
OUT KEY_PORT, R21
NOP
IN R21, KEY_PIN
ANDI R21, 0x0F
CPI R21, 0x0F
BRNE COL4
COL1:
LDI R30,LOW( KCODE0<<1)
LDI R31, HIGH( KCODE0<<1)
RJMP FIND
COL2:
LDI R30,LOW( KCODE1<<1)
LDI R31, HIGH( KCODE1<<1)
RJMP FIND
COL3:
LDI R30,LOW( KCODE2<<1)
LDI R31, HIGH( KCODE2<<1)
RJMP FIND
COL4:
LDI R30,LOW( KCODE3<<1)
LDI R31, HIGH( KCODE3<<1)
RJMP FIND
MATCH:
LPM R20,Z
OUT PORTC,R20
RJMP GROUND_ALL_ROWS
FIND:
LSR R21
BRCC MATCH
LPM R20,Z+
RJMP FIND
WAIT15MS:
LDI R16,64
DELAY1: LDI R17,200
DELAY2: LDI R18,19
DELAY3: NOP
DEC R18
BRNE DELAY3
DEC R17
BRNE DELAY2
DEC R16
BRNE DELAY1
RET
.ORG 0x300
KCODE0: .DB '0','4','8','C'
KCODE1: .DB '1','5','9','D'
KCODE2: .DB '2','6','A','E'
KCODE3: .DB '3','7','B','F'
Этот код предназначен для поиска матрицы на клавиатуре, но я использую proteus для имитации кода: