Блок клавиатуры
Блок реле
Схема платы блока релепредставлена на рис.24.Управление состоянием реле осуществляется подачей 0 или 1 на соответствующий разряд порта.
Для включения реле на выход порта подается логический 0, тем самым открывая выходной транзистор с открытым коллектором в буферных микросхемах DD2 и DD3. Ток, протекая через катушку реле и открытый транзистор буфера, включает реле и замыкает соответствующий контакт РК. Контакты РК могут быть использованы для включения внешних исполнительных устройств.
Для выключения реле на выход порта подается логическая 1, тем самым закрывая соответствующий выходной транзистор в буферных микросхемах DD2 и DD3.Контакты реле РК размыкаются, выключая внешние устройства. Диоды VD служат для защиты транзисторов буферных каскадов от ЭДС самоиндукции, возникающей при разрыве цепи питания катушки реле.
Задача.Включить реле 2 и выключить реле 6.
Фрагмент программы, реализующей указанную задачу:
CLR P1.1 ; включить реле 2
SETB P1.5 ; выключить реле 6
Рис.24.Блок реле
Схема платы блока клавиатурыпредставлена на рис.26. К контактам порта Р0.0-Р0.3 подключены линии сканирования, Р0.4-Р0.7 – линии считывания. Чтобы узнать состояние какой-либо клавиши, необходимо на линии сканирования выставить сканирующий код. Для первого ряда код 1110, для второго ряда 1101, для третьего ряда 1011, для четвертого ряда 0111.
Если клавиша не нажата (например, клавиша А), напряжение источника питания через резисторы R7 и R6 поступает на вход антидребезговой схемы (что соответствует логической 1), собранной на двух инверторах DD1.1 и DD1.2, с выхода которой логическая 1 поступает на соответствующий вход микроконтроллера.
Если клавиша нажата, то точка соединения R7 и R6 через открытый выходной транзистор выхода Р0.0 (поскольку при сканировании первого ряда на этот выход подан логический 0) замыкается на корпус, ее потенциал становится близким к нулю, что микросхемой DD1.1 воспринимается как логический 0. С выхода антидребезговой схемы на вход Р0.7 поступает логический 0.
В каждой линии считывания предусмотрена антдребезговая схема (рис.25).
Рис.25. Принцип работы антидребезговой схемы
В момент нажатия клавиши возникает дребезг – хаотичное изменение напряжения. При нажатии клавиши А потенциал точки а (а следовательно и точки b) начинает снижаться (через открытый выходной транзистор выхода Р0.0 она подключается на корпус). В точке b cнижение потенциала происходит по экспоненциальному закону (сглаживаются шумы) за счет заряда конденсатора С7.
При снижении потенциала точки b до 0,4В (уровень логического 0) инверторы срабатывают и на их выходе появляется логический 0. Постоянная времени цепи R6C7 подобрана таким образом, чтобы время заряда емкости было больше или равно времени дребезга. На входе и выходе инверторов устанавливается логический 0, емкость разряжается.
При размыкании кнопки наблюдается аналогичная ситуация, инверторы срабатывают при увеличении потенциала точки b до 2,4В.
Задача.Проверить состояние клавиш 1, 2, 5 и В. При нажатии клавиши выполнить заданные действия. Если нет нажатых клавиш, то повторить опрос клавиш.
Фрагмент программы, реализующей указанную задачу:
OPROS: MOV P0,#11111110B ; выдать сканкод 1 ряда
LCALL PAUZA ; подпрограмма задержки
JNB P0.4,MET1 ; перейти на метку МЕТ1, если
; нажата кнопка 1
JNB P0.5,MET2 ; перейти на метку МЕТ2, если
;нажата кнопка 2
MOV P0,#11111101B ; выдать сканкод 2 ряда
LCALL PAUZA ; подпрограмма задержки
JNB P0.5,MET3 ; перейти на метку МЕТ3, если
; нажата кнопка 5
JNB P0.7,MET4 ; перейти на метку МЕТ4, если
; нажата кнопка В
LJMP OPROS ; если не нажата ни одна клавиша,
; то повторить опрос клавиатуры;
MET1: ; команды, выполняемые при нажатии кнопки 1
LJMP OPROS
MET2: ; команды, выполняемые при нажатии кнопки 2
LJMP OPROS
MET3: ; команды, выполняемые при нажатии кнопки 5
LJMP OPROS
MET4: команды, выполняемые при нажатии кнопки В
LJMP OPROS
Подпрограмма задержки используется для ожидания срабатывания антидребезговой схемы.
PAUZA: MOV R0, #20h ;загрузить в регистр R0 число 20h
M0: MOV R1, #FFh ;загрузить в регистр R0 число FFh
M1: DJNZ R1, M1 ; уменьшить на 1 содержимое реги-
; стра R1 и перейти, если не 0
DJNZ R0, M0 ; уменьшить на 1 содержимое реги-
; стра R0 и перейти, если не 0
RET ; выход из подпрограммы
Рис.26Блок клавиатуры