Перейти к содержанию

Настройка Кнопок Для Электронных Часов


Рекомендуемые сообщения

Добрый вечер!

Задали сделать электронные часы с будильником, часы собрала, все работает, но не знаю как настраивать кнопки в ассемблере. Так как в этом деле я новичок, не все получается, и не во всем разбираюсь.

Ниже представлен сам код(все работает):

.include "m16def.inc"

.equ Displ_Segm = PortA

.equ Displ_Rasr = PortD

.def second= R23

.def min=R24

.def chas=R25

.org $000

jmp Begin

.org $00A

jmp T2_Interrupt

Begin:

ldi R16,low(RAMEND)

out spl,R16

ldi R16,high(RAMEND)

out sph,R16

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ldi R16,0b11111111

out DDRD,R16

out DDRA,R16

ldi R16,0b00111110

out PortC,R16

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ldi R16,0b00000101

out TCCR2,R16

ldi R16,0b00001000

out ASSR,R16

ldi R16, 0b01000000

out TIMSK, R16

sei

Ldi R16,0b00000001

out PortC,R16

ldi second,1

Main:

mov R16,second

clr R17

call Bin_BCD

call Coder

mov R2,R16

mov R16,R17

call Coder

mov R3,R16

ldi R16,0b01000000

mov R4,R16

mov R7,R16

mov R16,min

clr R17

call Bin_BCD

call Coder

mov R5,R16

mov R16,R17

call Coder

mov R6,R16

mov R16,chas

clr R17

call Bin_BCD

call Coder

mov R8,R16

mov R16,R17

call Coder

mov R9,R16

jmp Main

Bin_BCD:

ldi R18,10

sub R16,R18

brmi edinicy

inc R17

jmp Bin_BCD

edinicy:

add R16,R18

ret

Coder:

ldi ZL,Low(2*Table)

ldi ZH,High(2*Table)

clc

add ZL,R16

clr R16

adc ZH,R16

lpm R16,Z

ret

T2_Interrupt:

inc second

cpi second,60

breq count_min

reti

count_min:

inc min

clr second

cpi min,60

breq count_chas

reti

count_chas:

inc chas

clr min

cpi chas,24

breq new_day

reti

new_day:

clr chas

reti

Table:

.db 0b00111111, 0b00000110, 0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b11111111,0b01101111

Перейдем к самим кнопкам, кнопок всего 5:

1 кнопка - выбор часы/будильник (порт С2)

2 кнопка - выбор минуты/часы (порт С3)

3 кнопка - увеличение(+) (порт С4)

4 кнопка - уменьшение(-) (порт С5)

5 кнопка - вкл/выкл. будильника (порт С1)

sbis PinC, 2

jmp up: //увеличение

sbis PinC, 3

jmp round: //уменьшение

sbis PinC, 4

jmp right: //вправо

sbis PinC, 5

jmp left: //влево

Дальше не знаю как делать

часы минуты секунды

-->

<--

при нажатии одного раза переход в минуты, 2 раза переход на часы и т.д.

R22 - счетчик

При оказании помощи буду благодарна))

Изменено пользователем Тина37
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Тина37, как-то размыто вопрос поставлен.

Для начала - какой контроллер? Судя по коду - 51 серии.

Что именно Вам неясно? Вопрос "как настраивать кнопки в ассемблере" тоже мутный.

Задайте правильно вопрос, кто-то может и ответит.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Добрый вечер!

Задали сделать электронные часы с будильником, часы собрала, все работает, но не знаю как настраивать кнопки в ассемблере. Так как в этом деле я новичок, не все получается, и не во всем разбираюсь.

Ниже представлен сам код(все работает):

Ой как много написано и во всём это надо же понимать :unknw:
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Тина37

Чтобы разговор был более предметным

-приведите схему

-приведите полный

код

, обрамленный тегом CODE

Сейчас часы начинают работать со 2-й секунды, ничего не выводя на индикацию.

Тип контроллера задан или это Ваш выбор?

Посмотрите эту ветку, может пригодится.

Изменено пользователем akl
Ссылка на комментарий
Поделиться на другие сайты

1. Контроллер Atmega16.

2. К сожелению не могу привессти схему, т.к. файл не загружается

Но по схеме 1 кнопка - выбор часы/будильник (порт С2)

2 кнопка - выбор минуты/часы (порт С3)

3 кнопка - увеличение(+) (порт С4)

4 кнопка - уменьшение(-) (порт С5)

5 кнопка - вкл/выкл. будильника (порт С1)

3. Про правильность вопроса

Надо отслеживать нажатие кнопки, т. е. изменение состояния выводов порта из 1 в 0 ( 1-нажата кнопка, 0- не нажата)

Чтобы отрабатывать управление часами/будильником надо вводить дополнительные переменные: будильник вкл/выкл, указатель на корректируемое значение и т. д..

Например:

В режиме часов переменная CORR, определяющая корректируемое значение равна 0.

При нажатии кнопки ВЛЕВО часы переводятся в режим коррекции секунд, переменная CORR = 1. Для индикации этого режима можно каждую вторую секунду гасить индикаторы корректируемых разрядов.

Если нажимают УВЕЛИЧИТЬ – увеличиваем значение секунд, УМЕНЬШИТЬ – уменьшаем значение секунд, ВЛЕВО – увеличиваем переменную CORR, ВПРАВО – уменьшаем переменную CORR.

Если CORR = 1, корректируем секунды, CORR = 2 – минуты, CORR = 3 – часы.

Я не знаю как это все в ассемблере написать.

За ошибки в определениях, и т.д. извиняюсь

4. ниже приведен сам код

.include "m16def.inc"

.equ Displ_Segm = PortA
.equ Displ_Rasr = PortD
.def second= R23
.def min=R24
.def chas=R25



.org $000
jmp Begin
.org $00A
jmp T2_Interrupt

Begin:
ldi R16,low(RAMEND)
out spl,R16
ldi R16,high(RAMEND)
out sph,R16
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ldi R16,0b11111111
out DDRD,R16
out DDRA,R16
ldi R16,0b00111110
out PortC,R16
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ldi R16,0b00000101
out TCCR2,R16

ldi R16,0b00001000
out ASSR,R16

ldi R16, 0b01000000
out TIMSK, R16
sei
Ldi R16,0b00000001
out PortC,R16

ldi second,1

Main:

mov R16,second
clr R17
call Bin_BCD
call Coder
mov R2,R16
mov R16,R17
call Coder
mov R3,R16
ldi R16,0b01000000
mov R4,R16
mov R7,R16
mov R16,min
clr R17
call Bin_BCD
call Coder
mov R5,R16
mov R16,R17
call Coder
mov R6,R16
mov R16,chas
clr R17
call Bin_BCD
call Coder
mov R8,R16
mov R16,R17
call Coder
mov R9,R16

jmp Main

Bin_BCD:
ldi R18,10
sub R16,R18
brmi edinicy
inc R17
jmp Bin_BCD
edinicy:
add R16,R18
ret

Coder:
ldi ZL,Low(2*Table)
ldi ZH,High(2*Table)
clc
add ZL,R16
clr R16
adc ZH,R16
lpm R16,Z
ret

T2_Interrupt:
inc second
cpi second,60
breq count_min
reti
count_min:
inc min
clr second
cpi min,60
breq count_chas
reti
count_chas:
inc chas
clr min
cpi chas,24
breq new_day
reti
new_day:
clr chas
reti

Table:
.db 0b00111111, 0b00000110, 0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b11111111,0b01101111

sbis PinC, 2
jmp up: //увеличение
sbis PinC, 3
jmp round: //уменьшение
sbis PinC, 4
jmp right: //вправо
sbis PinC, 5
jmp left: //влево

Изменено пользователем Тина37
Ссылка на комментарий
Поделиться на другие сайты

2. К сожелению не могу привессти схему, т.к. файл не загружается
Читайте Правила. Какие картинки и файлы можно загружать.

Извините, я удаляюсь. Староват для современных МК. И лень изучать.

Программу, как Вы сейчас выкладываете, лучше передать в прикрепленном файле в простейшем формате. Запакуйте тот файл, да и прикрепите.

Схема нужна для понимания того, что Вы хотите. Словесное описание - это хорошо. Но схема, ее наглядность в данном случае позволит гораздо быстрее понять суть работы прибора.

Еще не помешала бы блок-схема алгоритма работы системы. Тогда для помогающего существенно упрощается задача.

Не знаю, откликнется ли кто еще. Вот akl сразу понял, что к чему. Я же могу только по алгоритму совместно со схемой какие-то корректировки выдать.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...