Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РАСЧЕТНО_ПОЯСНИТЕЛЬНАЯ ЗАПИСКА.doc
Скачиваний:
3
Добавлен:
16.09.2019
Размер:
485.38 Кб
Скачать

Для усиления тока строк установим полевой транзистор. Будем устанавливать пт на каждый вывод сдвигового регистра.

Данный полевой триод должен иметь большой номинальный ток (5-10-40 А) и очень маленькое пороговое напряжение (0,5-1,5-2 В), поэтому выбираем транзистор серии: IRF7324

Он содержит 2 транзистора в одном корпусе, поэтому таких ПТ в данном курсовом проекте понадобится не 16 штук, а всего 8. Подробные характеристики указаны в приложенной литературе[9].

Т.к. через резисторы R2-R17(строки) ток не протекает, их номиналы выбираем равными 100 Ом.

Рассчитаем сопротивления R18-R217(столбцы):

Таким образом, выбираем данные сопротивления равными 47 Ом[5].

  1. Алгоритм программы

Настройка режима линий P0.6, Р0.4, Р0.0 и Р0.1

Настройка направления линии P0.15

Настройка UART

Настройка

SPI

Настройка таймера и схемы совпадения, включение таймера

Настройка системы прерываний

Формирование карты матрицы

Приём данных

По RS-232

НЕТ

ДА

Формирование

карты

  1. Программа

#include <LPC214X.H>

#include "Font_12x16.H" //файл, содержащий таблицу знакогенератора

const char Str[]=" "; //строковая константа хранит движущиеся символы

int I,i,k; //

const int L=200; //ширина индикатора (число точек)

const int M=20; //число кадров, когда строка остается неподвижной

const int N=sizeof(Str)-1; //формирование длины строки (число символов)

int T=0, K=0; //счетчики столбцов изображения и столбцов индикатора

char Map[N*6]; //карта индикатора, которая хранит изображение всей строки, поэтому имеет размерность 6N

__irq void STROKA() // процедура обработки прерывания

{

unsigned int Code;

I=K % L+T; // для «цикличности»,посл. столбец сменяется первым

if (I>=N*6) I-=N*6;//Если I больше значения 6N, он откорректируется

Code=0x100 << K % L | Map[I];// Формирование управляющего кода

S0SPDR=~Code; //передача по SPI

while (!(S0SPSR & 0x80)) ; //передача?

IO0SET=0x8000; //формирование строба на входах RCK микросхем

IO0CLR=0x8000; //74HC595, подключенных параллельно к линии P0.15.

if (++K==L*M)

{

K=0;

if (++T==6*N) T=0;

}

T0IR=1; // cброс флага запроса прерывания

VICVectAddr=0;

}

int main (void)//основная программа

{

IO0DIR=0x8000; //настройка на выход линии P0.15

PINSEL0=0x1100; //перевод линии P0.6 в режим MOSI, линии P0.4 в SCK

S0SPCR=0x64; //настройка передатчика SPI

S0SPCCR=8; //настройка тактовой частоты на линию SCK

for (k=0;k<N;k++) //формирование карты индикатора

{

for (i=0;i<6;i++)

{

Map[k*6+i]=Font_6x8_Data[Str[k]*6+i];

}

}

T0MR0=9375; //настройка таймера

T0MCR=3; //разрешить сброс и запрос прерывания при совпадении

T0TCR=1; //включить таймер

VICVectAddr0=(unsigned) STROKA; // настройка прерывания

VICVectCntl0=0x20|4;

VICIntEnable=0x10;

while (1); // вечный цикл

}