Современная электроника №7/2021
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 60 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 7 2021 #define f_size(fp) ((fp)->fsize) Ниже представлен фрагмент основ- ной функции программы инициализа- ции, в котором даны указания микро- контроллеру смонтировать карту памяти и открыть для чтения разме- щённый на ней файл 1.txt. Функция (!feof(&file)) используется для опреде- ления достижения конца файла. Если символ завершения файла прочитан, то функция возвращает ненулевое значе- ние, и цикл while завершается. После чего происходит закрытие файла и вывод в цикле for считанной из него информации на экран терминала. Фрагмент основной функции про- граммы инициализации микрокон- троллера: f_mount(0, &fat); // Выделение рабочей области памяти для логиче- ского раздела f_open(&file,”0:/1.txt”, FA_OPEN_ EXISTING | FA_READ); // Открываем файл 1.txt // только для чтения while(!feof(&file)) { // Пока не достигнут конец файла f_read(&file, Buff, f_size(&file), &br); // Считываем информацию // и записываем в переменную Buff } f_close(&file); // Закрываем файл 1.txt delay_ms(50); // Пауза длительно- стью 50 мс for (i=0;i<br;i++) {send_UART(Buff[i]);} // Вывод считанной информации на экран тер- минала В результате выполнения программы в Proteus на экран терминала выводит- ся вся записанная в файле 1.txt тексто- вая информация (см. рис. 11). Полезной при чтении/запи- си файла может быть функция f_lseek(FIL* fp, unsigned long ofs), которая перемещает указатель чтения/записи внутрифайла, ранее открытогофункци- ей f_open. Параметр fp функции указы- вает на структуру данныхфайла, которая должна быть предварительно инициа- лизирована вызовом функции f_open. Параметр ofs задает смещение указате- ля чтения/записи файла на число бай- тов с началафайла. Врежиме записи эта функцияможет использоваться для рас- ширения размера файла путём переме- щения указателя чтения/записифайла за конец имеющихся данных. При успеш- номвыполнении значение элемента fptr структуры FIL, на которое указывает fp, должно быть проверено, чтобыубедить- ся в том, что указатель чтения/записи продвинулся в правильное положение и не произошло переполнение диска. В режиме чтения попытка продвинуть указатель чтения/записифайла за конец имеющихся данных ограничится уста- новкой его в положение концафайла. В этом случае элемент fptr структуры FIL, на который указывает fp, будет содер- жать размерфайла в байтах. Ниже представлен фрагмент основ- нойфункции программыинициализа- ции, в котором даны указания микро- контроллеру смонтировать карту памяти и открыть для чтения размещён- ный на нейфайл 1.txt, затем с помощью функции f_lseek(&file, 120) сместить указатель чтения файла на 120 байтов с начала файла и с помощью функции f_read(&file, Buff, f_size(&file), &br) выполнить чтение оставшегося фраг- мента файла. После чего происходит закрытиефайла и вывод в цикле for счи- танной из него информации на экран терминала. Для определения достижения концафайла, как и в предыдущемприме- ре, используется функция (!feof(&file)). Фрагмент основнойфункциипрограм- мыинициализациимикроконтроллера: f_mount(0, &fat); // Выделение рабочей области памяти для логиче- ского раздела f_open(&file,”0:/1.txt”, FA_OPEN_ EXISTING | FA_READ); // Открываем файл 1.txt // только для чтения f_lseek(&file, 120); // Смещение указателя чтения файла на 120 бай- тов с начала файла while(!feof(&file)) { // Пока не достигнут конец файла f_read(&file, Buff, f_size(&file), &br); // Считываем информацию // и записываем в переменную Buff } f_close(&file); // Закрываем файл 1.txt delay_ms(50); // Пауза длительно- стью 50 мс for (i=0;i<br;i++) {send_UART(Buff[i]);} // Вывод считанной информации на экран тер- минала В результате выполнения програм- мы в Proteus происходит чтение из файла 1.txt карты памяти текстовых данных, начиная со 120 байта с начала файла, и их вывод на экран терминала (см. рис. 12). Применение функций библиотек ff.h и glcd.h для чтения данных из внешней памяти и их отображения на экране графического дисплея ИспользуямикроконтроллерATmega32, можно организовать одновременный выводтекстовыхданныхскартыпамяти наэкраналфавитно-цифровогоиграфи- ческогодисплеев. Дляработыс графиче- ским дисплеем в CodeVisionAVR имеют- сяутилитаформированияпрограммного кода изображения – LCDVisionи библи- отека glcd.h, которая содержит функции вывода текстовойиграфическойинфор- мациина экрандисплея, средикоторых: ● glcd_outtext(char *str) – функция вы- вода текстовой строки в текущую Рис. 11. Вывод на экран терминала всей записанной в файл 1.txt текстовой информации
RkJQdWJsaXNoZXIy MTQ4NjUy