Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 5

Intel8051: ассемблер, кнопки, индикаторы

29.05.2013, 21:49. Показов 2942. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
доброго времени суток) появилась задача: программирование контроллера клавиатуры из 16 кнопок (4×4), код кнопки выводится на двухразрядный семи сегментный индикатор. все это на основе микросхемы intel8051.
к задаче прилагался нерабочий код. путем изменений получилось вот так:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
ORG 0000H   ; смещение при загрузке кода будет равно 0
    LJMP    SBROS   ; переход на сброс
 
    ORG 000BH   ; смещение на 11 байт
    LJMP    TIME_00 ; переход на обработку переполнения таймера
 
    ORG 0100H   ; пропускаем первые 256 байт, которые отводятся под блок PSP
    
DIGITS: DB  03fh,06h,05bh,04fh,066h,06dh,07dh,07h,07fh,06fh ; цифры на индикаторе от 0 до 9
 
SBROS:  CLR TCON.4      ; остановка таймера 
    MOV R3, #00H    ; обнуляем R3
    MOV TMOD, #1    ; запускаем т/с в режиме таймера
    MOV P1, #00H    ; обнуляем P1
    MOV P3, #00H    ; обнуляем P3 
 
START:  CLR A   ; очищаем аккумулятор
    CLR C   ; обнуляем флаг переноса
    MOV R5, #10H    ; Нач. значение для перебора строк
    MOV R1, #004H   ; счетчик декрементов при вычислении смещений регистра строк
 
; CJNE - сравнивает значения первых двх операндов и выполняет ветвление, если операнды не равны   
READ_ROW:   CJNE    R4, #0, READ_ROW;  проверка не нажата ли предыдущая кнопкаMOV A, R5
    RRC A   ; Сдвиг содержимого аккумулятора вправо. седьмой бит = С
    JC  START   ; если установлен перенос (с=1), переход на метку старт    
    DEC R1  ; уменьшаем R1 - прошла обработка одной строки, переход на следующую
    MOV R5, A   ; в R5 помещаем следующую строку
    MOV P0, R5  ;подсветка очередной строки
 
    MOV A, P1   ;считывание столбцов 
    JZ  READ_ROW    ; переход, если содержимое аккумулятора равно 0
    
 
    MOV R4, #1      ; нажата ли кнопка в данной строке
    MOV DPTR, #DIGITS
 
    MOV R2, #0      ;счётчик инкрементов для вычисления номера столбца   
NEXT:   INC R2
    RRC A   ; Сдвиг содержимого аккумулятора вправо через флаг переноса
    JNC NEXT    ; если установлен перенос, переход на метку next
    ; JB - если бит равен нулю. вычисление первой цифры номера кнопки
    JB P1.0, OUT1_0      
        JB P1.1, OUT1_0
        JB P1.3, OUT1_1
        JB P1.2, OUT1_0
 
OUT1_1: MOV P2, #00000110B ; код единицы
    LJMP    OUT2
OUT1_0: MOV P2, #00111111B ; код нуля
 
OUT2:   MOV A, R1       ;вычисление второй цифры номера кнопки
    MOV B, #004H    ; число смещений
    MUL AB
    DEC R2
    ADD A, R2
 
    MOVC    A, @A+DPTR  ; загружает аккумулятор константой из памяти программы
    MOV P3, A   ; выдает константу в индикатор - P3
    
    MOV TH0, #76
    MOV TL0, #01
    MOV IE, #10000010B  ;   прерывания разрешены для T/C0
    SETB    TCON.4
    LJMP    READ_ROW
 
TIME_00:    INC R3  ;обработки прерывания по переполнению таймера 0
    CJNE    R3, #20, CYCLE  ;ожидание 1 сек
 
    CLR TCON.4      ;остановка таймер 0
    MOV P2, #0      ;погашение индикатора порта 2
    MOV P3, #0      ;погашение индикатора порта 3
    MOV R4, #0      ;сброс флажка индикации предыдущей кнопки
    MOV R3, #00H
CYCLE:  RETI
 
    END
при запуске программы происходит опрос клавиатуры построчно. но если кнопка нажата, ничего, к сожалению, не происходит соответственно, не получается определить какая именно кнопка нажата, чтобы вывести ее номер на индикатор..
помогите, кто чем может)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.05.2013, 21:49
Ответы с готовыми решениями:

Инициализация кнопки на PIC16F874 ассемблер
Доброго всем времени суток. Я в программировании - новичок. Необходимо реализовать в ассемблере опрос кнопок и других портов и пинов. ...

Edsim51( Intel8051) АЦП
Добрый день! Ввод информации с АЦП и его запись. Кто может помочь почему не работает до конца не пойму(зацикливание на JB P3.2), что...

Edsim51( Intel8051) Keypad
Доброго времени суток! Появился такой вопрос, скан-код нажатой клавиши и ASCII это одно и тоже? Если нет, то нет ни у кого примера...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2013, 21:49
Помогаю со студенческими работами здесь

Edsim51( Intel8051) Keypad
Доброго времени суток,вопрос такой. Может кто то объяснить как происходит опрос Keypad и как определяется скан-код нажатой клавиши. ...

Разъём на мат. плате (индикаторы и кнопки)
Приветствую. Вопрос таков что за разъём MSG ? в инете кое-где написано что это индикатор питания, тогда возникает ещё один вопрос, зачем...

не могу подключить к материнке ECS NFORCE4-A939 кнопки включения и индикаторы
Помогите плиз немогу подключить кнопки включения, перезагрузки, индикаторы к материнки!! материнка у меня ECS NFORCE4-A939

СМА Indesit IWB5083(CSI)/Y, не реагирует на кнопки, через 3-4 хаотично мигают индикаторы
Всем добрый день. Попалась в ремонт данная СМА с модулем Аркадия, при включении Сма в розетку не реагирует на кнопки и на дисплее...

Как складывать числа с переполнением на intel8051
Проблема следующая, нужно вычислить сумму например 240 + 45, а потом к этому числу в данном случае 285 + 44, как это организовать помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru