Помогите пожалуйста!!!!!!!!!!!!! Уже сорвало крышу!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено new_student 28 июня 2004 г. 12:27

Имеется клавиатура 3 строки на 4 столба, схема подключения:
PC0 PC4 PC5 PC6
| | | |
PA5--[5]--[6]--[U]--[D]
| | | |
PA6--[1]--[2]--[3]--[4]
| | | |
PA7--[M]--[S]--[+]--[-]

Строки заведены на прерывание INT1 (17 нога процессора AT90S8535)

Имеется таблица переходов:

KeyTable:

;Эти кнопки подключены к РА6

rjmp kbObject1 ;0
rjmp kbObject2 ;1
rjmp kbObject3 ;2
rjmp kbObject4 ;3
;Эти подключены к РА5

rjmp kbObject5 ;4
rjmp kbInject6 ;5
rjmp kbU ;6
rjmp kbD ;7

;Эти подключены к РА7
rjmp kbMode ;8
rjmp kbOkMode ;8
rjmp kbPlus ;a
rjmp kbMinus ;b

;Это просто вместо 4 строки стандартной матрицы
rjmp Key_ret ;c
rjmp Key_ret ;d
rjmp Key_ret ;e
rjmp Key_ret ;f


Key_ret:
out SREG,sregTmp
reti

После возникновения прерывания по нажатию кнопки попадаем на процедуру


IntKey:
in sregTmp, SREG
rcall scanKey
rcall Beep
IntKey_m1:
clr ZH
ldi ZL,KeyTable ; Табличный переход
add ZL,currKey
ijmp

Процедура сканирования Кнопок по колонкам

scanKey:
push temp
push temp1
rcall pause
rcall pause
rcall pause
rcall pause
ldi currKey,-1
in temp1,portc
ori temp1,$f0
out portc,temp1
cbi portc,РС0
rcall scanLine
brne scanKey_m2 ; сканирование 0-го столба currKey=0
sbi portc,РС0
cbi portc,PC4
rcall scanLine
brne scanKey_m2 ; сканирование 1-го столба currKey=1
sbi portc,PC4
cbi portc,PC5
rcall scanLine
brne scanKey_m2 ; сканирование 2-го столба currKey=2
sbi portc,PC5
cbi portc,PC6
rcall scanLine
brne scanKey_m2 ; сканирование 3-го столба currKey=3
sbi portc,PC6
rcall scanLine

Если не учитывать строку РА5 то эта процедура работает т.е осуществляется переход и определяются кнопки я это вижу на индикаторе,
но т.к. строка РА5 не задействавана то нажатие на кнопки [5],[6],[U],
[D] просто дублирует работу кнопок [1],[2],[3],[4]
scanKey_m2:
rcall lowLevelKey
andi currKey, $0f
sbr currKey, $08
sbic PINA, PA7
cbr currKey, $08
pop temp1
pop temp
ret

Если ввожу обработку кнопок строки РА5 процедура ниже

scanKey_m2:
rcall lowLevelKey
andi currKey, $0f
cbr currKey, $04
sbr currKey, $08
sbic PINA, PA7
cbr currKey, $08
sbic PINA,PA6
rcall scanLine3
pop temp1
pop temp
ret


scanLine3:
cbr currKey,$08
sbr currKey,$04
ret

Работают кнопки [1],[2],[3],[4]-строки РА6 и [5],[6],[U],[D] -
строки РА5 а кнопки строки РА7 дублируют работу кнопок строки РА6

!!!!!!!!!!!!!!!!!!!!!!!Как организовать чтобы все работало!!!!!!!! Другие процедуры на которые есть ссылки

scanLine:
rcall pause
rcall pause
rcall pause
rcall pause
inc currKey
in temp1,PINA
andi temp1,$E0 ;$Е0=0b11100000 т.е. три единицы
; это РА5,РА6,Ра7
cpi temp1,$E0 ; если нет нажатий PA5,PA6,PA7=1
ret

lowLevelKey:

cbi portc,PC6
cbi portc,PC5
cbi portc,PC4
cbi portc,PC0
ret

Помогите, пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru