Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Название:Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
- Автор:
- Жанр:
- Издательство:Издательский дом «ДМК-пресс»
- Год:2007
- Город:Москва
- ISBN:5-9706-0034-2
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С краткое содержание
В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах.
Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров.
Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.
Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
LCD_output("8");
break;
case 9:
LCD_output("9");
break;
}
}
//********************************************************************
//Check_Win: Эта функция проверяет соответствие текущего положения ситуации
// победы при победе win - 1, в остальных случаях - 0
//********************************************************************
int check_win(int array[ARRAY_MAX+1]) {
int i;
int win = 1;
for (i=0; i
if (array[i] != win_array[i]) win = 0;
}
return win;
}
//********************************************************************
//Convert_multi_single: Эта функция преобразует двухмерный массив
//в одномерный
//********************************************************************
int convert_multi_single(int A[SIZE][SIZE], int В[ARRAY_MAX+1]) {
int n = 0;
int i = 0;
int j = 0;
for (i=0; i
for (j=0; j
B[n] = A[i][j] ;
n++;
}
}
}
//****************************************************************
//Convert_single_multi: Эта функция преобразует одномерный массив
//в двухмерный
//****************************************************************
void convert_single_multitint A[ARRAY_MAX+1], int В[SIZE][SIZE]) {
B[0][0] = A[0];
B[0][1] = A[1];
B[0][2] = A[2];
B[0][3] = A[3];
B[1][0] = A[4];
B[1][1] = A[5];
B[1][2] = A[6];
B[1][3] = A[7];
B[2][0] = A[8];
B[2][1] = A[9];
B[2][2] = A[10];
B[2][3] = A[11];
B[3][0] = A[13];
B[3][2] = A[14];
B[3][3] = A[15];
}
//********************************************************************
// Try_move: Эта функция позволяет игроку определить некорректность
// своего хода. Если он корректен, то движение выполняется,
// если же некорректен, то выводится соответствующее сообщение
//********************************************************************
void try_move(int move, int row, int col, int array[SIZE][SIZE]) {
switch(move) {
case UP:
if ((row-1 >=0) && (array[row-1][col] == 0))
swap(row, col, row-1, col, array);
else display_error(UP);
break;
case DOWN:
if ((row+1 <= SIZE) && (array[row+1][col] == 0))
swap(row, col, row+1, col, array);
else display_error(DOWN);
break;
case LEFT:
if ((col-1 >=0) && (array[row][col-1] == 0))
swap(row, col, row, col-1, array);
else display_error(LEFT);
break;
case RIGHT:
if ((col+1 < = SIZE) && (array[row][col+1] == 0))
swap(row, col, row, col+1, array);
else display_error(RIGHT);
break;
}
}
//********************************************************************
//********************************************************************
//Swap: Эта функция заменяет два значения двухмерным массивом.
//********************************************************************
void swap(int row, int col, int new_row, int new_col, int array[SIZE][SIZE]) {
int temp;
temp = array[row][col];
array[row][col] = array[new_row][new_col];
array[new_row][new_col] = temp;
}
//********************************************************************
//Swap2: Эта функция заменяет два значения одномерным массивом.
//********************************************************************
void swap2(int from, int to, int array[ARRAY_MAX+1]) {
int temp = array[from];
array[from] = array[to];
array[to] - temp;
}
//********************************************************************
//ERROR: Эта функция выводит сообщения об ошибке
//********************************************************************
void display_error(int n) {
LCD_Output("ERROR: ");
switch(n) {
case LEFT:
LCD_output("no move L");
break;
case RIGHT:
LCD_output("no move R");
break;
case UP:
LCD_output("no move U");
break;
case DOWN:
LCD_output("no move D");
break;
}
pause();
}
//********************************************************************
//********************************************************************
//LCD_output: Эта функция выводит на дисплей строку
//********************************************************************
void LCD_output(char s[]) {
int n = 0;
while (s[n] != '\0') {
LCD_char(s[n]);
++n;
}
}
//********************************************************************
//Pause: Функция реализует ожидание, пока игрок не нажмет кнопку
// "Выбор"
//********************************************************************
void pause() {
unsigned char с = ZERO;
LCD_output("(Please press X)");
while (c != S_BUTTON) {
c = PORTS;
с = c & 0x7C;
}
Clearscreen();
Reset_cursor();
}
//********************************************************************
//Delay: Эта функция вводит задержку на n мкс, если входная
// величина равна n
//********************************************************************
void delay(int usec) {
int i,j;
for (i=0;i
for (j=0; j < 7; j++) {}
}
}
//********************************************************************
//Initialize_LCD: Функция инициализирует ЖКД
//********************************************************************
void initialize_LCD(void) {
char temp = 0x00;
PORTDLC = 0xFF;
PORTDLC = PORTDLC & 0xEF; // сброс экрана (RESET = 0)
delay(2000); // задержка в 2 мс
PORTDLC = 0x7F; // выключение сброса
write(); //включение записи
command(0x80);
//установка текстового режима
data(0x0); //проверка установки слова
data(0x10);
command(0x40);
data(0x10); // устанавливается размер области текста (1E)
data(0x00); // - 0x1000
command(0x41);
//включается дисплей текста, курсор, выключается мигание
command(0x94);
command(0xA7); //курсор 8×8 точек
}
//********************************************************************
//Enable: Функция разрешает работу ИС
//********************************************************************
void enable(void) {
PORTDLC = PORTDLC | 0x04; // Установить 1 на линии enable
PORTDLC = PORTDLC & 0xFB; // Установить 0 на линии enable
}
//********************************************************************
//Disable: Функция запрещает работу ИС
//********************************************************************
void disable(void) {
PORTDLC = PORTDLC | 0x04;
}
//********************************************************************
//Command: Функция посылает команду отключения на ЖКД
//********************************************************************
void command(unsigned char n) {
status_wait();
PORTP = n;
PORTDLC = 0xFF;
PORTDLC = PORTDLC & 0xFE; // сброс записи
enable(); // сброс флага CE
delay(10); // задержка не менее 80 нс
disable(); // включение флага CE
}
//********************************************************************
//Data: Функция пересылает данные на ЖКД
//********************************************************************
void data(unsigned char n) {
status_wait();
PORTP = n;
PORTDLC = 0xFF;
PORTDLC = PORTDLC & 0xF7; // перевести C/D на низкий уровень
PORTDLC = PORTDLC & 0xFE; // перевести WR на низкий уровень
PORTDLC = PORTDLC & 0xFB;
delay(10);
disable();
}
//********************************************************************
//Write: Функция конфигурирует порт P как выходной
Интервал:
Закладка: