- •Исходные данные
- •Устройства индикации:
- •2.1 Матричный индикатор:
- •2.2 Способы индикации
- •4.Разработка принципиальной схемы.
- •4.1 Выбор микроконтроллера.
- •4.2 Последовательный интерфейс rs-232
- •4.3 Выбор матричного индикатора
- •4.4 Выбор регистра сдвига
- •Для усиления тока строк установим полевой транзистор. Будем устанавливать пт на каждый вывод сдвигового регистра.
- •Алгоритм программы
- •Программа
- •Принцип работы:
- •Список использованной литературы:
Для усиления тока строк установим полевой транзистор. Будем устанавливать пт на каждый вывод сдвигового регистра.
Данный полевой триод должен иметь большой номинальный ток (5-10-40 А) и очень маленькое пороговое напряжение (0,5-1,5-2 В), поэтому выбираем транзистор серии: IRF7324
Он содержит 2 транзистора в одном корпусе, поэтому таких ПТ в данном курсовом проекте понадобится не 16 штук, а всего 8. Подробные характеристики указаны в приложенной литературе[9].
Т.к. через резисторы R2-R17(строки) ток не протекает, их номиналы выбираем равными 100 Ом.
Рассчитаем сопротивления R18-R217(столбцы):
Таким образом, выбираем данные сопротивления равными 47 Ом[5].
Алгоритм программы
Настройка режима
линий P0.6,
Р0.4, Р0.0 и Р0.1
Настройка
направления линии P0.15
Настройка UART
Настройка
SPI
Настройка таймера
и схемы совпадения, включение таймера
Настройка системы
прерываний
Формирование
карты матрицы
Приём данных
По RS-232
НЕТ
ДА
Формирование
карты
Программа
#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); // вечный цикл
}