欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机课程设计贪吃蛇说明书.docx

    • 资源ID:8907062       资源大小:93.38KB        全文页数:19页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计贪吃蛇说明书.docx

    1、单片机课程设计贪吃蛇说明书单片机课程实训作品说明书姓名:李兆基 完成时间:2016年7月3日一、 作品说明介绍1. 作品名称:贪吃蛇简易游戏机2. 作品实现功能:a) 按上、下、左、右键控制蛇身改变方向;b) 蛇头与食物碰撞时“吃掉”食物,使蛇身变长;c) 复位键使游戏重新开始;d) 暂停/继续键可以暂停、继续游戏3. 选择目的:巩固单片机课程所学知识,真正做到学有所用二、 作品操作介绍1. 作品外观图1 点阵屏:显示地图、蛇以及食物STC12C5A60S2单片机:控制整个作品,可以烧录不同的程序微动开关1:向上的按键,用于改变蛇的方向微动开关2:向下的按键,用于改变蛇的方向微动开关3:向左的

    2、按键,用于改变蛇的方向微动开关4:向右的按键,用于改变蛇的方向微动开关5:复位按键,按下后游戏复位,重新开始微动开关6:暂停/继续按键,控制游戏暂停/继续自锁开关:实现整体的电源总控制(断负)晶振、电容:用于单片机起振,单片机的最小时钟电路排针:用于连接电源正负极以及RXD和TXD电源指示灯:通电时点亮8个1K电阻:限制电流大小10个0电阻:做跳线用2. 作品功能介绍及操作说明a) 给游戏机上电1 将电源正极接在排针处标有VCC的位置2 将电源负极接在排针处标有GND的位置3 按下自锁开关完成上电b) 让贪吃蛇改变方向1 按向上键:蛇身向上2 按向下键:蛇身向下3 按向左键:蛇身向左4 按向右

    3、键:蛇身向右c) 游戏暂停/继续、复位1 按暂停/继续键:游戏暂停/继续2 按复位键:游戏复位,重新开使三、 作品制作说明1. 电路原理图2. 作品原件清单元件名称型号数量(个)单片机STC12C5A60S21单片机底座40引脚 1点阵屏8*82微动开关5*56晶振12MHz1电容30pf2电阻1K8电阻10K1电阻010自锁开关3*31排针直针4(根)LED红色1杜邦线1组4(根)洞洞板单面挂锡玻纤板10CM*14CM1电池盒13. PCB图a) 正面图(见附录1)b) F5图(见附录2)c) F6图(见附录3)四、 产品控制顺序/*名 称:贪吃蛇简易游戏机制作人:李兆基制作时间:2016.

    4、6.28修改时间:2016.7.1 (加入吃食物蛇身变长功能) 2016.7.3 (处理程序兼容细节)*/#include#includeunsigned char map16; /定义一个MAP地图unsigned char line; /列unsigned char snake452; /定义蛇的大小 unsigned char game_reset; /游戏复位 unsigned char foodx,foody; /食物的位置 sbit Key_left=P32; /左sbit Key_up=P33; /上sbit Key_down=P34; /下sbit Key_right=P35;

    5、 /右sbit Key_start=P37; /开始/暂停sbit Key_reset=P36; /复位/*按键所对应的位置*/void CreateFood() unsigned char i; i=0; RESET:foodx=rand()%6+1; /rand()函数随即产生食物的横坐标(16) foody=rand()%14+1; /rand()函数随即产生食物的纵坐标(114) while(!(snakei0=snakei1&snakei0=44) /找蛇尾(遍历蛇) if(snakei0=foodx&snakei1=foody) goto RESET; /如果产生的食物在蛇的节点上

    6、,则重新生成食物 i+; /*构造食物*/ void ClearMap() unsigned char i; for(i=0;i16;i+) mapi=0x81; /清空地图 map0=map15=0xff; /构造墙 /*初始化地图 */void ClearSnake() unsigned char i; for(i=0;ifoodx; /获取食物的横坐标 mapfoody|=i; /将其横坐标和纵坐标对应的点显示在地图上 i=0; while(!(snakei0=snakei1&snakei0=44) mapsnakei1|=0x80snakei0; i+; /将蛇节点全部显示在地图上/*

    7、将蛇以及食物显示在地图上*/void Move(unsigned char fx) /fx参数(0为上,1为下,2为左,3右) unsigned char i,snakewx,snakewy; snakewx=snakewy=i=0; while(!(snakei0=snakei1&snakei0=44)i+; snakewx=snakei-10; snakewy=snakei-11; /扫描蛇节点并且得到尾巴的位置(横纵坐标) switch(fx) case 0: while(!(snakei0=snakei1&snakei0=44)i+; /扫描蛇节点 得到节点数 for(i-;i0;i-

    8、) snakei0=snakei-10; snakei1=snakei-11; /后节点朝着前节点方向移动 snake00-; /移动蛇头 break; case 1: while(!(snakei0=snakei1&snakei0=44)i+; /扫描蛇节点 得到节点数 for(i-;i0;i-) snakei0=snakei-10; snakei1=snakei-11; /后节点朝着前节点方向移动 snake00+; /移动蛇头 break; case 2: while(!(snakei0=snakei1&snakei0=44)i+; for(i-;i0;i-) snakei0=snake

    9、i-10; snakei1=snakei-11; snake01-; break; case 3: while(!(snakei0=snakei1&snakei0=44)i+; for(i-;i0;i-) snakei0=snakei-10; snakei1=snakei-11; snake01+; break; if(snake00=foodx&snake01=foody) /蛇吃食物(蛇头的坐标与食物坐标重合) while(!(snakei0=snakei1&snakei0=44)i+; snakei0=snakewx; snakei1=snakewy; snakei+10=snakei+

    10、11=44; /重新添加(定义)蛇尾 CreateFood(); /创建食物 /*蛇的移动(按键的方向改变)*/void delay(unsigned int i) unsigned int j; while(i-) for(j=600;j0;j-);/*延时函数(接近与1毫秒) */void donghua(void)unsigned int i; for(i=0;i16;i+) if(ii); else P1=0xff; /第一块点阵屏亮 P2=(0x80(i-8); P0=0xff; delay(20); P1=P2=P0=0x00; for(i=0;i16;i+) if(i8) P1=

    11、0xff; P2=(0x01i); else P2=0xff; P1=(0x010;i-) if(snake00=snakei0&snake01=snakei1) game_reset=1; break; /遍历蛇节点是否蛇头和蛇身重合 if(snake00=0|snake00=7|snake01=0|snake01=15) /判断蛇头是否撞墙 game_reset=1; return game_reset;/*判断蛇的状态(死亡条件)*/void init(void) P0M0=0xff; P0M1=0x00; /PO为强推模式 TMOD=0X01; /设定时/计数器方式 EA=1; /开启

    12、中断 ET0=1; /开启定时计数器0 TH0=(65536-1000)/256; TL0=(65536-1000)%256; /设置计数初值为1毫秒 TR0=1; /开启定时/计数软开关 ClearMap(); /初始化地图 ClearSnake(); /初始化蛇/*初始化函数*/void main(void) unsigned char fx,i,newfx; /定义方向,新方向,以及变量i unsigned char isStart; /开始/暂停变量 newfx=fx=2; /初始化方向 donghua(); delay(100); i=0; isStart=1; init(); Cr

    13、eateFood(); while(1) for(i=0;i20;i+) delay(10); if(fx!=1&!Key_up&isStart) /蛇向下移动则向上按键无效 newfx=0; if(fx!=0&!Key_down&isStart) /蛇向上移动则向下按键无效 newfx=1; if(fx!=3&!Key_left&isStart) /蛇向左移动则向右按键无效 newfx=2; if(fx!=2&!Key_right&isStart) /蛇向右移动则向左按键无效 newfx=3; /按键改变newfx,默认向fx移动 if(!Key_start) delay(20); if(!

    14、Key_start) if(isStart=1)isStart=0; else if(isStart=0)isStart=1; /暂停/继续改变isStart状态 while(!Key_start); delay(20); if(!Key_reset) delay(20); if(!Key_reset) game_reset=1; while(!Key_reset); delay(20); if(game_reset)return; /复位 if(!isStart)i-; /暂停状态时所执行的死循环 delay(10); if(fx=0&newfx=1|fx=2&newfx=3) newfx=

    15、fx; else fx=newfx; /方向冲突时按新方向移动,避免按的太快 Move(fx); /移动 while(IsOver() if(!Key_reset) delay(20); if(!Key_reset) game_reset=1; while(!Key_reset); delay(20); if(game_reset)return; if(!isStart)i-; delay(10); /当蛇死亡只能激活复位按钮 SnakeToMap(); /将蛇显示在地图 /*主函数*/void display(void) interrupt 1 TR0=0; /关闭软开关 TH0=(65536-1000)/256; TL0=(65536-1000)%256; /计数赋值 if(lineline); /选列 else P1=0xff; P2=(0x80(line-8); /选列 /两块点阵屏的对接 P0=mapline; /送行 line+; if(line=16)line=0; TR0=1; /开启软开关/*显示函数*/


    注意事项

    本文(单片机课程设计贪吃蛇说明书.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开