3.2. Задание для самостоятельной работы
Требуется разработать МКУ, состоящее из микроконтроллера PIC18F242, ЖК-дисплея и кнопки. Схема МКУ (при моделировании ее в Proteus) приведена на рис. 2.
МКУ должно выполнять следующий алгоритм. После запуска программы и разомкнутом контакте кнопки SB1 на дисплей выводится текст вопроса:
Hello! What is
your name?
При нажатии кнопки SB1 (замыкании ее контакта) на экран дисплея выводится имя пользователя (например, Edward) в таком виде:
My name is
Edward.
Разработку МКУ можно вести в следующей последовательности.
Рис. 2. Принципиальная схема МКУ к заданию
3.2.1. Запустите программу MPLAB IDE и выберите тип микроконтроллера.
3.2.2. Создайте проект с именем pr14 в новой папке, которую можно назвать proj14.
3.2.3. Наберите текст программы работы МКУ my_name.c в окне редактора (используйте цветовую кодировку текста при наборе).
/**************************************************************
my_name.c – программа вывода имени на ЖКД
************************************************************/
#include<p18f242.h>
#include<stdio.h>
#include<xlcd.h>
#include<delays.h>
#pragma config WDT=OFF, OSC=HS
void init(void); // прототип функции инициализации МК
void out_quest(void); // прототип функции вывода вопроса
void out_name(void); // прототип функции вывода имени
char line[17]; // объявление строковой переменной
void main(void)
{
init( ); // вызов функции инициализации
while( 1 )
{
if(PORTCbits.RC0==0) // если нажата SB1
out_name( ); // вызов функции вывода имени
else // если SB1 не нажата
out_quest( ); // вызов функции вывода вопроса
}
}
void init(void) // функция инициализации МКУ
{
// инициализация МК
PORTB=0;
TRISB=0; // настроить все линии порта В на вывод
PORTC= 0;
TRISC=0b00000001; // настроить линию RC0 на ввод, остальные –
// на вывод
// инициализация ЖКД
OpenXLCD(FOUR_BIT & LINES_5X7);
while(BusyXLCD( ));
WriteCmdXLCD(CURSOR_OFF & BLINK_OFF);
}
void out_quest(void) // функция вывода на ЖКД вопроса
{
sprintf(line, “Hello! What is “);
while(BusyXLCD( ));
SetDDRamAddr(0x00); // установка курсора на начало 1-й строки
putsXLCD(line);
sprintf(line, “your name? “);
while(BusyXLCD( ));
SetDDRamAddr(0x40); // установка курсора на начало 2-й строки
putsXLCD(line);
}
void out_name(void) // функция вывода имени пользователя
{
………………….. /* Требуется написать самостоятельно
………………… для вывода имени пользователя */
…………………..
}
void DelayFor18TCY(void) // функция задержки на 20 мкс
{
Delay10TCYx(2);
}
void DelayPORXLCD(void) // функция задержки на 15 мс
{
Delay1KTCYx(15);
}
void DelayXLCD(void) // функция задержки на 5 мс
{
Delay1KTCYx(5);
}
3.2.4. С помощью пункта меню View > Project откройте окно проекта pr14.mcw и внесите исходный файл my_name.c и файл сценария линкера 18f242.lkr в проект. Затем проверьте установку опций для создания проекта с помощью пункта меню Project > Build Options… > Project. Обязательно установите путь для поиска библиотек Library Search Path. Затем постройте проект, выбрав пункт меню Project > Build All. В случае успешной компиляции сверните окно MPLAB IDE.
3.2.5. Для проверки работы МКУ запустите программу ISIS.exe пакета Proteus VSM. Для упрощения разработки схемы можно использовать файл проекта с именем hello.dsn из папки проектов proj13. С этой целью выберите пункт меню File > Open Design. В раскрывшемся диалоговом окне найдите папку с именем proj13 и выберите файл hello.dsn.
3.2.6. В схему из файла hello.dsn необходимо добавить резистор и кнопку. С этой целью щелкните мышью по значку с всплывающей надписью Component Mode на панели инструментов, а затем по кнопке P в верхнем левом углу переключателя объектов Object Selector. На экране появится окно Pick Devices библиотеки компонентов. Компоненты выбирайте по ключевым словам Keywords следующим образом:
сначала выберите резистор. С этой целью наберите в окне Keywords слово RES (резистор). В окне результата выберите строку RES DEVICE;
затем выберите переключатель (кнопку). Для этого очистите строку Keywords и наберите слово BUTTON (кнопка). В окне результатов выберите строку BUTTON ACTIVE.
Если выбранные элементы появились в списке окна Object Selector, то закройте библиотеку нажатием на клавишу Enter.
Теперь разместите резистор и кнопку в окне редактирования согласно рис. 2. Затем перейдите в режим Terminals Mode, для чего требуется щелкнуть мышью по иконке с соответствующей надписью на панели инструментов. Выберите из списка клемму GROUND (земля, общий провод), а затем клемму POWER (питание). Выполните соединение элементов между собой согласно принципиальной схеме, приведенной на рис. 2.
После завершения разводки необходимо сохранить проект в папке proj14. Для этого выберите пункт меню File > Save Design As… Раскройте папку e:\...\proj14 и сохраните в ней проект под именем my_name.dsn.
3.2.7. Теперь можно приступить к проверке работы МКУ. Сначала нужно записать hex-код разработанной программы в память МК. С этой целью наведите курсор мыши на изображение МК и дважды щелкните левой кнопкой. В открывшемся окне редактирования свойств компонента Edit Component щелкните по кнопке в правой части строки Program File. Откроется окно Select File Name с hex-файлами из папки proj14. Выберите файл с именем pr14.hex (это скомпилированный файл исходной программы my_name.c, написанной на языке Си), и нажмите кнопку «Открыть». Затем в строке Processor Clock Frequency (тактовая частота процессора) выставьте 4 МГц. Нажмите кнопку ОК для подтверждения выбора параметров. В заключение щелкните по пустому месту схемы для снятия выделения с МК.
Для проверки работы МКУ с помощью кнопки Play (Пуск) запустите проект на выполнение. На экране дисплея должен появиться текст вопроса: Hello! What is your name? Если это произошло, то нажмите кнопку на схеме. На экране дисплея должен появиться текст ответа: My name is ………. При отпускании кнопки (размыкании ее контакта) на экране дисплея опять будет текст вопроса.