打地鼠的单片机设计.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
打地鼠的单片机设计

任务三 打地鼠 NO5.2.1 任务要求 游戏开始时,闪烁显示得分0,玩家需要同时按下复合按钮开始,(本例CD键)当松开复合按钮后,数码管任意的跳出10个数,速度由慢到快,每跳出一个数玩家需按下相应的按钮,如果命中得1分,且发光二极管发光提示命中,如果没有命中,不得分发光二极管不发光,当10个结束之后,最后闪烁显示出玩家的积分。打中1个积1分,如果需要重新开始则需再次按下复合按钮。 NO 5.2.2 任务分析 本任务是一个综合设计题,它把前面两个任务很好的整合在一起,并且用到前面学的很多细节方面,比如说速度由慢到快怎么编,比如说显示的成绩闪烁显示怎么编,比如说复合按钮做某件事情怎么编。 上图和前面学到的图不同的地方时多了一个发光二极管LED-BLUE。 软件流程图: NO 5.2.3 相关知识: 1 速度由慢到快的做某件事怎么编? 方法: for(i=0;ix;i++) {delay(10000);} 我们可以通过改变变量x的值来实现delay延时的时间, x的初值可以定义成30,每跳出一个地鼠让x-=2;当一个周期结束之后即10个地鼠全跳出之后,让x回到初值即x=30; 2 显示的成绩闪烁怎么编? 方法: void T0_PRG() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; scan(); c++; if(c==30) c=0; if(r==0c15) DM=0X00; if(r==0c15) DM=~seg[m]; } 通过中断的形式来实现的,每调用一次中断让变量c++;当10个地鼠打完之后,r=0;r为结束标志,此时如果c15;数码管消隐,否则显示即可。 3 复合按钮做某件事情怎么编? 方法: 用到AB,同时满足AB两个条件时做某件事 switch(key_val) { case 12: {a=1;break;} case 13: {b=1;break;} } 在键盘扫描中:用到switch选择如果12号和13号按下会相应的标志位为1。 在主程序中: if(a==1b==1) {r=1; a=0; b=0;} if(r==1) { random();} 如果a=1并且b==1 则标志位r=1,调用随机函数;并且给ab清零,为下一次做准备。 NO 5.2.4 任务实施: 1 PROTEUS 画图 比较上个任务多了一个发光二极管 2 KEILC软件编程: #include reg52.h #include stdlib.h #define DM P0 unsigned int tt; unsigned int k; unsigned int x=30; unsigned int c; unsigned char n,m,r ; sbit H0=P1^0;//键盘 sbit H1=P1^1; sbit H2=P1^2; sbit H3=P1^3; sbit L0=P1^4; sbit L1=P1^5; sbit L2=P1^6; sbit L3=P1^7; sbit D=P3^0;//灯 unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x08,0x03,0xc6,0xa1,0x86,0x8e}; unsigned char key_val,a,b; void scan(); void delay(unsigned int t); void random(); void scan()//键盘扫描 { H0=0;H1=0;H2=0;H3=0;L0=1;L1=1;L2=1;L3=1; if(L0==0||L1==0||L2==0||L3==0) { delay(500); if(L0==0||L1==0||L2==0||L3==0) { H0=0;H1=1;H2=1;H3=1;L0=1;L1=1;L2=1;L3=1; if(L0==0) key_val=0; if(L1==0) key_val=1; if(L2==0) key_val=2; if(L3==0) key_val=3; while(L0==0||L1==0||L2==0||L3==0); H0=1;H1=0;H2=1;H3=1;L0=1;L1=1;L2=1;L3=1; if(L0=

文档评论(0)

wuyuetian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档