требования к дизайну
1. Отображение года, месяца, дня, недели, часа, минуты и секунды в григорианском календаре;
2. Год, месяц, день, час, минута и секунда могут быть отрегулированы в любое время;
3. Может отображать лунное время и указывать год Ping-Run;
4. Он имеет функцию напоминания о настройке будильника;
5. Возможность отображения текущей температуры окружающей среды;
Обзор системы
Система электронного вечного календаря использует микроконтроллер AT89C52 в качестве ядра для формирования схемы управления микроконтроллера. Она сочетает в себе микросхему часов DS1302 и датчик температуры DS18B20 для считывания времени и температуры. Вся информация отображается в режиме реального времени на жидкостном дисплее LCD1602. кристалл.
Калибровка календарного времени и настройка будильника осуществляются четырьмя независимыми кнопками. Календарь может отображать год, месяц, день по григорианскому календарю и лунному календарю, а также день недели, часы, время. минуты и секунды. При отображении года по лунному календарю он также может указывать день и ночь.
Вся система состоит из следующих модулей, как показано на рисунке ниже.
Схема моделирования Proteus
Принципиальная схема
Анализ моделирования
Откройте файл моделирования Proteus, расширение файла — DSN. Дважды щелкните микроконтроллер, загрузите файл WanNianLi.hex (находится в папке программы Keil C) и запустите моделирование. Результаты показаны на рисунке ниже.
Как видно из приведенного выше рисунка, информация о времени, отображаемая на ЖК-дисплее, полностью соответствует окну DS1302 Clock-U3, что указывает на то, что микроконтроллер успешно считывает данные чипа DS1302. Текущая дата — пятница, 9 октября 2020 г., время — 21:30:39, температура — 31,0 ℃.
Операция по установке времени: нажмите кнопку «Установить», секундная стрелка начнет мигать. В это время вы можете использовать «клавишу плюс» и «клавишу минус», чтобы настроить время. Настройка секундной стрелки следующая. .
После завершения настройки секундной стрелки еще раз нажмите кнопку «Установить», минутная стрелка начнет мигать, продолжайте установку с помощью клавиш «плюс» и «минус» и т. д., чтобы установить час, день, месяц и год, год ( диапазон может достигать 2099). После завершения настройки нажмите еще раз. Нажмите кнопку «Настройки», чтобы выйти из настройки времени и вернуться к обычному интерфейсу ЖК-дисплея.
Нажмите кнопку «Лунный календарь/Будильник», чтобы отобразить текущую дату по лунному календарю и год Ping-Run (год PING: PING и високосный год: RUN). Как показано на рисунке ниже, лунный день соответствует лунному дню. 9 октября 2020 года по григорианскому календарю — это 23 августа. А 2020 год — високосный год, поэтому информация о преобразовании григорианского и лунного календаря точна.
Нажмите кнопку «Лунный календарь/Будильник» еще раз, чтобы отобразить время будильника и состояние включения/выключения будильника (ВКЛ.: означает, что будильник включен, ВЫКЛ.: означает, что будильник выключен. На рисунке время будильника системы по умолчанию). Сейчас 01:01, и сигнализация включена.
Порядок настройки будильника: в текущем интерфейсе отображения будильника нажмите кнопку «Настройки». Часы будильника будут мигать. Используйте «Кнопку «Добавить»» и «Минус», чтобы настроить часы. Часы установлены, нажмите кнопку «Установить» еще раз, минуты начнут мигать, введите настройку минут.
Таким же образом после установки минут снова нажмите кнопку «Установить». Следует отметить, что при установке переключателя будильника не мигает курсор. Нажмите кнопку «Плюс» или «Минус», чтобы включить или выключить будильник, а также переключиться между ВКЛ и ВЫКЛ.
После настройки всего вышеперечисленного нажмите кнопку «Установить», индикатор ON или OFF мигнет один раз, указывая на то, что настройка будильника завершена. В это время нажмите кнопку «Лунный календарь/Будильник», чтобы выйти из интерфейса будильника и вернуться к обычному интерфейсу отображения времени.
Например, если время будильника установлено на 8:30 утра, будильник включен и его статус включен, результаты будут следующими.
По истечении времени таймера будильника прозвучит звуковой сигнал и прозвучит сигнал будильника; будильник можно выключить, нажав кнопку «плюс», «минус» или «лунный календарь/будильник».
Нажимая красные стрелки вверх и вниз на модуле DS18B20, вы можете моделировать изменения температуры, а на ЖК-дисплее отображается текущее значение температуры в режиме реального времени. Например, заданная температура составляет 22,0 ℃, как показано на рисунке.
Подводя итог, можно сказать, что эффект моделирования конструкции электронного вечного календаря Proteus удовлетворяет требованиям к дизайну.
Часть кода C
/*
Функция: ввод данных солнечного календаря в формате BCD, вывод данных лунного календаря в формате BCD (разрешено только для 1901–2099 годов).
Пример вызова функции: Conversion(c_sun,year_sun,month_sun,day_sun)
Например: Вычислить конверсию(0,0x4,0x10,0x16) 16 октября 2004 г.;
c_sun,year_sun,month_sun,day_sun — все данные в формате BCD, c_sun — отметка столетия, c_sun=0 — 21 век.
Век, c_sun=1 — 19 век.
После вызова функции исходные данные остаются неизменными. Прочитайте c_moon,year_moon,month_moon,day_moon, чтобы получить данные лунного календаря в формате BCD.
*/
void Conversion(bit c,uchar year,uchar month,uchar day)
{ //c=0 Для 21 века c=1 для 19 века Все входные и выходные данные представляют собой данные BCD.
uchar temp1,temp2,temp3,month_p;
uint temp4,table_addr;
bit flag2,flag_y;
temp1=year/16; //BCD->hex Сначала преобразуйте данные в шестнадцатеричный формат.
temp2=year%16;
// year=temp1*10+temp2;
year=temp1*16+temp2;
temp1=month/16;
temp2=month%16;
//month=temp1*10+temp2;
month=temp1*16+temp2;
temp1=day/16;
temp2=day%16;
//day=temp1*10+temp2;
day=temp1*16+temp2;
//Находим адрес таблицы данных
if(c==0){
table_addr=(year+0x64-1)*0x3;
}
else {
table_addr=(year-1)*0x3;
}
//Находим адрес таблицы данных Заканчивать
//Получить месяц по григорианскому календарю, в котором в этом году проводится Весенний фестиваль
temp1=year_code[table_addr+2]&0x60;
temp1=_cror_(temp1,5);
//Получить месяц по григорианскому календарю, в котором в этом году проводится Весенний фестиваль Заканчивать
//Получить календарный день весеннего фестиваля этого года
temp2=year_code[table_addr+2]&0x1f;
//Получить календарный день весеннего фестиваля этого года Заканчивать
// Подсчитайте количество дней от Праздника Весны текущего года до Нового года текущего года. Праздник Весны приходится только на январь или февраль григорианского календаря.
if(temp1==0x1){
temp3=temp2-1;
}
else{
temp3=temp2+0x1f-1;
}
Содержание ресурса
(1) Полная версия электронного вечного календаря на базе 51 микроконтроллера;
(2)Altium DesignerПринципиальная схемадокумент;
(3) программа Keil C;
(4) файл моделирования Proteus;
(5) блок-схема программирования Visio;
(6) Письмо об окончательном задании;
(7) Техническое руководство по чипу;
(8) Список компонентов;
(9) Введение в знание компонентов;
Скриншот ресурса