Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
void write(void);
void read(void);
void status_wait(void);
void LCD_char(unsigned char n);
void Clearscreen(void);
void newline(void);
void Reset_cursor(void);
//*****************************************************************
//Переменные
//*****************************************************************
#pragma abs_address 0x3600
static int win_array[ARRAY_MAX+1]
= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
#pragma end_abs_address
#pragma abs_address 0x3500
int board_array_single [ARRAY_MAX+1];
int board_array_multi[SIZE][SIZE];
int win; //использовать
как булевы переменные
int direction; //направление движения
int row; //выделить ряд
int col; //выделить колонку
int select; //если кнопка нажата
int i; //текущая переменная
#pragma end_abs_address
//*****************************************************************
// Основная программа
//*****************************************************************
void main {
win = 0; //инициализировать все переменные
direction = 0;
row = 1;
col = 1;
select = 0;
i = 0;
DDRDLC = 0x1F; //конфигурировать порт DDRDLC как выходной
DDRP = 0xFF; // конфигурировать линии порта P как выходные
DDRS = 0x00; // конфигурировать линии порта S как входные
TSCR = 0x80; //включить таймер
initialize_LCD; //инициализировать ЖКД
Clearscreen;
Reset_cursor;
display_intro;
for (i=0; i < ARRAY_MAX+1; i++) board_array_single[i] = win_array[i];
convert_single_multi(board_array_single, board_array_multi);
display_board(board_array_multi, row, col, direction);
pause; // ожидание, пока пользователь не нажмет кнопку X
LCD_output("Now the board is"); // вывод сообщения
LCD_output("randomized. You ");
LCD_output("may begin by ");
LCD_output("choosing a piece");
LCD_output("to move, and its");
LCD_output("direction. ");
newline;
pause;
randomize_board(board_array_single); // Случайный выбор
исходного
// положения фишек
convert_single_multi(board_array_single, board_array_multi);
display_board(board_array_multi, row, col, direction);
while(win == 0){ //цикл повторяется до успешного окончания игры
while (select == 0) {
//если была нажата кнопка x, то задается направ-
// ление движения ряд и колонка выделенной фишки
get_move(&direction, &row, &col, &select);
Reset_cursor; // установить курсор в верхнее положение
if (select == 0)
display_board(board_array_multi, row, col, direction);
}
//проверить корректность движения, повторить его, если
// оно некорректно, или вывести сообщение об ошибке
try_move(direction, row-1, col-1, board_array_multi);
select = 0;
convert_multi_single(board_array_multi, board_array_single);
win = check_win(board_array_single);
Clearscreen;
// показать текущее состояние игры
display_board(board_array_multi, row, col, direction);
}
display_win; // вывести сообщение об успешном окончании игры
}
//*****************************************************************
// display_intro: DISPLAY INTRO MESSAGE
//*****************************************************************
void display_intro {
newline;
LCD_output(" WELCOME ");
LCD_output(" TO ");
LCD_output(" SLIDING PUZZLE ");
new_line;
pause;
LCD_output("The object of ");
LCD_output("this game is to ");
LCD_output("move each #'ed ");
LCD_output("puzzle piece so ");
LCD_output("that you end up ");
LCD_output("in the order ");
LCD_output("seen below. The ");
LCD_output("star shows the ");
LCD_output("current piece ");
LCD_output("selected. You ");
LCD_output("can choose a ");
LCD_output("different piece ");
LCD_output(" by using the ");
LCD_output(" arrow buttons ");
newline;
pause;
Поделиться с друзьями: