Современная электроника №2/2022
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 57 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2022 Рис. 20. Результат компиляции программного кода индикации состояния датчика касания в CodeVisionAVR #include <math.h> #include <stdlib.h> // функция отрисовки рамки на экране буквенно-цифрового дисплея void ramka() { int i; lcd_clear( ); // очистка экра- на дисплея i=0; // отрисуем верхнюю сторону рамки while( 1 ) // выполняем цикл, пока не будет достигнуто // условие i==20 (ширина рамки 20 знакомест) { i++; // устанавливаем курсор на следующую позицию нулевой стро- ки экрана lcd_gotoxy( i-1,0 ); lcd_putchar( 0xff ); // выводим на экран символ заполненного зна- коместа, // 0xff – код символа из таблицы кодов символов if( i==20 ){ break; } // выход из цикла while, если курсор достиг 19 столбца нулевой строки } delay_ms(40); // задержка 40 мс // отрисуем левую боковую сторо- ну рамки lcd_gotoxy( 0,1 ); lcd_putchar( 0xff ); lcd_gotoxy( 0,2 ); lcd_putchar( 0xff ); delay_ms(40); i=0; // отрисуем нижнюю сторону рамки while( 1 ) // выполняем цикл, пока не будет достигнуто условие i==20 {i++; // устанавливаем курсор на следующую позицию третьей строки экрана lcd_gotoxy( i-1,3 ); lcd_putchar( 0xff ); // выводим на экран символ заполненного зна- коместа 0xff if( i==20 ){ break; } // выход из цикла while, если курсор достиг 19 столбца третьей строки } delay_ms(40); // задержка 40 мс // отрисуем правую боковую сто- рону рамки lcd_gotoxy( 19,1 ); lcd_putchar( 0xff ); lcd_gotoxy( 19,2 ); lcd_putchar( 0xff ); delay_ms(40); } void main(void) // основная функ- ция программы { int i, res; // инициализация портов микрокон- троллера // Port D, Port C, Port A DDRD=DDRC=0xff; DDRA=0x00; PORTD=PORTC=PORTA=0x00; lcd_init(20); // инициализация буквенно-цифрового дисплея // формирование заставки на экра- не буквенно-цифрового дисплея lcd_clear( ); // очистка экра- на дисплея lcd_gotoxy( 6,0 ); // выбор пози- ции курсора (6 столбец, 0 строка) lcd_putsf(«Loading»); // вывод строки, начиная с текущей позиции курсора i=0; // цикл формирования индикатора загрузки while( 1 ) // выполняем цикл, пока не будет достигнуто условие i==20 {delay_ms( 500 ); // задержка 500 мс i++; // устанавливаем курсор на следующую позицию первой строки экрана lcd_gotoxy( i-1,1 ); lcd_putchar( 0xff ); // выводим на экран символ заполненного зна- коместа, // 0xff – код символа из таблицы кодов символов if( i==20 ){ break; } // выход из цикла while, если курсор достиг 19 столбца первой строки } ramka(); // сформируем на экра- не рамку // бесконечный цикл, в кото- ром выполняется опрос датчика касания while(1) { // запись сигнала, полученного с линии РА1 микроконтроллера, в пере- менную res=PINA.1; if (res==1) { // если на линии РА1 логическая единица lcd_gotoxy( 6,1 ); // выбор пози- ции курсора (6 столбец, 1 строка) на экране дисплея lcd_puts(«WARNING!»); // вывод предупреждающего сообщения на экран delay_ms(40); // задержка 40 мс } else // иначе, если на линии РА1 логический ноль { lcd_gotoxy( 5,1 ); // выбор пози- ции курсора (5 столбец, 1 строка) lcd_puts(«___OKey___»); // вывод сообщения на экран delay_ms(40); // задержка 40 мс }} }
RkJQdWJsaXNoZXIy MTQ4NjUy