• cartman2000
    了解作者
  • C/C++
    开发工具
  • 167KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2020-06-21 09:52
    上传日期
C51编写的贪吃蛇程序 贪吃蛇 按键控制 点阵 简易
51贪吃蛇.rar
  • 51贪吃蛇
  • bin
  • Debug
  • 51贪吃蛇.omf
    7.5KB
  • 51贪吃蛇.lk
    400B
  • 51贪吃蛇.ihx
    5.6KB
  • 51贪吃蛇.cdb
    24.1KB
  • 51贪吃蛇.map
    109.6KB
  • 51贪吃蛇.mem
    1.2KB
  • 51贪吃蛇.hex
    6.4KB
  • obj
  • Debug
  • key.sym
    59.2KB
  • DotMatrix.rst
    33.6KB
  • digplay.lst
    39.9KB
  • digplay.rst
    39.9KB
  • key.rst
    45.4KB
  • key.rel
    15KB
  • digplay.asm
    14.2KB
  • LCD1602.rel
    13.9KB
  • DotMatrix.adb
    3.1KB
  • LCD1602.adb
    3.6KB
  • DotMatrix.rel
    10.1KB
  • main.asm
    36.4KB
  • LCD1602.rst
    46.4KB
  • main.sym
    115.4KB
  • main.rst
    101KB
  • key.asm
    16.3KB
  • main.adb
    5.6KB
  • main.lst
    101KB
  • digplay.sym
    55.5KB
  • key.lst
    45.4KB
  • main.rel
    47.2KB
  • LCD1602.asm
    17.7KB
  • DotMatrix.sym
    52.6KB
  • DotMatrix.asm
    12.3KB
  • key.adb
    3.1KB
  • DotMatrix.lst
    33.6KB
  • LCD1602.sym
    59.8KB
  • LCD1602.lst
    46.4KB
  • digplay.rel
    12.1KB
  • digplay.adb
    3.1KB
  • key.c
    2.9KB
  • 51贪吃蛇.layout
    1.3KB
  • main.c
    5.8KB
  • DotMatrix.h
    172B
  • key.h
    155B
  • LCD1602.h
    208B
  • common.h
    199B
  • DotMatrix.c
    1.3KB
  • digplay.c
    1.6KB
  • LCD1602.c
    1.8KB
  • 51贪吃蛇.cbp
    1.7KB
  • digplay.h
    118B
  • 51贪吃蛇.depend
    808B
内容介绍
/*51贪吃蛇*/ /******************************** 头文件包含 *********************************/ #include "common.h" #include "DotMatrix.h" #include "key.h" #include "digplay.h" #include <stdlib.h> /******************************** 定义变量 *********************************/ #define MAX_LONG 64 struct SN { u8 dir;//蛇的方向 u8 life;//蛇的生命 u8 lenth;//蛇的长度 int x[MAX_LONG];//第i个身体结点的横坐标 int y[MAX_LONG]; //第i个身体结点的纵坐标 }; struct FOOD { int x; int y; int flag; }; u8 gDig[8];//代表点阵屏的地图,用8位16进制数表示一行方向上的led亮灭情况 int tlimit=10,t=0;//计时间隔 int gDigValue[8]; struct SN __xdata snake;//定义蛇 struct FOOD food;//定义食物 /******************************** 定义函数 *********************************/ void INIT_SNAKE(void);//初始化时钟、蛇、创建食物。 void CreatFood(void);//创建食物 void RUN_SNAKE(void);//蛇移动,以及吃到食物增加身体长度。 void DEAD_SNAKE(void);//判断蛇是否死亡 void KEY_SCAN_SNAKE(void);//通过查询按键获得方向,以及对其他功能键功能实现 void DIGPORT_SHOW(void);//将蛇和食物的数据通过该函数转化成在点阵显示屏上显示的数据并显示。 void GameOver(void);//判断游戏是否结束,当蛇布满整个屏幕获得胜利,数码管显示WIN;当蛇生命值为0,游戏失败,数码管显示GameOver。 void delay10ms(void); //误差 0us void int0init(void);//初始化中断按键1 void int1init(void);//初始化中断按键2 void int0(void) __interrupt (0) __using (0);//中断按键1 void int1(void) __interrupt (2) __using (0);//中断按键2 /******************************** 主函数 *********************************/ void main(void) { int time=0; INIT_SNAKE(); TR0=1;//开始计时 while(1) { KEY_SCAN_SNAKE(); time=TH0*256+TL0; if(time >= 10000)//1毫秒记一次 { t++; } if(t>=tlimit)//1秒移动一次 { RUN_SNAKE(); TH0=0; TL0=0; t=0; } DEAD_SNAKE(); GameOver(); gDigValue[0]=snake.lenth/10; gDigValue[1]=snake.lenth%10; DigDisplay();//将蛇长显示在数码管上 DIGPORT_SHOW(); } } /******************************** 定义函数 *********************************/ void INIT_SNAKE(void)//初始化时钟、蛇、创建食物。 { TMOD = 0x01; // 设T0为方式1,GATE=1; TH0 = 0; TL0 = 0; ET0 = 1; // 允许T0中断 EA = 1; // 开启总中断 int0init();//开启中断 int1init(); for(u8 i=0;i<8;i++) gDigValue[i]=17; snake.life=1; snake.dir=2; snake.x[1]=0; snake.y[1]=0; snake.x[0]=1; snake.y[0]=0; snake.lenth=2; CreatFood(); } void RUN_SNAKE(void)//蛇移动,以及吃到食物增加身体长度。 { for(int i=snake.lenth; i>0; i--)//先从蛇尾的身体结点开始,保存上一点的坐标信息 { snake.y[i]=snake.y[i-1]; snake.x[i]=snake.x[i-1]; } switch(snake.dir)//根据方向改变蛇头的坐标 { case 0:snake.y[0]-=1;break;//上 case 1:snake.x[0]-=1;break;//左 case 2:snake.x[0]+=1;break;//右 case 3:snake.y[0]+=1;break;//下 default:break; } if(snake.x[0]==food.x && snake.y[0]==food.y) { snake.lenth++; CreatFood(); } } void CreatFood(void)//创建食物 { u8 n=0; n=rand()%64; food.x=n%8; food.y=n/8; for(u8 i=0;i<snake.lenth;i++)//判断食物是否建立在蛇的身体上 { if(food.x==snake.x[i] && food.y==snake.y[i])//食物与蛇重合 { CreatFood();//递归调用重新产生一个食物 return; } } } void DIGPORT_SHOW(void)//将蛇和食物的数据通过该函数转化成在点阵显示屏上显示的数据并显示。 { for(u8 i=0;i<8;i++)//初始化蛇在点阵屏的位置 { gDig[i]=0x00; } for(u8 i=0;i<snake.lenth;i++)//将蛇的每一个结点的位置移入16进制数中 { gDig[snake.y[i]] |= 1 << snake.x[i]; } gDig[food.y] |= 1 << food.x; SHOW_MAP(gDig); } void KEY_SCAN_SNAKE(void)//通过查询按键获得方向,以及对其他功能键功能实现 { u8 key=0; key=KEY_SCAN_REFLECT(); if(key < 10) snake.dir=key; if(key == 11) tlimit=15; if(key == 12) tlimit=10; if(key == 13) tlimit=5; if(key == 14) tlimit=2; } void DEAD_SNAKE(void)//判断蛇是否死亡 { if(snake.x[0]<0 || snake.x[0]>7 || snake.y[0]<0 || snake.y[0]>7)//撞墙死,呃啊 { snake.life=0; return; } for(u8 i=1;i<snake.lenth;i++)//吃自己死,呃啊 { if(snake.x[0]==snake.x[i] && snake.y[0]==snake.y[i]) { snake.life=0; return; } } } void GameOver(void)//判断游戏是否结束,当蛇布满整个屏幕获得胜利,数码管显示WIN;当蛇生命值为0,游戏失败,数码管显示GameOver。 { if(snake.lenth==64) { while(1) DigDisplay(); } if(snake.life==0) { while(snake.life==0) DigDisplay(); } } void int0(void) __interrupt (0) __using (0)//暂停开始 { delay10ms(); if(P3_2 == 0) { TR0^=1;//关闭开启时钟(暂停,开始) t=0; } } void int1(void) __interrupt (2) __using (0)//重生!!! { delay10ms(); if(P3_3 == 0) { snake.life=1; snake.dir=2; snake.x[0]=0; snake.y[0]=0; RUN_SNAKE(); } } void delay10ms(void) //误差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void int0init(void) { IT0=1;//设置为下降沿 EX0=1;//打开INT0的中断允许 EA=1;//打开总开关 } void int1init(void) { IT1=1;//设置为下降沿 EX1=1;//打开INT0的中断允许 EA=1;//打开总开关 }
评论
    相关推荐
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路
    • VHDL 的实例程序,共44个.rar
      经典VHDL 的实例程序,共44个!要下载的尽快
    • USBtoRS232Driver.rar
      USB转串口驱动程序,可以用在笔记本电脑上,方便的通过串口给单片机下载程序!
    • 模糊控制程序.rar
      模糊PID控制程序的源码,是作业,有讲解,
    • 串口编程源代码.rar
      这是本人最近几年所编写的串行通讯的代码集,可以供大家参考学习。
    • DELTA_PLC.rar
      台达PLC Modbus协议通信dll com控件
    • hongwaigooog.rar
      单片机红外遥控最全的资料,包含很多当前电视遥控专用芯片的解码方式,C语言和汇编语言编写的解码范例程序,看完了你就会了!
    • MF500绝密.rar
      非接触式IC卡开发板源程序,包括原理图/PCB图;源程序在KEIL环境下编译,打开压缩包后直接点击PRJ文件,即可编译使用。 这是个保密文件,做Mifare one卡开发人基本上都用过到这个源代码。
    • 20078251299410.rar
      C51实用程序(45个) I/O、定时器、中断、看门狗、计数器、软件AD、VB串口、93c06驱动、24c02系列驱动、7219、20045、软件陷阱、串口中断、码值转换、AVR通讯、IIC、DS1302、DS1820、SPI、1602、12232、12864、T6963、1330、PC键、键盘输入法、智能化、飞机游戏、贪吃蛇、多级菜单实例等
    • mcudesign.rar
      单片机设计,毕业设计 16×16点阵(滚动显示)论文+程序 cdma通信系统中的接入信道部分进行仿真与分析 LED显示屏动态显示和远程监控的实现 MCS-51单片机温度控制系统 USB接口设计 毕业设计(论文)OFDM通信系统基带数据 仓库温湿度的监测系统 单片机串行通信发射机 单片机课程设计__电子密码锁报告 单片机控制交通灯 电动智能小车(完整论文 电气工程系06届毕业设计开题报告 电信运营商收入保障系统设计与实现 电子设计大赛点阵电子显示屏(A题 电子时钟 火灾自动报警系统设计 基于GSM短信模块的家庭防盗报警系统 基于GSM模块的车载防盗系统设计 TC35i 资料 基于网络的虚拟仪器测试系统 门控自动照明电路 全遥控数字音量控制的D类功率放大器 数控直流稳压电源完整论文 数字密码锁设计 数字抢答器(数字电路) 数字时钟 水箱单片机控制系统 同步电机模型的MATLAB仿真 温度监控系统的设计 用单片机控制直流电机 用单片机实现温度远程显示 智能家用电热水器控制器 智能型充电器电源和显示的设计 自动加料机控制系统