ТОП 10:

Матричная клавиатура AK1604A-WWB



Клавиатура организована в виде матрицы 4x4. Доступ к колонкам и рядам организован как чтение/запись определенного байта внешней памяти (4 бита соответствуют 4 колонкам, другие 4 бита - рядам). Ряды ROW1..ROW4 подключены к плюсу питания через резисторы. Это обеспечивает наличие логической единицы при отсутствии нажатия. На столбцы клавиатуры подают логический ноль. При нажатии на кнопку, происходит изменение значения сигнала на входе соответствующего ряда с единицы на ноль. Клавиатура подключена через расширитель портов на ПЛИС.

Рис. 19. Подключение клавиатуры

1.2.10. Последовательный канал

В SDK-1.1 последовательный канал гальванически развязан (рис. 20). Гальваническая изоляция или гальваническая развязка – разделение электрических цепей посредством не проводящего ток материала. Гальваническая изоляция позволяет защитить SDK-1.1 от высоких напряжений, различных наводок и подключать его к ПК во время работы.

Реализована гальваническая изоляция на базе двух оптронов U8 и U9 (TLP 181). Оптрон TLP181 состоит из светодиода (выводы 1,3) и фототранзистора (выводы 6,4). Если через светодиод пустить ток, то он начинает излучать свет. Свет падает на PN переход фототранзистора и открывает его. Когда свет гаснет, фототранзистор закрывается. Гальваническая изоляция достигается как раз за счет того, что между двумя элементами оптрона нет никакой связи кроме оптической.

Рис 20. Гальванически изолированный последовательный интерфейс SDK-1.1

Выход передатчика последовательного канала TxD попадает на катод оптрона U8. Далее сигнал попадает на двухтактный эмиттерный повторитель сделанный на транзисторах Q1 и Q2. Сигнал TD снимается с эмиттеров транзисторов и далее попадает на ПК. Эмиттерный повторитель питается от двух сигналов RS232поступающих от ПК: +Un получается от CTS, -Un получается от сигнала DSR. Для того чтобы схема заработала, необходимо подать -12 В на выход DTR ПК и +12 В на выход RTS ПК.

Рис. 21. Подключение сигналов последовательного порта

Схема работает так: когда на базы транзисторов попадает положительный сигнал с оптрона открывается транзистор Q1 и на его эмиттере появляется положительный сигнал. Когда на выходе оптрона отрицательный сигнал (оптрон закрыт), то открывается транзистор Q2. Т.к. выход TxD подключен к катоду оптрона, сигнал в оптроне инвертируется, преобразуя TTL сигнал в сигнал RS232. Входной сигнал RD попадает через защитный диод D2 прямо на оптрон. В оптроне сигнал инвертируется и подается на TTL вход приемника RxD.

При программировании последовательного канала под Windows, нужного состояния сигналов RTS и DTR можно добиться с помощью двух строк кода на языке С:

EscapeCommFunction( Port, SETRTS);

EscapeCommFunction( Port, CLRDTR).

1.2.12. Жидкокристаллический дисплей

Жидкокристаллический индикатор (ЖКИ) работает в текстовом режиме (2 строки по 16 символов), имеет подсветку (цвет желто-зеленый). Основные характеристики ЖКИ:

• Габариты: 80x36x13.2 мм.

• Активная область 56.21x11.5 мм.

• Размеры точки 0.56x0.66 мм; размеры символа 2.96x5.56 мм.

• Встроенный набор 256 символов (ASCII + кириллица).

• Генератор символов с энергозависимой памятью на 8 пользовательских символов.

Рис. 22. ЖКИ WH1602B-YGK-CP

1.2.13. Звукоизлучатель

В SDK-1.1 используется пьезоэлектрический звукоизлучатель НРА17А (Z1). Выходы SND0..SND2 подключены к расширителю портов на базе ПЛИС.

Рис. 21. Звукоизлучатель

Порядок выполнения работы

1. Изучите структурную и электрическую принципиальную схемы стенда SDK-1.1. Воспользуйтесь комплектом документации к SDK-1.1 и данным пособием.

2. Изучите описание инструментального программного обеспечения. Воспользуйтесь руководством пользователя SDK-1.1 и справочной системой Keil Software.

3. Изучите структуру STARTUP.A51 и простейшего примера программы на языке С.

3.1. Файл STARTUP.A51

;STARTUP.А51: Этот код исполняется после рестарта процессора

;Для трансляции этого файла используйте ассемблер А51

;со следующей командной строкой: А51 STARTUP.A51

;Для сборки вашего проекта и модифицированного вами файла ;STARTUP.OBJ используйте линкер BL51 со следующей командной ;строкой.

; BL51 <ваши объектные файлы>, STARTUP.OBJ <опции>

;Определяемая пользователем инициализация памяти после ;рестарта.

;С этими константами будет производится инициализация памяти:

;Абсолютный адрес начала памяти IDATA всегда 0

IDATALEN EQU 8ОН;Длина памяти IDATA в байтах.

XDATASTART EQU ОН ;Абсолютный адрес начала памяти XDATA XDATALEN EQU ОН ; Размер памяти XDATA

PDATASTART EQU ОН ; Абсолютный адрес памяти PDTATA PDATALEN EQU ОН ; Размер памяти PDATA

;Инициализация стека

;Следующие константы определяют положение стека необходимого ;для работы реентерабельных функций

;Модель SMALL

IBPSTACK EQU 0 ; =1 если используется стек для SMALL .

IBPSTACKTOP EQU OFFH+1; установка стека в старшую позицию +1.

;Модель LARGE

XBPSTACK EQU 0 ; =1 если используется стек для LARGE

XBPSTACKTOP EQU OFFFFH+1; установка стека в старшую ;позицию +1.

;Модель COMPACT

PBPSTACK EQU 0 ; =1 если используется стек для COMPACT

PBPSTACKTOP EQU OFFFFH+1 ; установка стека в старшую ;позицию +1.

;Определение PPAGE для модели Compact с 64 Кбайт xdata RAM

;Эти константы определяют положение переменных типа pdata.

PPAGEENABLE EQU 0 ; =1 если pdata используется.

PPAGE EQU 0 ; определяет количество страниц PPAGE.

NAME ?C_STARTUP

?C_C51STARTUP SEGMENT CODE

?STACK SEGMENT IDATA

RSEG ?STACK

DS 1

EXTRN CODE (?C_START)

PUBLIC ?C_STARTUP

; Установите 0, если вы компилируете программу для симулятора

CSEG AT О

; Установите 2100Н, если вы компилируете программу для SDK1.1

CSEG AT 2100H

?C_STARTUP: LJMP STARTUPl

RSEG ?C_C51STARTUP

STARTUPl:

; Очистка IDATA

IF IDATALEN <>0

MOV R0,#IDATALEN-1

CLR A

IDATALOOP: MOV @R0,A

DJNZ RO,IDATALOOP

ENDIF

; Очистка XDATA

IF XDATALEN <>0

MOV DPTR,#XDATASTART

MOV R7,#LOW(XDATALEN)

IF (LOW(XDATALEN)) <>0

MOV R6,#(HIGH XDATALEN)+1

ELSE

MOV R6,#HIGH(XDATALEN)

ENDIF

CLR A

XDATALOOP: MOVX @DPTR,A

INC DPTR

DJNZ R7,XDATALOOP

DJNZ R6,XDATALOOP

ENDIF

IF PPAGEENABLE <>0

MOV P2,#PPAGE

ENDIF

; Очистка памяти pdata

IF PDATALEN <>0

MOV RO,#PDATASTART

MOV R7,#LOW(PDATALEN)

CLR A

PDATALOOP: MOVX @R0,A

INC RO

DJNZ R7,PDATALOOP

ENDIF

; стек для модели SMALL

IF IBPSTACK <>0

EXTRN DATA (?C_IBP)

MOV ?C_IBP,#LOW IBPSTACKTOP

ENDIF

; стек для модели LARGE

IF XBPSTACK <>0

EXTRN DATA (?C_XBP)

MOV ?C_XBP,#HIGH XBPSTACKTOP

MOV ?C_XBP+l,#LOW XBPSTACKTOP

ENDIF

; стек для модели COMPACT

IF PBPSTACK <>0

EXTRN DATA (?C_PBP)

MOV ?C_PBP,#LOW PBPSTACKTOP

ENDIF

; Установка указателя стека

MOV SP,#?STACK-1

; Переход к программе инициализации памяти и далее к main()

LJMP ?C_START

END

3.1. Простейшая программа на языке Си

Следующая программа на языке Си для стенда SDK-1.1 инициализирует последовательный канал на скорости 9600 бод и выдает в него строчку «SDK 1.1». Текст программы:

#include "ADuC812.h" // Включение в текст описания регистров

// специального назначения ADuC812

void main(void)

{

TH1 = OxFD; // Скорость 9600

TMOD = 0x2 0; // Таймер 1 в режиме autoreload

TCON = 0x4 0; // Запуск таймера 1

SCON = 0x5 0; //8 bit UART, разрешение приема

PCON&= 0x7F; // Отключение дублирования скорости, установленной в

// ТН1

ЕА =0; // Запрещение прерываний

TI = 0; // Обнуление флага завершения посылки

SBUF = 'S'; // Инициация посылки символа «S»

while(!Т1); // Ожидание завершения посылки

TI = 0; SBUF = 'D' ; while( !TI );

TI = 0; SBUF = 'K'; while( !TI );

TI = 0; SBUF = ' 1' ; while(!TI);

TI = 0;

SBUF

while( !TI );

TI = 0; SBUF = ' 1' ; while( !TI );

while ( 1 ); // «Завершение» программы.

}

Необходимо обратить внимание на последний оператор в теле функции main(). Бесконечный цикл while (1); играет роль оператора завершения программы. Так как SDK-1.1 не находится под управлением операционной системы, то простой выход из пользовательской программы приведет к неконтролируемой выборке команд микроконтроллером из памяти, что может вызвать нежелательные последствия и даже привести к выходу стенда из строя. Поэтому рекомендуется все программы либо «завершать» бесконечным циклом, либо строить их таким образом, чтобы они работали по бесконечному алгоритму.

Для трансляции программы необходим компилятор С51 фирмы Keil Software.

4. Изучите структуру и назначение объектных файлов, OMF, HEX

5. Изучите переменные окружения, необходимые для нормальной работы компилятора.

6. Разберитесь в командных файлах для трансляции программ и для загрузки программ в SDK-1.1.

Для трансляции программы используется пакет Keil Software. Keil Software поддерживает все стадии разработки приложения: создание исходного файла на С или Ассемблере, трансляцию, исправление ошибок, линкование объектных файлов, тестирование приложения.

В пакете Keil Software содержатся следующие средства разработки для микроконтроллера 8051:

• С51 - компилятор С;

• Макроассемблер А51;

• Динамический загрузчик/компоновщик BL51;

• Конвертер объектных файлов ОС51;

• Конвертер объектных и НЕХ-файлов ОН51;

• Менеджер библиотек LIB 51;

• Симулятор dScope-51 (для Windows);

• Отладчик/компилятор ц Vision/51 (для Windows );

• Операционная система реального времени (Real-Time Operating System - RTX).

7. Оттранслируйте пример простейшей программы и загрузите ее в SDK-1.1. Изучите назначение каждой строки исходного текста в программе. Измените программу и попробуйте ее оттранслировать и загрузить в SDK-1.1.

Для трансляции своей программы запустите командный файл make.bat.

Пример командного файла:

@echo off

remстираем загрузочный модуль

Del test.hex

remТранслируем стартовый модуль

А51 startup.a51

remЕсли ассемблер вернул код ошибки то завершаем командный файл

If errorlevel l goto ERROR

remТранслируем нашу программу на языке С

С51 test.с CODE LARGE WL(2)

remЕсли ассемблер вернул код ошибки то завершаем командный файл

If errorlevel l goto ERROR

remФормирование файла в формате ОМЕ из объектных модулей.

rem Сегмент кода начинается с адреса 0x2100, сегмент данных с адреса 0x7000







Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.29.190 (0.013 с.)