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<usec; 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 ΠΊΠ°ΠΊ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ
//********************************************************************
void write() {
DDRP = 0xFF;
}
//********************************************************************
//Read: Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΡ P ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ
//********************************************************************
void read() {
DDRP = 0x00;
}
//********************************************************************
//Status_wait: Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΠΠ
//********************************************************************
void status_wait() {
char temp = 0x00;
DDRP = 0x00;
PORTDLC = PORTDLC | 0x0F; // ΡΠ±ΡΠΎΡΠΈΡΡ Π²ΡΠ΅
PORTDLC = PORTDLC & 0xFD; // ΡΠ±ΡΠΎΡ ΡΠ»Π°Π³Π° RD
enable();
delay(10);
while ((temp & 0x03) != 0x03) {
temp = PORTP;
}
disable();
DDRP = 0xFF;
}
//********************************************************************
//LCD_char: Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ASCII ΠΊΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΠΠ
//********************************************************************
void LCD_char(unsigned char n) {
data(n-0x20);
command(0xC0);
}
//********************************************************************
//Clearscreen: Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΈΡΠ°Π΅Ρ ΡΠΊΡΠ°Π½ ΠΠΠ
//********************************************************************
void Clearscreen() {
int i,j;
Reset_cursor();
for (i=0; i < 16; i++) for (j=0; j<16; j++) LCD_char(' ');
Reset_cursor();
}
//********************************************************************
//Newline: Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ Π½Π° ΡΠΊΡΠ°Π½ ΠΠΠ
//********************************************************************
void newline() {
int i;
for (i=0; i < 16; i++)
LCD_char(' ');
}
//********************************************************************
//Reset_cursor: Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΡΡΡΠΎΡ ΠΠΠ Π² Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ
//********************************************************************
void Reset_cursor() {
data(0x00);
data(0x10);
command(0x24);
}
//********************************************************************
7.7.7. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
Π‘ΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ ΠΈΠ³ΡΡ Π² Β«15Β» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΡΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΡΠΈΡΠΊΠΈ: ΡΡΡΠ΅Π»ΠΊΡ Β«ΠΠ²Π΅ΡΡ Β», ΡΡΡΠ΅Π»ΠΊΡ Β«ΠΠ½ΠΈΠ·Β», ΡΡΡΠ΅Π»ΠΊΡ Β«ΠΠΏΡΠ°Π²ΠΎΒ», ΡΡΡΠ΅Π»ΠΊΡ Β«ΠΠ»Π΅Π²ΠΎΒ» ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΡΠ±ΠΎΡΒ». ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½ΠΎΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΡΠΎΠ»Π±ΡΠ°. ΠΠ΄Π½Π°ΠΆΠ΄Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΈΠ³ΡΡ Π²Π·ΡΠΎΡΠ»ΡΠΌΠΈ ΠΈ Π΄Π΅ΡΡΠΌΠΈ.
7.8. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΠΈΠ΄Π΅Π½ΡΠ½ΠΎΠ³ΠΎ Flash ΠΠΠ£ ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° B32 Π² ΡΠΎΡΡΠ°Π²Π΅ ΠΏΠ»Π°ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ MC68HC912B32EVB
Π Π³Π»Π°Π²Π΅ 4 ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΠ B32 ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° 68HC12. ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ, Π² ΡΠΎΡΡΠ°Π² ΠΠ B32 Π²Ρ ΠΎΠ΄ΠΈΡ ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠΈΠΏΠ° Flash ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ 32ΠΠ±. Π ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΌ Π½Π° ΠΏΠ»Π°ΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ MC68HC912B32EVB ΠΌΠΈΠΊΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Flash ΠΠΠ£ Π·Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° D-Bug12. ΠΡΠ»ΠΈ Π²Ρ ΠΆΠ΅Π»Π°Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄ Π½Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠ°ΡΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠ΅ΡΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° D-Bug12. ΠΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΅Π΅, ΡΡΠΎΠ±Ρ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.