1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 19
1

Настройка кнопок для электронных часов

22.12.2012, 00:35. Показов 3884. Ответов 4
Метки нет (Все метки)

Добрый вечер!
Задали сделать электронные часы с будильником, часы собрала, все работает, но не знаю как настраивать кнопки в ассемблере. Так как в этом деле я новичок, не все получается, и не во всем разбираюсь.
Ниже представлен сам код(все работает):

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
.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:
Assembler
1
.db 0b00111111, 0b00000110, 0b01011011,0b01001111,0b01100110,0b01101101,0b01111101,0b00000111,0b11111111,0b01101111
Перейдем к самим кнопкам, кнопок всего 5:
1 кнопка - выбор часы/будильник (порт С2)
2 кнопка - выбор минуты/часы (порт С3)
3 кнопка - увеличение(+) (порт С4)
4 кнопка - уменьшение(-) (порт С5)
5 кнопка - вкл/выкл. будильника (порт С1)

Assembler
1
2
3
4
5
6
7
8
sbis PinC, 2
jmp  up:   //увеличение
sbis PinC, 3  
jmp round: //уменьшение
sbis PinC, 4
jmp right: //вправо
sbis PinC, 5
jmp left: //влево
Дальше не знаю как делать

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

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

При оказании помощи буду благодарна))
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2012, 00:35
Ответы с готовыми решениями:

Показания электронных часов
Даны показания электронных часов и промежуток времени в виде часы минуты секунды. Определите...

Показания электронных часов (2) :c
Даны показания электронных часов в течение суток, которые определяют начало и конец промежутка...

Текущее показание электронных часов
Помогите с задачей по лабе,просто не знаю как сделать,ведь нужно чтобы время конвертировалось.....

Текущие показатели электронных часов
Текущие показатели электронных часов m часов (0&lt;=m&lt;=23), n мин (0&lt;=n&lt;=59). Какое время будут...

4
35 / 35 / 1
Регистрация: 07.02.2012
Сообщений: 79
22.12.2012, 10:08 2
Лучший ответ Сообщение было отмечено как решение

Решение

Вам надо отслеживать нажатие кнопки, т. е. изменение состояния выводов порта из 1 в 0 (судя по применению команды sbis). Иначе, пока нажата кнопка действие будет выполнено многократно.
Значит, надо хранить предыдущее значение кнопок. Прочитав текущее, выделить те разряды, в которых произошло изменение из 1 в 0.
Пример:
Assembler
1
2
3
4
5
6
7
    IN      R16,PINC        ;читаем состояние кнопок
    COM     R16             ;для упрощения считаем нажатие за 1
    ANDI    R16,00111110b   ;выделяем только нужные разряды
    MOV     R17,R16
    EOR     R16,R18         ;определяем, где изменились
    AND     R16,R17         ;оставляем только те, где кнопки нажаты
    MOV     R18,R17         ;обновляем предыдущее состояние
В регистре R16 в соответствующих разрядах будут находиться 1 только в момент нажатия кнопки. В регистре R18 хранится предыдущее состояние кнопок.
(Ассемблер из IAR, есть отличия от используемого Вами).

Опрос кнопок оформите подпрограммой и вызывайте из main.

Чтобы отрабатывать управление часами/будильником надо вводить дополнительные переменные: будильник вкл/выкл, указатель на корректируемое значение и т. д..
Например:
В режиме часов переменная CORR, определяющая корректируемое значение равна 0.
При нажатии кнопки ВЛЕВО часы переводятся в режим коррекции секунд, переменная CORR = 1. Для индикации этого режима можно каждую вторую секунду гасить индикаторы корректируемых разрядов.
Если нажимают УВЕЛИЧИТЬ – увеличиваем значение секунд, УМЕНЬШИТЬ – уменьшаем значение секунд, ВЛЕВО – увеличиваем переменную CORR, ВПРАВО – уменьшаем переменную CORR.
Если CORR = 1, корректируем секунды, CORR = 2 – минуты, CORR = 3 – часы.

Аналогично корректируем время будильника.

Механические кнопки при нажатии «дребезжат», т.е. замыкаются/размыкаются в течение нескольких миллисекунд. Простейшим способом избавится от этого, является опрос кнопок с периодом, превышающим время дребезга.
3
1 / 1 / 0
Регистрация: 05.05.2011
Сообщений: 19
23.12.2012, 22:36  [ТС] 3
а вы смогли бы все это написать в форме кода в ассемблере?
0
35 / 35 / 1
Регистрация: 07.02.2012
Сообщений: 79
24.12.2012, 16:30 4
Если Вас устроит в конце недели, то помогу.
0
35 / 35 / 1
Регистрация: 07.02.2012
Сообщений: 79
28.12.2012, 15:09 5
Tina37, пришлите в личку Ваш mail.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.12.2012, 15:09
Помогаю со студенческими работами здесь

Имитировать на экране работу электронных часов
Здравствуйте, помогите реализовать программу. Имитировать на экране работу электронных часов.

Создание электронных часов в формате exe
Помогите создать электронные часы и сохранить их как exe файл, есть трудности с преобразованием в...

Число совпадений минут и часов на электронных часах
Время на электронных часах записывается в виде двух чисел: часы (от 0 до 23) и минуты (от 0 до 59)....

Получить на экране изображение действующих электронных часов, показывающих текущее время
3) Получить на экране изображение действующих электронных часов, показывающих текущее время....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru