Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

Рис. 7.38. Структура микропроцессорной системы для игры в «15»

Рис. 7.39. Принципиальная схема системы для игры в «15»

На рис. 7.40 показана структура программы для игры в «15», в которой главная программа обращается к шести субмодулям. На рисунке показан также ряд функций, выполняемых каждым субмодулем. Соответствующая

блок схема алгоритма приведена на рис. 7.41.

Рис. 7.40. Структура программы для игры в «15»

Рис. 7.41. Блок схема алгоритма программы для игры в «15»

7.7.5. О компонентах системы

Интеллектуальный точечный графический дисплей AND 1391 — это полная точечная матрица ЖКД со встроенным модулем контроллера дисплея и ОЗУ буфера экрана. Он может выводить 21 символ на каждой из 18 строк дисплея. Вы можете прочесть об этом дисплее и функциях его обеспечения в главе 5.

7.7.6. Программный код

//Имя файла: sliding.с

//Программа: Игра в "15"

//Авторы: Scott Lewis, Daniel Pack,

//Дата создания: Начата 27 апреля 2004

//окончена 7 Мая 2004

// Описание: Эта программа реализует игру в "15". Цель игры

// заключается в том, чтобы выстроить фишки по по ряду номеров. Вы

// можете только перемещать на пустое место любую соседнюю фишку.

// Программа постоянно находится в памяти системы по адресу

// $2000. Программа отображает исходное состояние фишек, затем

// показывает состояние к которому необходимо прийти в

// результате. Программа размещает все фишки в случайном

// порядке, и затем позволяет пользователю начать игру

// Конфигурация системы

// Программа: 0x2000

// Данные: 0x3500

// Стек: 0x4000

//

// PDLC0: /WR PP0 Data 0 PS0: Не используется

// PDLC1: /RD PP1 Data 1 PS1: Не используется

// PDLC2: /CE PP2 Data 2 PS2: Кнопка "Влево"

// PDLC3: C/D PP3 Data 3 PS3: Кнопка "Выбор"

// PDLC4: /Reset PP4 Data 4 PS4: Кнопка "Вниз"

// PDLC5: NC PP5 Data 5 PS5: Кнопка "Вправо"

// PDLC6: NC PP6 Data 6 PS6: Кнопка "Вверх"

// PDLC1: NC PP7 Data 7 PS7: Не используется

//

// Выводы ЖКД

// GND - 2 1 - GND

// -14V - 3 4 - +5V

// /WR - 5 6 - /RD

// /CE - 7 8 - C/D

// NC - 9 10 - /Reset

// DO - 11 12 - D1

// D2 - 13 14 - D3

// D4 - 15 16 - D5

// D6 - 17 18 - D7

// GND - 19 20 - NC

//******************************************************

#include <912b32.h> //
описание портов - header file

// приведен в приложении

//********************************************************************

// Постоянные

//********************************************************************

#define ARRAY_MAX 15

#define ZERO 0x00

#define L_BUTTON 0x04 // сигналы кнопок

#define R_BUTTON 0x20

#define U_BUTTON 0x40

#define D_BUTTON 0x10

#define S BUTTON 0x08

#define LEFT 1 // выбор направления

#define RIGHT 2

#define UP 3

#define DOWN 4

#define SELECT 5

#define SIZE 4 // Размер строки/колонки

//********************************************************************

// Используемые функции

//********************************************************************

int check_win(int array[ARRAY_MAX+1]);

void convert_multi_single(int A[SIZE][SIZE], int В[SIZE][SIZE]);

void convert_single_multi(int A[ARRAY_MAX+1], int В[SIZE][SIZE]);

void display_board(int A[SIZE][SIZE], int row, int col, int direction);

void display_board2(int board_array[ARRAY_MAX+1]);

void display_error(int n);

void display_intro(void);

void display_win(void);

void get_move(int *direction, int *row, int *col, int *select);

void randomize_board(int board_array[]);

void swap(int row, int col, int new_row, int new_col, int array[SIZE][SIZE]);

void swap2(int from, int to, int array[ARRAY_MAX+1]);

void try_move(int move, int row, int col, int array[SIZE][SIZE]);

unsigned char mode(unsigned char num, int modulus);

void LCD_output(char s[]);

void int2char(int i);

void pause(void);

void delay(int usec);

void enable(void);

void initialize_LCD(void);

void command(unsigned char n);

void data(unsigned char n);

Поделиться с друзьями: