Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 1 б. Некоторые Аrdиiпо-задачи на ассемблере 421 Часы с календарем на ОLЕD-дисплее Как вы видели на тестовом примере, вывести на такой дисплей можно время и дату одновременно. В случае четырех символов, доступных хоть для динамической ин­ дикации, хоть для дисплея на основе ТМ 1 637, мы вынуждены ограничиваться только временем, а здесь можем выводить также дату, причем название месяца отображать буквами (и при желании менять дату на название дня недели). Подключить часы DS 1 307 к I 2 С-интерфейсу можно по схемам, показанным ранее (например, на рис . 1 6 .2), дисплей подключается по стандартной схеме (см. рис . 1 6 . 8 и табл. 1 6 . 1 ) . Программу индикации часов на ОLЕD-дисплее 1 6х2 вы найдете в ар­ хиве по адресу, указанному во введении (файл OLED1 6x02_clock .asm ) . Это самая объ­ емная программа в книге - она занимает в памяти программ более 1 3 00 байтов (красота требует жертв ! ). Существенную часть этого объема, однако, занимает предварительная загрузка в SRAM текстовых названий месяцев, которая произво­ дится один раз в начале программы. Если месяцы записать отдельно в EEPROM, например, или помучиться с директивой . dseg, то можно сократить код собственно программы, но тут уместно вспомнить, что нас вообще-то объем памяти программ не лимитирует, а так получается нагляднее и проще для отладки. Вся программа вместе с названиями месяцев влезет даже в куцые объемы ATtiny23 1 3 , и выводов тоже должно хватить. Правда, ни на что другое их там уже не останется, и не за­ будьте, что у АТtiny23 1 3 порты другие, и еще придется менять текст процедур ра­ боты с дисплеем, так что заниматься этим стоит разве что из спортивного интереса. Названия месяцев с учетом выравнивающих пробелов занимают по 1 О байтов, т. е. в сумме получится 1 20 байтов. Если к ним добавить текстовые названия дней неде­ ли (можно менять дату на отображение дня недели периодически), то, учитывая длинные названия «воскресенье» или «понедельнию>, это будет еще больший объ­ ем, так что одним байтовым сегментом SRAM мы уже не обойдемся, и в процедуры вызова придется вносить коррективы. Попробуйте самостоятельно подключить через АЦП еще и измеритель температу­ ры, как это описывалось ранее применительно к дисплею ТМ1 637, - мы ведь спе­ циально оставили два вывода АЦП свободными. Долгая процедура полного обнов­ ления дисплея в программе производится только раз в минуту (когда обновляется значение секунд), а ежесекундно читаются только сами секунды, и у вас достаточно времени на любые другие операции. Температуру можно уместить на том же экра­ не (см. упомянутую ранее тестовую программу из файла OLED1 6x02_proba.asm ) . Если вы справитесь с такой модификацией программы, считайте, что научились программировать АVR на ассемблере . * * * Итак, с дисплеями мы познакомились достаточно для того, чтобы выполнять за­ конченные проекты с их применением на чистом ассемблере . Рассмотрим теперь еще пару познавательных проектов, типичных для Arduino.

RkJQdWJsaXNoZXIy MTExODQxMg==