Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[11]

Строки 7-10. Указание на то, что все функции для работы с ЖКИ находятся во внешнем файле (ключевое слово - "extern"). В каком именно, должно быть указано в make-файле.

Строки 11-14. Текстовый массив t0[ ] содержит настолько много элементов, что они не помещаются в одной строке. Для переноса используется знак "обратная косая черта" (\). Элементом массива он не является.

Строка 15. В конце массива поставлены пробелы. Это помогает визуально отделить окончание одного информационного блока от начала следующего повтора. Бегущая строка "бежит" по кругу.

Строка 28. Функция "sizeof(t0)" автоматически подсчитывает общее количество элементов в массиве "t0[ ]". Тем самым не приходится вручную пересчитывать их в строках 11-15. Кроме того, теперь можно добавлять или уменьшать число символов в массиве, ничего больше не корректируя в программе.

Строка 30. Сдвиг символов в бегущей строке производится изменением переменной "b". Физически можно представить себе "окно" шириной 16 знакомест, которое последовательно перемещается по всему массиву t0[ ]. Что попадает в данный момент в "окно", то и видно на экране ЖКИ.

Строка 32. Задержка времени необходима для того, чтобы пользователь смог прочитать появляющийся текст. Для изменения скорости движения бегущей строки надо подкорректировать константу TEMP в строке 6.

Пояснения к листингу 3

Текст листинга следует оформить в виде файла "lcd.c" и поместить его в одну папку с файлом "avr72.c".

Функции "lcd com", "lcd dat", "lcd init", "pause" повторяют по смыслу одноименные функции из листинга 1. Однако для сокращения 80 байтов программы введена вспомогательная функция "lcd", общая для "lcd dat" и "lcd com".

Особенности компиляции

Поскольку программа использует не один, а два Си-файла, то этот момент надо отразить в структуре make-файла.

Порядок действий. Открыть программу MFile и стандартным способом заполнить графы для файла "avr72.c". Сохранить "makefile" в той папке, где находятся файлы "avr72.c" и "lcd.c". Запустить на выполнение редактор Programmers Notepad. Открыть в нем только что созданный "makefile". Сделать видимыми номера строк: "View - Line Numbers". Добавить в строке 63 указание на файл "lcd.c" по образцу "SRC = $(TARGET).c lcd.c". Сохранить изменения: "File - Save All".

Переконвертировать русский текст "avr72.c" программой "ruslcd.exe". Для удобства можно создать пакетный файл "avr72.bat" с одной-единственной строкой "ruslcd avr72.c" Откомпилировать программу: "Tools - [WinAVR] Make All". После этого в текущей папке появятся файлы для прошивки FLASH "avr72.hex" и EEPROM "avr72.eep". Далее - стандартное программирование через PonyProg.

"Электронная визитка"

Говорят, что по содержанию визитной карточки можно судить о характере ее владельца. Чтобы сделать бумажный вариант визитки, достаточно воспользоваться средствами любого текстового или графического редакторов. Существует даже специальная дизайнерская программа "Визитка" (фирма "Графи-ка-М" http: www.vizit-ka.ru/rus/soft.html, 14 Мб, бесплатно), позволяющая создавать целостные художественные композиции.

Электронное устройство тоже может стать визитной карточкой, будь-то радиолюбителя или фирмы, связанной с электроникой. Главное, чтобы оно запомнилось необычным внешним видом, а заодно давало бы полезную информацию о субъекте.

На рис.4 показана схема "электронной визитки" с использованием ЖКИ. После включения питания на табло появляется бегущая строка с реквизитами владельца.

Основой устройства является МК DD1, связанный с одно- или двухстрочным ЖКИ HG1 с помощью 4-битового интерфейса данных.

Особенность конструкции - плавное изменение скорости бегущей строки вплоть до ее полной остановки переменным резистором R1. Он входит в частотозадающую цепь тактового ге-

нератора МК и регулирует в широких пределах его частоту. На вопрос: "А где же времязадающий конденсатор?" следует ответ: "Он находится внутри микросхемы DD1 и имеет емкость 36 пФ".

В нижнем по схеме положении движка резистора R1 генерация срывается, но изображение на ЖКИ не исчезает, а останавливается, что удобно для оперативного просмотра информации, например, при запоминании адреса Email.

ЖКИ желательно взять с подсветкой, чтобы внешний вид издалека привлекал внимание. Яркость подсветки определяется резистором R2. Чем меньше его сопротивление, тем яркость больше, однако нельзя превышать допустимый ток, который у разных моделей ЖКИ разный (ориентировочно не более 120...180 мА).

Подстроечный резистор R3 регулирует контрастность изображения. Его сопротивление 20 кОм взято из ряда, принятого за рубежом. Отечественные переменные резисторы имеют сопротивление 22 кОм.

Область применения "электронной визитки" - реклама на выставках, в офисах, в отделах маркетинга, в фирменных магазинах, в точках продаж на радиорынках.

Управляющая программа "avr73.c" (листинг 4) содержит ссылки на функции из файла "lcd.c", следовательно, они должны компилироваться вместе, по приведенной выше методике.

Пояснения к листингу 4

Строка 3. Фьюзы настраиваются на работу от внешнего RC-генератора в диапазоне 0,1...0,9 МГц. При регулировании резистора R1 частота генерации может получаться и выше предела, но на устойчивости это не отражается. После программирования фьюзов надо помнить, что для перехода, например, обратно на внутренний генератор не следует отпаивать резистор R1. При сбоях в программировании надо попробовать установить его номинал близким к 10 кОм, чтобы частота тактового генератора стала 1 МГц.

Строка 14. Перед словом "РАД1ОАМАТОР" сделаны пробелы для визуального выделения блока информации.

Строки 27-29задают паузу в несколько секунд, чтобы можно было прочитать начальную заставку. Этого момента не было в листинге 2, поскольку там текст не останавливался.

Футбольный мультфильм

Алфавитно-цифровые ЖКИ, по определению, выводят на

Листинг 4

Бегущая отрока, =AVE. Ступень 7=, Радл.оаматор, №7, 2005 =1 Make: Name=avr73, MCU=atmega8, Level=2, Debug=VMLab =2 Фьюзы: SUT0=CKSEL3=CKSELl=CKOPT="ranO4KH", RC-генератор =3 linclude <avr/io.h> Библиотека ввода-вывода =4

linclude <avr/pgmspace.h> Библиотека для "sigeofO" =5 Idefine TEMP 10000 Скорость движения бегущей строки =6 extern void lcd com(unsigned char p); Ввод команд ЖКИ =7 extern void led dat(unsigned char p); Ввод данных ЖКИ =8 extern void lcd init(void); Инициализация ЖКИ =9

extern void pause(unsigned int p); Пауза для ЖКИ =10

unsigned char га [ ] ="=РАДЮАМАТОР= Адрес редакции-г. Киев, y\ л.Краковская,36/10. Почта: а/я-50,03110,г.Киев-110,Украина.\ Тел.(044)573-39-38. Email: redactor@sea.com.ua, http: www.\ ra-publish.com.ua=РАД10АМАТОР="; Текст =14

ОСНОВНАЯ ПРОГРАММА=15

int main(void) Начало основной программы =16

( unsigned char а, b, с; Счетчики =17

PORTB = DDRD = OxFF; В=входы с резисторами, О=выходы =18 PORTC = 0xF8; DDRC = 0x07; РСО...3 выходы с лог.О =19 lcd init(); Инициализация ЖКИ (4 бит, 16x2) =20

lcd COm(0x0C) ; Выключение курсора ЖКИ =21

while (1) Бесконечный цикл =22

( for (b=0; b < (sizeof(га)-16); b++) Смещение текста=23 ( for (lcd com(0x80), c=0; c<16; С++) Одна строка =24 ( lcd dat(ra[c+b]); Вывод символов одной строки =25 } Окончание вывода 16 текущих символов =26

if (b=0) Если выведена начальная заставка =27

{ for (а=0; а<70; а++) pause(TEMP); Начал, пауза =28 ) Окончание начальной паузы для заставки =29

for (а=0; а<20; а++) pause(TEMP); Скорость =30

} Переход к смещению текста на один символ влево =31 } Переход к новому циклу движения бегущей строки =32 } WinAVR-20050214, длина кода 540 байтов =33


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

Если вспомнить раскладку знакогенератора ЖКИ (РА 6/2005, с.38, рис.7), то первые 16 символов с адресами 0x00-0x0F оставлены пустыми. В них программист может занести изображения своих фигур размером 5х8 точек и воспроизвести их затем на любом знакоместе ЖКИ. Если в качестве фигур использовать стилизованные изображения человечков и геометрических объектов, а затем их расставлять по определенному сценарию в клетки ЖКИ, то вполне можно создать иллюзию "мультфильма". Алгоритм управления фигурами можно заимство-

Листинг 5

Мультфильм "ПЕНАЛЬТИ", =AVR. Ступень 7=, РА, №7, 2005 г Make: Name=avr74, MCU=atmega8, Level=2, Debug=VMLab Фьюзы: SUT0=CKSEL3=CKSEL2=CKSELl="rMO4KH" (1 МГц) #include <avr/io.h> Библиотека ввода-вывода

#include <avr/pgmspace.h> Библиотека для "sigeofO" #define TEMP 6000 Скорость движения фигурок

extern void lcd com(unsigned char p); Ввод команд ЖКИ extern void lcd dat(unsigned char p); Ввод данных ЖКИ extern void lcd init(void); Инициализация ЖКИ

extern void pause(unsigned int p); unsigned char t0[]=" ==Пенальти== unsigned char tl[]=" Г-0-О-О-Л !!! 1 unsigned char t2[]={ OxCO,0xC4,OxCC,OxCE }; unsigned char t3[]={ 0x00,0x04,0x00,0x03 }; unsigned char t4[]={ OxCO,OxCl,OxCl,0xC2,0xC2,ОхСЗ, 0xC4,0xC5,0xC5,0xC6,0xC6,0xC7,0xC7,0xC8,0xC8,0xC9,

Пауза для ЖКИ = "; = Текст "ГОЛ!" = Адрес ЖКИ = Фигуры =

= =

0xC9,0xCA,0xCA,0xCB,0xCB,0xCC,0xCC,0xCD,0xCE,0xCE }; unsigned char t5[]={ 0x20,0x01,0x20,0x02,0x20,0x01, 0x20,0x04,0x20,0x05,0x20,0x06,0x20,0x07,0x20,0x07, 0x20,0x06,0x20,0x05,0x20,0x04,0x02,0x05,0x20,OxFF }; unsigned char foot[]={ Знакогенератор футбольных фигур 0x0E,0x0E,0x04,OxlF,0x04,0x04,ОхОА,0x11, 0=руки гориз. ОхОЕ,ОхОЕ,0x05,ОхОЕ,0x14,0x04,ОхОА, 0x11, 1=бегущий 0x00,ОхОЕ,ОхОЕ,0x05,ОхОЕ,0x14,0x04,OxlF, 2=падение OxlF,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 3=ворота 0x00,0x00,0x00,0х0С,0х1Е,0х1Е,0х0С,0x00, 4=мяч внизу 0x00,0x00,0х0С,0х1Е,0х1Е,0х0С,0x00,0x00, 5=мяч выше 0x00,0х0С,0х1Е,0х1Е,0х0С,0x00,0x00,0x00, 6=мяч выше 2 0х0С,0х1Е,0х1Е,0х0С,0x00,0x00,0x00,0x00 }; 7=мяч верх ================ОСНОВНАЯ ПРОГРАММА====================

int main(void) Начало основной программы

{ unsigned char а, b; Счетчики

PORTB = DDRD = OxFF; В=входы с резисторами, О=выходы PORTC = 0xF8; DDRC = 0x07; РС0...3 выходы с лог.О led init(); Инициализация ЖКИ (4 бит, 16x2)

led com(OxOC); Выключение курсора ЖКИ

for (lcd com(0x40), а=0; а<64; а++) Загрузка фигур { lcd dat(foot[а]); Текущий символ знакогенератора } Окончание загрузки знакогенератора фигур

while (1) Бесконечный цикл

{ for (lcd com(0x80), а=0; а<32; а++) Нач. заставка { if (а==16) lcd com(0xC0); Переход на нижн.строку lcd dat(t0[а]); Вывод текущего символа

} Окончание вывода начальной надписи ПЕНАЛЬТИ

for (а=0; а<4; а++) Начальное расположение фигур { lcd com(t2[а]); lcd dat(t3[а]); Адрес, фигура } Окончание рисования начальной картинки

for (а=0; а<(sizeof(t4)-1); а=а+2) Мультипликация { for (Ь=0; b<12; b++) pause(TEMP); Скорость

lcd com(t4[а]); lcd dat(t5[а]); Стирание фигур lcd com(t4[а+1]); lcd dat(t5[а+1]); Рисование Окончание показа "мультфильма" а=0; а<16; а++) Верхняя строка Вывод текущего символа Окончание вывода надписи ГОЛ! for (Ь=0; Ь<150; Ь++) pause(TEMP); Длинная пауза }/Переход к новому показу "мультфильма"

} WinAVR-20050214, длина кода 662 байта

for (lcd com(0x80) { lcd dat(tl[a]) ; }

=1 =2 =3 =4 =5 =6 =7 =8 =9 =10

:14 U5 :16 :17 :18 U9 :20 :21 :22 :23 :24

=25 =26 =27 =28 =29 G0 =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

вать из "бегущей строки".

В качестве темы подойдет футбол, а конкретно -выполнение 11-метрового удара. На рис.5 показан макет сценария, расписанный по клеткам нижней строки ЖКИ.

В фазе 1 футболист (Ф) разгоняется для удара и бежит к мячу (М). В фазе 2 мяч летит к вратарю (В). В фазе 3 вратарь пытается поймать мяч, но пропускает его в ворота (П).

Электрическую схему "мультфильм-проектора" специально собирать не надо. Подойдет схема от "кибер-отгадчика" или "электронной визитки". ЖКИ можно взять с подсветкой или без, но обязательно двухстрочный.

Управляющая программа приведена в листинге 5.

Строки 13, 14 содержат согласованные массивы чисел, которые задают начальное положение фигур согласно рис.5. Числа в массиве t2[ ] являются адресами знакомест нижней строки ЖКИ. Числа в массиве t3[ ] определяют номер фигуры в массиве foot[ ], соответственно в строках 22 (футболист стоит), 26 (мяч внизу), 22 (вратарь стоит), 25 (ворота).

Строки 15-20 определяют сценарий "мультфильма". Числа в массивах t4[ ], t5[ ] попарно согласованы друг с другом. Первые из них являются адресами знакомест ЖКИ, вторые - номерами выводимых символов. Например, элемент t4[0] содержит код 0xC0, это первое слева знакоместо в нижней строке ЖКИ. Элемент t5[0] содержит код 0x20, т.е. знак пробела. Получается, что первое знакоместо будет очищено. Второй элемент массива t4[1] 0хС1 указывает на следующую справа клетку ЖКИ, в который будет занесен символ из адреса 0x01. Согласно строке 23 это - фигурка бегущего человечка. Общий результат: фигурка футболиста, первоначально размещенная на поле 0xC0, будет стерта, а на следующем поле 0xC1 появится фигурка бегущего футболиста и т.д.

Строки 21-29 определяют начертания фигур, расположенные по адресам 0x00-0x07. Для примера на рис.6 показан процесс формирования изображения мяча в верхней точке полета, строка 29, код знакогенератора 0x07. "Единицы" обозначают видимый пиксел изображения, "нули" - невидимый.

Строки 30-58 особенностей не имеют. При выводе кадров "мультфильма" используются приемы, характерные для "бегущей строки".

Практическое задание. Отладить "кибер-от-гадчик". Ввести в его программу бегущую строку, для чего дополнить листинг 1 строками из листинга 2. Собрать "электронную визитку" и промоделировать ее работу в VMLab. Просмотреть футбольный "мультфильм" в режиме реального времени, довольно забавное зрелище.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11]