沈阳设计网站公司,金数据可以做网站吗,wordpress微信验证码,wordpress 无广告视频文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用Proteus8仿真51单片机控制器#xff0c;使用8*8LED点阵、按键模块等。
主要功能#xff1a; 系统运行后#xff0c;可操作4个按键控制小蛇方向。 二、软件设计
/*
作者#xff1a;嗨小易… 文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用Proteus8仿真51单片机控制器使用8*8LED点阵、按键模块等。
主要功能 系统运行后可操作4个按键控制小蛇方向。 二、软件设计
/*
作者嗨小易QQ3443792007*/#include PBDATA.H/****************************************蛇体 和 食物 相关的数据 和 函数
*****************************************/
uchar bodyRow[16], bodyCol[16]; // 蛇身的数组uchar code dirRow[4] {-1, 0, 1, 0}; // 上右下左方向X增量
uchar code dirCol[4] {0, 1, 0, -1}; // 上右下左方向Y增量
extern uchar dir;
uchar maxRow 8, maxCol 8; // 行的范围 [0, maxRow), 列范围同理
uchar speed 5; // 蛇的速度单位是50ms
uchar snakeBodyLength 0; // 蛇身体的长度
uchar isDead 0; // 表示蛇是否死亡uchar foodRow 0, foodCol 0, needCreate 1; // 食物坐标和食物是否被吃标志void InitSnake()
{bodyRow[0] 7;bodyCol[0] 2;bodyRow[1] 7;bodyCol[1] 1;snakeBodyLength 2;dir 1;// 生成蛇打印的内容Matrix_GenerateTab(bodyRow, bodyCol, snakeBodyLength);// 设置时间种子srand(0);
}void GenerateFood()
{uchar i 0;while(needCreate) {// 随机生成 Row 和 ColfoodRow rand() % maxRow;foodCol rand() % maxCol;// 判断食物是否和当前蛇身体冲突 for(i 0; i snakeBodyLength; i) {if(bodyRow[i] foodRow bodyCol[i] foodCol) {break;}}if(i snakeBodyLength) {needCreate 0;bodyRow[snakeBodyLength] foodRow;bodyCol[snakeBodyLength] foodCol;} }
}/****************************************定时器相关的代码
*****************************************/uchar count; // time count * 50msvoid InitTimer()
{TMOD 0x01;// 初始值 : 50msTH0 (65536 - 50000) / 256; // 初始值取高八位TL0 (65536 - 50000) % 256; // 初始值取低八位// 中断开启ET0 1; // 开启定时器0的中断EA 1; // 开启总的中断// 配置TCON// TR0 : 1, 启动定时器0TR0 1;
}void TimerIsr() interrupt 1
{uchar nextHeadRow 0, nextHeadCol 0, i 0;// 重新装填// 初始值 : 50msTH0 (65536 - 50000) / 256; // 初始值取高八位TL0 (65536 - 50000) % 256; // 初始值取低八位if(count speed !isDead) { // count * 50ms 触发一次count 0;// 生成食物GenerateFood();// 预测蛇头nextHeadRow bodyRow[0] dirRow[dir];nextHeadCol bodyCol[0] dirCol[dir];if(nextHeadRow maxRow || nextHeadRow 0 || nextHeadCol maxCol || nextHeadCol 0) {isDead 1;return;}// 身体撞击for(i 0; i snakeBodyLength; i) {if(nextHeadRow bodyRow[i] nextHeadCol bodyCol[i]) {isDead 1;return;}}// 吃到食物与否if(nextHeadRow foodRow nextHeadCol foodCol) {snakeBodyLength 1;needCreate 1;// 再生成新的食物GenerateFood();}// 蛇身体移动for(i snakeBodyLength - 1; i 0; i--) {bodyRow[i] bodyRow[i - 1];bodyCol[i] bodyCol[i - 1];}// 新的蛇头bodyRow[0] nextHeadRow;bodyCol[0] nextHeadCol;// 生成需要显示的图形Matrix_GenerateTab(bodyRow, bodyCol, snakeBodyLength 1);}count; // 每50ms进行一次按键扫描DirKeyScan();
}void main()
{uchar i 0, a 0;count speed;InitSnake();InitTimer();while(1){if(isDead) {Matrix_ShowAll();} else {// 打印蛇的身体Matrix_ShowPointByCode(); }}
} 三、实验现象
B站演示视频https://space.bilibili.com/444388619 联系作者
视频地址https://space.bilibili.com/444388619/video 专注于51单片机、STM32、国产32、DSP、Proteus、arduino、ESP32、物联网软件开发PCB设计视频分享技术交流。