#include<reg51.h> #include<absacc.h> #include<stdio.h>

#define lcd_data P2 #define lcd_rs P1_0 #define lcd_rw P1_1 #define lcd_en P1_2

#define lcd_cmd P2 #define lcd_cmd_rs P1_3 #define lcd_cmd_rw P1_4 #define lcd_cmd_en P1_5

#define size_x 10 #define size_y 10

sbit btn_up = P3^0; sbit btn_down = P3^1; sbit btn_left = P3^2; sbit btn_right = P3^3; sbit btn_enter = P3^4;

unsigned char pos_x = 0; unsigned char pos_y = 0;

unsigned char line_map[size_x][size_y] = { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1} };

void lcd_init() { lcd_cmd= 0x38; lcd_cmd_rs= 0; lcd_cmd_rw= 0; lcd_cmd_en= 1; lcd_cmd_en= 0;

lcd_cmd= 0x01;
lcd_cmd_rs= 0;
lcd_cmd_rw= 0;
lcd_cmd_en= 1;
lcd_cmd_en= 0;

lcd_cmd= 0x0C;
lcd_cmd_rs= 0;
lcd_cmd_rw= 0;
lcd_cmd_en= 1;
lcd_cmd_en= 0;

lcd_cmd= 0x80;
lcd_cmd_rs= 0;
lcd_cmd_rw= 0;
lcd_cmd_en= 1;
lcd_cmd_en= 0;

}

void lcd_write_char(unsigned char c) { lcd_data = c; lcd_rs = 1; lcd_rw = 0; lcd_en = 1; lcd_en = 0; Delay(20); }

void lcd_write_string(unsigned char *s) { while(*s) { lcd_write_char(*s++); } }

void show_map() { unsigned char i, j; for(i=0; i<size_x; i++) { for(j=0; j<size_y; j++) { if(line_map[i][j] == 0) lcd_write_char(' '); else if(line_map[i][j] == 1) lcd_write_char('*'); else if(line_map[i][j] == 2) lcd_write_char('@'); } lcd_write_char(' '); } }

void move_pos() { if(btn_up == 0) { if(pos_x > 0 && line_map[pos_x-1][pos_y] != 1) pos_x--; } else if(btn_down == 0) { if(pos_x < size_x-1 && line_map[pos_x+1][pos_y] != 1) pos_x++; } else if(btn_left == 0) { if(pos_y > 0 && line_map[pos_x][pos_y-1] != 1) pos_y--; } else if(btn_right == 0) { if(pos_y < size_y-1 && line_map[pos_x][pos_y+1] != 1) pos_y++; } else if(btn_enter == 0) { if(line_map[pos_x][pos_y] == 0) line_map[pos_x][pos_y] = 2; else line_map[pos_x][pos_y] = 0; }

lcd_write_char('');
show_map();

}

void main() { lcd_init(); show_map();

while(1)
{
	move_pos();
	Delay(1000);
}

原文地址: https://www.cveoy.top/t/topic/ljGq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录