Современная электроника №7/2021
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 65 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2021 Листинг 2 #include <mega32.h> // Подключение заголовочных файлов #include <alcd.h> // в которых содержатся #include <stdio.h> // прототипы функций #include <delay.h> #include <ff.h> #include <glcd.h> #include <font5x7rus.h> interrupt [TIM1_COMPA] void timer1_compa_isr(void) {disk_timerproc();} // Вызов функции синхронизации void main(void) // Основная функция программы { FATFS fat; // Выделение рабочей области памяти для логического диска FIL file; // Указатель на структуру данных файла unsigned char Text[58],img[]={ 0x10,0x00, // Размер изображения по горизонтали 16 пикселей 0x10,0x00, // Размер изображения по вертикали 16 пикселей #ifndef _GLCD_DATA_BYTEY_ /* Код изображения, организованный в виде горизонтальных строк байтов */ 0xE0, 0x07, 0x10, 0x08, 0x0C, 0x30, 0x04, 0x20, 0x22, 0x44, 0x31, 0x8C, 0x01, 0x80, 0x81, 0x81, 0x01, 0x80, 0x01, 0x80, 0x11, 0x88, 0xE2, 0x47, 0x84, 0x21, 0x0C, 0x30, 0x10, 0x08, 0xE0, 0x07, #else /* Код изображения, организованный в виде вертикальных строк байтов */ 0xE0, 0x10, 0x0C, 0x04, 0x22, 0x31, 0x01, 0x81, 0x81, 0x01, 0x31, 0x22, 0x04, 0x0C, 0x10, 0xE0, 0x07, 0x08, 0x30, 0x20, 0x44, 0x88, 0x88, 0x98, 0x98, 0x88, 0x88, 0x44, 0x20, 0x30, 0x08, 0x07, #endif }; unsigned int br; // Число прочитанных байтов int i; GLCDINIT_t glcd_init_data; // Переменная для хранения данных контроллера // графического дисплея // Инициализация портов микроконтроллера // Port B DDRB=(1<<DDB7) | (0<<DDB6) | (1<<DDB5) | (1<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port D, Port C DDRD=DDRC=0xff; PORTD=PORTC=0x00; // Инициализация таймера TCCR1A=0x00; TCCR1B=0x0D; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x4E; TIMSK=0x10; lcd_init(20); // Инициализация алфавитно-цифрового дисплея #asm("sei") delay_ms(200); // Пауза длительностью 200 мс glcd_init_data.font=font5x7; // Определение шрифта графического дисплея glcd_init(&glcd_init_data); // Инициализация графического дисплея f_mount(0, &fat); // Выделение рабочей области памяти для логического раздела glcd_setlinestyle(6,GLCD_LINE_DOT_LARGE); // Установка стиля рисования линий на // графическом дисплее glcd_rectangle(0,0,128,64); // Отрисовка прямоугольной рамки f_open(&file,"0:/3.txt", FA_OPEN_EXISTING | FA_READ); // Открываем на карте памяти // файл 3.txt только для чтения f_read(&file, Text, 13, &br); // Читаем с карты памяти в переменную Text // 13 символов с начала файла 3.txt glcd_outtextxy(17,17,Text); // Вывод на экран графического дисплея считанных символов lcd_gotoxy(4,2); // Установка курсора в четвёртую позицию // второй строки алфавитно-цифрового дисплея for (i=0;i<13;i++) {lcd_putchar(Text[i]);} // Посимвольный вывод на экран // алфавитно-цифрового дисплея считанных из файла 3.txt карты памяти данных f_lseek(&file, 25); // Смещение указателя чтения файла на 25 байтов с начала файла f_read(&file,Text, 18, &br); // Чтение с карты памяти в переменную Text 18 символов glcd_outtextxy(10,37,Text); // Вывод на экран графического дисплея считанных символов f_close(&file); // Закрываем файл 3.txt delay_ms(50); // Пауза длительностью 50 мс glcd_putimage(98,10,img,GLCD_PUTCOPY); // Вывод изображения, код которого указан // в переменной img, на экран графического дисплея с позиции х = 98, y = 10 delay_ms(50); } Рис. 17. Вид графического дисплея после вывода считанной из внешней памяти: текстовой информации (а), графической информации в режиме GLCD_PUTCOPY (б), графической информации в режиме GLCD_PUTNOT (в) а в б
RkJQdWJsaXNoZXIy MTQ4NjUy