
- •Аннотация
- •Техническое задание
- •Содержание
- •Введение
- •Обзор аналогов
- •Описание схемы электрической структурной
- •Описание схемы электрической принципиальной
- •3.1 Выбор элементной базы устройства
- •Микросхема ds1307z.
- •3.2 Принцип работы устройства
- •3.3 Блок питания
- •Описание программной части
- •4.1 Описание языка программирования Си.
- •4.2 Описание среды программирования ImageCraft.
- •4.3 Описание работы программы
- •Заключение
- •Список литературы
4.3 Описание работы программы
При включении питания программа микроконтроллера инициализирует его внутренние ресурсы, микросхему часов реального времени и датчик температуры, читает информацию из EEPROM. Далее начинается основной программный цикл, в котором выполняются следующие действия:
вывод изображения на индикаторы в соответствии с текущим пунктом меню (переменная menu_st) или режимом отображения (переменная view);
опрос датчика температуры;
проверка будильников и проигрывание мелодии в течение заданного промежутка времени в случае их срабатывания;
опрос состояния кнопок с последующим выбором пункта меню (режима отображения, времени/даты, будильников);
при работе с компьютером обработка принятых по USB информационных пакетов, подготовка и отправка ответов;
Процедура intOJsr обработки прерывания от микросхемы часов реального времени DD1 выполняет чтение текущего времени и включение светодиодов HL1, HL2. Они выключаются в основном цикле через полсекунды после включения.
Обработка прерываний по переполнению таймера (процедура timer0_ovfjsr) заключается в обслуживании нескольких программных счетчиков.
По прерыванию по приему UART (uartO_rx_isr) происходит запись принятого байта в массив rxjnas, а по прерыванию uartO_tx_isr – передача UART байта из массива tx mas.
Структура меню часов показана в таблице 3.
Таблица 3
Параметр |
Показания HG3 |
Функции кнопок |
||||
SB1 |
SB2 |
SB3 |
SB4 |
|||
Установка даты и времени |
||||||
Часы |
S-01 |
1 нажатие |
Выход |
Больше |
Меньше |
|
Минуты (М) |
S-02 |
2 нажатия |
||||
Обнуление секунд |
S-03 |
3 нажатия |
||||
Число месяца |
S-04 |
4* |
||||
День недели |
S-05 |
5* |
||||
Месяц (М‘) |
S-06 |
6* |
||||
Год |
|
7* |
||||
Установка будильников |
||||||
Номер будильника |
S-08 |
Меньше |
Выход |
Больше |
1 нажатие |
|
Тип будильника |
S-09 |
2 нажатия |
||||
Час |
S-10 |
3 нажатия |
||||
Минута |
S-11 |
4 нажатия |
||||
Число месяца |
S-12 |
5 нажатий |
||||
Месяц |
S-13 |
6 нажатий |
||||
Режим отображения |
||||||
Часы, минуты |
Секунды |
Переход к установке даты и времени |
Переход к прочим установкам |
1 нажатие |
Переход к установке будильников |
|
Часы, минуты |
Температура |
2 нажатия |
||||
День, месяц |
Год |
3 нажатия |
||||
Часы, минуты |
День, месяц |
4 нажатия |
||||
Прочие установки |
||||||
Выключить светодиоды |
Соответствуют действующему режиму отображения |
Переход к установке даты и времени |
1 нажатие |
Переход к установке режима отображения |
Переход к установке будильников |
|
Пониженная яркость |
2 нажатия |
|||||
Включить светодиоды |
3 нажатия |
|||||
Нормальная яркость |
4 нажатия |
Устанавливаемый параметр (его выбирают последовательными нажатиями на указанную в таблице кнопку) всегда находится на индикаторах HG1, HG2, HG4, HG5 и выделяется светящими десятичными точками. Индикатор HG3 показывает номер пункта меню (от 1 до 13).
Возможны следующие режимы работы будильника:
будильник выключен;
ежедневное срабатывание;
срабатывание только по будням;
срабатывание только по выходным;
однократное срабатывание (фактически раз в год).
Сигналом будильника служит мелодия "Неаполитанская песенка”, воспроизводимая через динамическую головку ВА1. Формирование необходимых значений звуковой частоты происходит с помощью таймера TIMER 1 микроконтроллера, работающего в режиме широтноимпульсного модулятора (ШИМ) с точной фазой и частотой.
В этом режиме максимальное значение в счетчике таймера задают числом, записываемым в регистр OCR1A. По достижении содержимым счетчика максимального и минимального значений, состояние выхода РВ1 (ОС1А) микроконтролера инвертируется, а счетчик изменяет направление счета на противоположное. Таким образом, значение в регистре OCR1A задает необходимую частоту сигнала на выходе РВ1.
Для проигрывания мелодии в программе микроконтроллера организованы четыре массива:
note_mas – значения для записи в регистр OCR1A, соответствующие нотам;
long_note_mas – коды длительности нот и пауз;
EE_mus_note – последовательность нот в исполняемой мелодии;
EEjnusJong – последовательность длительностей нот и пауз в
исполняемой мелодии.
При воспроизведении мелодии последовательно выполняется запись в регистр OCR1A значений из массива note_mas в соответствии с их индексами, хранящимися в массиве EE_mus_note. Значения длительности звучания нот и пауз извлекаются из массива EE_mus_long (первый полубайт – длительность паузы, второй полубайт – длительность звучания ноты) и преобразуются в коды для загрузки в счетчик времени из массива long_note_mas. Воспроизведение мелодии прекращается при нажатии на любую кнопку или по истечении установленного промежутка времени.