12864系列连载之基于贪吃蛇游戏设计详精讲_第1页
12864系列连载之基于贪吃蛇游戏设计详精讲_第2页
12864系列连载之基于贪吃蛇游戏设计详精讲_第3页
12864系列连载之基于贪吃蛇游戏设计详精讲_第4页
12864系列连载之基于贪吃蛇游戏设计详精讲_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

群(已群(已满群提示:内容扫一 关注订阅号:单片机精讲提示:内容扫一 关注订阅号:单片机精讲这是大学的时候做的贪吃蛇游戏(提示:内容扫一 关注订阅号:单片机精讲贪吃蛇介绍:首先来给大家介绍一下贪吃蛇,贪吃蛇是世界知名的益智类提示:内容扫一 关注订阅号:单片机精讲这是大学的时候做的贪吃蛇游戏(提示:内容扫一 关注订阅号:单片机精讲 提示:内容扫一 关注订阅号:单片机精讲提示:内容扫一 关注订阅号:单片机精讲提示:内容扫一 关注订阅号:单片机精讲123提示:内容扫一 关注订阅号:单片机精讲说明:1、先设置一个主控面板;234、添加程序,通过方向键来改变蛇的运动方向5、添加程序,通过按键来改变蛇的运动方向提示:内容扫一 关注订阅号:单片机精讲算法中的基本概念:标系:坐标以左上角那点为(0,0),向右则x递增,向下则y递增。提示:内容扫一 关注订阅号:单片机精讲蛇、石头、食物的表示: 提示:内容扫一 关注订阅号:单片机精讲蛇的移动:蛇身的数据结构 提示:内容扫一 关注订阅号:单片机精讲蛇的移动方向根据蛇头的运动方向来确定新蛇头的坐标,比如向上移动就是y-1.提示:内容扫一 关注订阅号:单片机精讲如何显示蛇身蛇身的移动方向相反方向无效方向吃到食物判定提示:内容扫一 关注订阅号:单片机精讲这是程序的设计思路:提示:内容扫一扫关注订阅号:单片机精(9(10)退出游戏,如果不是则进行(15)步的判断;(15)判断当前按键的方向是否提示:内容扫一 关注订阅号:单片机精讲**作品:LCD12864贪吃蛇设提示:内容扫一 关注订阅号:单片机精讲**这一讲的主要内容 LCD12664液晶显示原**功能描述 对贪吃蛇设计的显**输入**液晶:Proteus元件库—AMPIRE128X64(无字库提示:内容扫一 关注订阅号:单片机精讲**输出**全局变量**调用模块**作者 **日期 **作者所属单位:电子**交流QQ群:第一群 第二群 联#include<at89x51.h>#include<intrinsh>#defineucharunsigned#defineuintunsigned //宏定义提示:内容扫一 关注订阅号:单片机精讲**模块名称:LCD12864**LCD_CS1_OUT1低电平有效,控制左半**LCD_CS2_OUT1低电平有效,控制右半sbitLCD_E_OUT =P2^0;sbitLCD_RW_OUT=P2^1;sbitLCD_RS_OUT=P2^2;sbitLCD_CS2_OUT=P2^3;sbitLCD_CS1_OUT=#defineLCD_12864_DATA 提示:内容扫一 关注订阅号:单片机精讲 ucharcode 提示:内容扫一 关注订阅号:单片机精讲 /*"ucharcode ucharcode ucharcode ucharcode{提示:内容扫一 关注订阅号:单片机精讲/*- 文字 吴-- 此字体下对应的点阵为:宽x高=16x16 /*- 文字 鉴-- 此字体下对应的点阵为:宽x高=16x16 /*- 文字 鹰-- 此字体下对应的点阵为:宽x高=16x16 /*- 文字 制-- 此字体下对应的点阵为:宽x高=16x16 /*- 文字 作-- 此字体下对应的点阵为:宽x高=16x16 ucharcode提示:内容扫一 关注订阅号:单片机精讲 ucharcodeucharcode{/*- 文字 吴-- 此字体下对应的点阵为:宽x高=16x16 提示:内容扫一 关注订阅号:单片机精讲ucharcode{/*- 文字 鉴-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 鹰-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 制-- 此字体下对应的点阵为:宽x高=16x16 /*ucharcode提示:内容扫一 关注订阅号:单片机精讲{/*- 文字 作--/*- 楷体 此字体下对应的点阵为:宽x高 --ucharcode{/*- 文字 鉴-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 鹰-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 电--提示:内容扫一 关注订阅号:单片机精讲 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 子-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 工-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 作-- 此字体下对应的点阵为:宽x高=16x16 提示:内容扫一 关注订阅号:单片机精讲ucharcode{/*- 文字 室-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 调入了一幅图像 -- 宽度x高度=16x16--*/ucharcode{/*- 调入了一幅图-- x高度=16x16--提示:内容扫一 关注订阅号:单片机精讲 标题:电子欢乐多 功能:数{/*- 文字 欢-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 乐-- 此字体下对应的点阵为:宽x高=16x16 ucharcode{/*- 文字 多-- 此字体下对应的点阵为:宽x高=16x16 提示:内容扫一 关注订阅号:单片机精讲ucharcode{/*- 文字 啊-- 此字体下对应的点阵为:宽x高=16x16 table[]={/*- -- 宽度x高度=128x64--*/提示:内容扫一 关注订阅号:单片机精讲提示:内容扫一 关注订阅号:单片机精讲bitKEY_FLAG;bitKEY_FLAG5=0; //KEY_FLAG51KEY_FLAG1是提示:内容扫一 关注订阅号:单片机精讲ucharp,SNAKE_GRADE_NUM; bitKEY_FLAG1=0;bit //中断次数控**函数名称 voiddelay1ms(uint**功能描述 **输入 uintk(需要延时的数量**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voiddelay1ms(uintk){}提示:内容扫一 关注订阅号:单片机精讲**函数名称 void //延时1s误差**功能描述 精确延时函数,延时1秒,软件算**输入**输出**全局变量**调用模块**作者 **日期 void {unsignedchara,b,c;for(b=171;b>0;b--for(a=16;a>0;a-- //ifKeil,requireuse}**函数名称 void**功能描述 12864判忙函}群(已}群(已满群提示:内容扫一 关注订阅号:单片机精讲**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 void{ // 提示:内容扫一 关注订阅号:单片机精讲**函数名称 voidCHOOSE_12864_SCREEN(uchar**功能描述 选屏函**输入 uchari(i是要写的屏.0是左屏,1是右屏,2是双屏**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidCHOOSE_12864_SCREEN(uchar /*i是要写的屏.0是左屏,1是右屏,2 /*此处在硬件上运行时i的电平全部与程序相反;*/switch(i) {case0:LCD_CS1_OUT=0;LCD_CS2_OUT=1;break;//比如此处如果要在电运行则应该改为CS=1;LCD_CS2_OUT=0;case1:default:break;}提示:内容扫一 关注订阅号:单片机精讲**函数名称 //写命**功能描述 lcd12864写命令的函**输入 ucharcmd(写入令**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidLCD_12864_CMD(ucharcmd) { // 群(已群(已满群提示:内容扫一 关注订阅号:单片机精讲**函数名称 LCD_12864_DAT(uchar //写命**功能描述 lcd12864写数据的函**输入 uchardat(写入的数据**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 LCD_12864_DAT(uchardat){}提示:内容扫一 关注订阅号:单片机精讲**函数名称 void //清屏函**功能描述 lcd12864清屏函**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidCLEAR_12864_SCREEN(void){ucharpage,row;{{ //对12864所有地址全部写}}}提示:内容扫一 关注订阅号:单片机精讲**函数名称 void //清屏函**功能描述 lcd12864初始化函**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidInit_12864_HS(void){ }**函数名称 提示:内容扫一 关注订阅号:单片机精讲**功能描述 **输入: ucharch,ucharrow,ucharpage,uchar*p(屏数,列数,页数,还有显示的数组**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidDisplay_8_point(ucharch,ucharrow,ucharpage,uchar*adr){uchari;a=1; 程序中采用的位移运算代替乘法运算,这样可以大大降低处理器的负担{}提示:内容扫一 关注订阅号:单片机精讲{}}**函数名称 **功能描述 lcd12864的16X16显示字符的显**输入: ucharch,ucharrow,ucharpage,uchar*p(屏数,列数,页数,还有显示的数组**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidDisplay_16_point(ucharch,ucharrow,ucharpage,uchar*adr){uchari;提示:内容扫一 关注订阅号:单片机精讲{}{}}**函数名称: ucharDAT_READ_12864(ucharpage,uchararrange) //page页地址.arrange列**功能描述 lcd12864的数据的**输入 **输出**全局变量提示:内容扫一 关注订阅号:单片机精讲**调用模块**作者 **作者所在单位:电子**日期 ucharDAT_READ_12864(ucharpage,uchararrange)//page页地址.arrange列地址){uchardat; }提示:内容扫一 关注订阅号:单片机精讲**函数名称: ucharDAT_READ_12864(ucharpage,uchararrange) //page页地址.arrange列**功能描述 lcd12864的反白显**输入 ucharch,uchararrange,ucharpage(屏数,列数,页数**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidDisplay_16_point_fb(ucharch,uchararrange,ucharpage){ucharucharxdatadat_fb[32];{}提示:内容扫一 关注订阅号:单片机精讲}**函数名称: voidDRAW_TRANSVERSE_Line(uchary1,uchary2,ucharx)//y1表示起点,y2**功能描述 lcd12864的画竖线的函**输入 **输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidDRAW_TRANSVERSE_Line(uchary1,uchary2,ucharx)//y1表示起点,y2表示终点{{ 提示:内容扫一 关注订阅号:单片机精讲数而不用画点x=x- //是为了减少单片机的处理负担}{}{for(i=0;i<(8-{}for(i=0;i<(y2/8-y1/8-{}{}提示:内容扫一 关注订阅号:单片机精讲}{for(i=0;i<=y2-{}}}**函数名称 **功能描述 lcd12864的画点的函**输入 **输出**全局变量**调用模块提示:内容扫一 关注订阅号:单片机精讲**作者 **作者所在单位:电子**日期 voidDRAW_DOT_HS(ucharx,uchary){{}{}}**函数名称 **功能描述 提示:内容扫一 关注订阅号:单片机精讲**输入 **输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidCHANGE_HS(uchar*x,uchar*y) {uchar //这里的点是个有花色的点而不是一个实心的{{}提示:内容扫一 关注订阅号:单片机精讲}}**函数名称 **功能描述 lcd12864的清点的函**输入 **输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidCLEAR_Dot_HS(ucharx,uchary){{提示:内容扫一 关注订阅号:单片机精讲}{}}**函数名称 voidclear(uchar*x,uchar**功能描述 lcd12864的清除一个4X4的点函**输入 **输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 提示:内容扫一 关注订阅号:单片机精讲{uchari,m,n;{}}**函数名称 **功能描述 lcd12864的清除一个4X4的点函**输入 **输出**全局变量**调用模块**作者 提示:内容扫一 关注订阅号:单片机精讲**作者所在单位:电子**日期 voidCLEAR_4DOT_HS1(ucharx,uchary){uchari,m,n;{{}}}**函数名称 bitreadfk(charx,char**功能描述 lcd12864的清除一个点函**输入 提示:内容扫一 关注订阅号:单片机精讲**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 bitreadfk(charx,chary){ucharm,n;{m=(x<<2)+31;{}{提示:内容扫一 关注订阅号:单片机精讲{}{}}{{}{}}}

}**函数名称 voiddingshi()interrupt using**功能描述 定时程序.产生步进时}}群(已}}群(已满群提示:内容扫一 关注订阅号:单片机精讲**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voiddingshi()interrupt1 using1 {if(p--{}{p=20-提示:内容扫一 关注订阅号:单片机精讲**函数名称 voidzhongduan1()interrupt2using**功能描述 开始确认暂停键的判**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidzhongduan1()interrupt2using2{{}{群(已群(已满群提示:内容扫一 关注订阅号:单片机精讲**函数名称 voidINTERRUPT_NUM0()interrupt0using**功能描述 方向键的判**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 voidINTERRUPT_NUM0()interrupt0using0{uchar //FIRST=1;打开方向按键判断标{{提示:内容扫一 关注订阅号:单片机精讲 }{ }}}**函数名称 void**功能描述 贪吃蛇子程**输入**输出**全局变量**调用模块**作者 **作者所在单位:电子**日期 提示:内容扫一 关注订阅号:单片机精讲void{ucharxdataSNK_BODY_Length[102]={0,8,1,8}; ucharSNK_Food_Date[2]={12,8};ucharbit //开定时器中 //启动定时器{提示:内容扫一 关注订阅号:单片机精讲}{{ {case{for(i=0;i<SNAKE_GRADE_NUM-{}提示:内容扫一 关注订阅号:单片机精讲}case {for(i=0;i<SNAKE_GRADE_NUM-{}}case {for(i=0;i<SNAKE_GRADE_NUM-{}}case for(i=0;i<SNAKE_GRADE_NUM-{提示:内容扫一 关注订阅号:单片机精讲}}} if(KEY_FLAG4)//{for(i=SNAKE_GRADE_NUM;i>0;i--{*(SNK_BODY_Length+(i<<1))=*(SNK_BODY_Length+(i<<1)-*(SNK_BODY_Length+(i<<1)+1)=*(SNK_BODY_Length+(i<<1)-}{for(i=0;i<SNAKE_GRADE_NUM- //食物是否在蛇身身{提示:内容扫一 关注订阅号:单片机精讲{}}} {{}}KEY_FLAG2=KEY_FLAG2&&*(SNK_BODY_Length+(SNAKE_GRADE_NUM<<1)-&*(SNK_BODY_Length+(SNAKE_GRADE_NUM<<1)-2)<24;//蛇头是否出边KEY_FLAG2=KEY_FLAG2&&*(SNK_BODY_Length+(SNAKE_GRADE_NUM<<1)-提示:内容扫一 关注订阅号:单片机精讲{{}{}}}delay1ms(450);delay1ms(450); (已满 群(已群(已满群提示:内容扫一 关注订阅号:单片机精讲}}**函数名称 void**功能描述 读“忙”函数,判断液晶当前是否忙**输入**输出**全局变量**调用模块**作者 **日期 voidCHECK_busy()//读“忙”函数数据线的最DB71则{提示:内容扫一 关注订阅号:单片机精讲while(P0&0x80);}**函数名称 **功能描述 LCD液晶写命令函**输入 ucharvalue(向LCD写入令**输出**全局变量**调用模块**作者 **日期 //写命令函{ //对LCD的每次读写都要读 // //LCD_12864_DATA=提示:内容扫一 关注订阅号:单片机精讲 //LCD_EN_OUT由 0锁存有效数}**函数名称 voidLCD_DATA_WRI(uchar**功能描述 LCD液晶写数据的函**输入 ucharvalue(向LCD写入的数据**输出**全局变量**调用模块**作者 **日期 voidLCD_DATA_WRI(ucharvalue)//写数{ 提示:内容扫一 关注订阅号:单片机精讲LCD_12864_DATA= //LCD_EN_OUT由 0锁存有效数}**函数名称 voidCHOOSE_COLUMN(uchar**功能描述 设置显示的**输入 ucharcolumn(设置显示的列**输出**全局变量**调用模块**作者 **日期 voidCHOOSE_COLUMN(uchar //设置显示的{ //列的最大值为column= //列的首地址为提示:内容扫一 关注订阅号:单片机精讲 //

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论