А.П.Евдокимов, Л.Л.Владимиров Программирование микроконтроллера К1986ВЕ92QI компании Миландр (1186478), страница 7
Текст из файла (страница 7)
Рассчитайте частоту как величину обратную периоду.9. Напишите и испытайте программу, по которой средний уровень сигнала будет плавно уменьшаться, а затем резко возрастать.10. Напишите и испытайте программу, по которой средний уровень сигнала сначала будет плавно возрастать, а затем плавно уменьшаться.КОНТРОЛЬНЫЕ ВОПРОСЫ1. Что называют широтно-импульсной модуляцией и где онаприменяется?2.
Какой блок микроконтроллера может работать в режимеШИМ?3. Какие выводы микроконтроллера могут передавать сигналыШИМ?4. Как установить период ШИМ?5. Как установить длительность импульса в режиме ШИМ?6. Поясните логику работы программы, приведенной в даннойлабораторной работе.51ЛАБОРАТОРНАЯ РАБОТА 7.ИНДИКАЦИЯЦЕЛЬ РАБОТЫИзучить принцип действия жидкокристаллического (ЖК) модуля MT-12864J.
Научится выводить информацию на экран модуля.ТЕОРЕТИЧЕСКАЯ ЧАСТЬЖидкокристаллический модуль MT–12864J (поз. 11 на рисунке1.3) состоит из двух встроенных контроллеров управления и ЖКпанели (экрана). Каждой светящейся точке на экране соответствуетлогическая единица в ячейке оперативного запоминающего устройства (ОЗУ) модуля.00123456701234567Контроллер 112∙∙∙63Страница 0Страница 0Страница 1Страница 1∙∙∙012345670Контроллер 212∙∙∙63∙∙∙Страница 7Страница 7Рисунок 7.1 – Структура экрана ЖК-модуля MT-12864J52Экран, как и ОЗУ, имеет структуру, показанную на рисунке 7.1.Экран делится на две половины: левую, которой управляет контроллер 1, и правую, которой управляет контроллер 2.
Каждая половинаэкрана состоит из 8 страниц: страница 0, страница 1, ..., страница 7.Каждая страница содержит восемь строк (номера от 0 до 7) и 64 колонки (номера от 0 до 63). Таким образом на экране расположено 64 х2 = 128 колонок и 8 х 8 = 64 строки – всего 128 х 64 = 8192 элемента(пикселя) экрана. Такое количество элементов позволяет выводить наэкран не только знаковую информацию, но и примитивные рисунки.Для работы с ЖК-модулем компанией «Миландр» разработанабиблиотечная программа lcd.c, основные функции которой мы иизучим.Начнем с классического приветствия программистов «Привет,мир!»:#include <MDR32F9Qx_port.h>#include <MDR32F9Qx_rst_clk.h>#include "lcd.h"int main(void){LCD_Init();LCD_PutString("Привет, мир!", 3);while (1){}}Сначала подключаются файлы, необходимые для работы портов, задающего генератора и ЖК-модуля. Затем вызывается функцияLCD_Init(), позволяющая работать с экраном, и функцияLCD_PutString("Привет, мир!", 3), позволяющая вывести целуюстрочку символов.
Последняя функция имеет следующее описание:void LCD_PutString(char* string, uint8_t y);из которого нам важно понять лишь то, что вместо указателя на массив со строкой char* string следует в кавычках записать желаемыйтекст, вместо беззнаковой переменной y – номер страницы экрана от 0до 7, поскольку один символ по вертикали занимает 8 пикселей, тоесть высота символа равна высоте страницы.
Изменяя значение y,можно смещать текст на экране по вертикали. К слову сказать, по го53ризонтали один символ занимает также 8 пикселей, то есть при 128колонках на экране в одном ряду может разместится 128 : 8 = 16 символов, или знакомест.Полезными могут оказаться и другие функции.void LCD_ClearString(uint8_t y);Функция позволяет очистить страницу экрана от текста, т.е. удалитьстрочку текста с экрана. Здесь y – номер страницы от 0 до 7.// Пример использованияLCD_ClearString(3);void LCD_ScrollString(char* string, uint8_t y, uint8_t direction);Функция позволяет осуществить перемещение строчки текста («прокрутку») на одно знакоместо влево – LCD_SCROLL_LEFT и вправо –LCD_SCROLL_RIGHT.// Примеры использованияLCD_ScrollString("Привет, мир!", 3, LCD_SCROLL_LEFT);LCD_ScrollString("Привет, мир!", 3, LCD_SCROLL_RIGHT);Скорость перемещения по экрану можно регулировать, включая задержки после исполнения функции.void LCD_PutSymbol(char symbol, uint8_t x, uint8_t y);Функция служит для вывода на экран одиночного символа.
Здесь char– символьный тип данных, x – номер знакоместа по горизонтали (от 0до 15), y – номер знакоместа по вертикали, или, что тоже самое, номерстраницы экрана, или номер строчки текста (от 0 до 7).// Примеры использованияLCD_PutSymbol('2', 0, 0);LCD_PutSymbol('2', 15, 0);LCD_PutSymbol('2', 0, 7);LCD_PutSymbol('2', 15, 7);////////////////Символ 2 отображаетсяв левом верхнем углуСимвол 2 отображаетсяв правом верхнем углуСимвол 2 отображаетсяв левом нижнем углуСимвол 2 отображаетсяв правом нижнем углуСимвол ' находится на нижнем регистре клавиши «Э» при английскойраскладке клавиатуры.54Символ можно также записать с помощью таблицы кодировкиASCII, в которой, например, цифре 2 присвоено шестнадцатеричноезначение 0x32.
В этом случае символ 2 можно записать в левом нижнем углу так:LCD_PutSymbol(0x32, 0, 7);Обратите внимание: никаких кавычек нет.Рассмотрим еще один способ вывода текста на экран.Целочисленной переменной a присвоим значение, например, 5:int32_t a = 5;Зарезервируем память для строки. 16 знакомест + 1 элемент для указателя конца строки – всего 17 элементов:char stroka[17];Отформатируем строку.
Массив – stroka, размер массива – 17, вывести результат в формате десятичного знакового числа – "%d", вывестизначение переменной a:snprintf (stroka, 17, "%d", a);Вывести строку на четвертой странице экрана слева:LCD_PutString(stroka, 4);Заметим, что таким образом могут быть выведены значения нетолько одной переменной, но и целых выражений. Например, еслипредварительно задать значения переменных a = 1, b = 2, c = 3, товыражениеsnprintf(stroka, 17, "%d + %d + %d = %d", a, b, c, a + b + c);LCD_PutString(stroka, 4);выведет на экран:1 + 2 + 3 = 6Кроме десятичного знакового формата %d нам может потребоватьсячисло с плавающей запятой (точкой). Такой формат указывается так:%f, при этом после децимальной точки будет 6 знаков.
Если количество знаков нужно уменьшить, например, до трех, то следует записать%.3f:55snprintf (stroka, 17, "%.3f ", a);Разумеется, предварительно необходимо задать тип переменной a и еезначение, например:float a = 5;При этом полный текст программы имеет следующий вид.// Вывод числа с плавающей точкой на экран// Подключение файла инициализации портов#include <MDR32F9Qx_port.h>//Подключение файла инициализации тактового генератора#include <MDR32F9Qx_rst_clk.h>// Подключение файла инициализации ЖК-модуля#include "lcd.h"char stroka[17]; // Установка размера массива для строкиfloat a = 5;// a – число с плавающей запятой (точкой)// Объявление главной функцииint main(){// Вызов функции инициализации ЖК-модуляLCD_Init();// Форматирование символа на экранеsnprintf(stroka, 17, "%.3f", a);// Расположение символа на 4-й строчке текста// (или 4-й странице экрана)LCD_PutString(stroka, 4);while (1) // Пустой цикл{}}ПРАКТИЧЕСКАЯ ЧАСТЬ1.
Подключите отладочную плату к компьютеру.2. Подайте питание на плату.3. Запустите среду программирования Keil μVision.4. С помощью программатора занесите в микроконтроллер программу вывода числа с плавающей точкой на экран. Наблюдайте результат на экране ЖК-модуля. Измените число значащих цифр послезапятой числа на экране.5. Выведите на экран текст «Студент» на странице 6 экрана.6. Заставьте перемещаться текст «Студент» по экрану ЖКмодуля. Измените скорость перемещения.567. Выведите символ «9» в левой части, в правой части, в центрестраницы 5 экрана.8.
Используя ASCII-код выведите символ «8» в левой части, вправой части, в центре страницы 7 экрана.КОНТРОЛЬНЫЕ ВОПРОСЫ1. Что представляет собой жидкокристаллический модуль MT–12864J?2. Как вывести строку текста на экран ЖК-модуля?3. Как удалить строку текста с экрана ЖК-модуля?4. Как осуществить перемещение строчки текста по экрану ЖКмодуля?5. Как вывести одиночный символ на экран ЖК-модуля?6. Как вывести число с плавающей запятой на экран ЖКмодуля?57ЛАБОРАТОРНАЯ РАБОТА 8.НАСТРОЙКА МОДУЛЯ АЦПЦЕЛЬ РАБОТЫИзучить работу модуля АЦП и научиться его настраивать.ТЕОРЕТИЧЕСКАЯ ЧАСТЬАналоговым называют сигнал, который может принимать любоезначение в заданном диапазоне.
Аналого-цифровой преобразователь(АЦП) – устройство, преобразующее входной аналоговый сигнал вцифровой код (цифровой сигнал).Для того чтобы преобразовать аналоговый сигнал в цифровой,необходимо выполнить три операции: дискретизацию, квантование икодирование.Дискретизация – представление непрерывного аналогового сигнала последовательностью его значений (отсчетов). Эти отсчеты берутся в моменты времени , отделенные друг от друга интервалом ∆,который называется интервалом дискретизации (рисунок 8.1).