Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_Работа_3.doc
Скачиваний:
12
Добавлен:
04.05.2019
Размер:
185.86 Кб
Скачать

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 ………. При отпускании кнопки (размыкании ее контакта) на экране дисплея опять будет текст вопроса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]