单片机课程设计-打地鼠游戏设计.doc_第1页
单片机课程设计-打地鼠游戏设计.doc_第2页
单片机课程设计-打地鼠游戏设计.doc_第3页
单片机课程设计-打地鼠游戏设计.doc_第4页
单片机课程设计-打地鼠游戏设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

.23摘 要随着社会的发展进步,各式有趣的小电动玩具已经遍布我们得生活。大街上随处可见拿着只有几个按键的打地鼠游戏机。简单的几个按键,就可以给人们带来娱乐。打地鼠游戏是电子技术发展的产物。打地鼠有软件版也有硬件版得。而软硬件打地鼠的游戏规则类似。现在我们来讨论用单片机制作打地鼠游戏机。根据打地鼠的游戏规则,先制定特定位置,在确认按下了该位置的按钮。这种这种规则很容易用单片机实现。单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用STC89C52单片机为核心控制元件,设计一个打地鼠游戏机。以单片机作为主控核心,与键盘、蜂鸣器、数码管等模块组成核心主控制模块,在主控模块上设有44的矩阵键盘、数码管和蜂鸣器。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。关键词:STC89C52单片机 打地鼠游戏机 数码管 蜂鸣器 目录摘 要1目录21.引 言32. 总体设计42.1基本原理42.2系统总体框图及设计思路43.详细设计53.1 硬件设计53.2软件设计.63.2.1程序设计思路63.2.2 程序流程图73.2.3 程序代码84. 系统调试及分析225.心得体会23参考文献231.引 言单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 打地鼠游戏机是现代电子技术发展的产物。是一种按键式的游戏机。是人们的休闲娱乐的好选择。单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用STC89C52单片机为核心控制元件,设计一个打地鼠游戏机。以单片机作为主控核心,44矩阵键盘、蜂鸣器等模块组成核心主控制模块。 本文主要对使用单片机设计打打地鼠游戏机进行了分析,并介绍了基于单片机打地鼠游戏机硬件组成。利用单片机产生随机数来点亮指定的位置的led发光管。在判断是否按下了对应位置的按键。根据游戏规则判断是该加分还是加错。错5次则本次游戏结束。并且本文分别从原理图,主要芯片,以及程序的调试来详细阐述。 游戏流程是先由单片机产生随机数,点亮对应位置的了点发光管,并记录被点亮的位置。这时就开始扫描键盘,按键结果用来判断游戏规则。如果正确游戏的分加1,如果错误错分加1。错分加到5则游戏结束。游戏期间还得用数码管动态显示游戏的分,游戏结束后显示over。用单片机产生随机数类似电脑上产生随机数。需要开系统时钟,即定时器。我们可以利用单片机的定时/计数器T0来提供系统时钟。矩阵键盘需要扫描才能应用。数码管显示位数是动态的,即有几位数就显示几位数,数据的前面不会有0出现。2. 总体设计2.1基本原理 先由单片机产生随机数,点亮对应位置的了点发光管,并记录被点亮的位置。这时就开始扫描键盘,按键结果用来判断游戏规则。用单片机产生随机数类似电脑上产生随机数。需要开系统时钟,即定时器。我们可以利用单片机的定时/计数器T0来提供系统时钟。矩阵键盘需要扫描才能应用。数码管显示位数是动态的,即有几位数就显示几位数,数据的前面不会有0出现。若要产生随机数,只要提供系统时钟,即定时器,然后调用rand()函数获得随机数。期间一定要保证系统时钟一直开着,这就要求一定是用中断方式处理定时器/计数器0,是定时器/计数器一直开着。另外,经过试验发现,单片机产生随机数的随机性和单片机的时钟值和要获得的数据范围有关。 利用STC89C52的内部定时器使其工作在定时器方式1下,设置计数值TH0及TL0初值,根据要去数据范围合理设定。 2.2系统总体框图及设计思路打地鼠游戏机数码管显示游戏规则判断部分蜂鸣器 总体设计思路:本设计利用单片机P0口连接44矩阵按键,作为功能控制键。其中,左上角的是1号键右下的是16号键。进行编号是为了处理游戏功能是方便。硬件部分是用点阵连接成44的矩阵,与矩阵键盘的位置相对应。一个数码管用于显示得分和游戏结束时显示over。蜂鸣器用于添加游戏声音。3.详细设计3.1 硬件设计1芯片及原理介绍(一) STC89C52STC89C52与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、 全静态操作:0Hz33MHz 、 三级加密程序存储器 、 32个可编程I/O口线 、三个16位定时器/计数器 八个中断源 、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。 P1口引脚特殊功能P1.0T2(定时器T2外部输入)P3口引脚P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读先通)STC89C52的一些特殊功能口,如下表所示:(二) 数码管数码管使用条件:a、段及小数点上加限流电阻b、使用电压:段:根据发光颜色决定;小数点:根据发光颜色决定c、使用电流:静态:总电流 80mA(每段 10mA);动态:平均电流 4-5mA 峰值电流 100mA上面这只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。LED数码显示原理: 七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。 LED数码管的ga七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码表“0”3FH“8”7FH“4”66H“C”39H“1”06H“9”6FH“5”6DH“d”5EH“2”5BH“A”77H“6”7DH“E”79H“3”4FH“b”7CH“7”07H“F”71H2硬件原理图P0口通过连接44个矩阵键盘,游戏键盘,根据扫描检测到得按键值,依照相应游戏规则,判断游戏是否加分;P1口接4位8段数码管的段选脚a接P1.0以此类推。P2口接数码管的位选端,P2.0接第一位,以此类推。P2.6接蜂鸣器。P3口接LED矩阵。3.2 软件设计. 3.2.1程序设计思路LED矩阵部分是有单片机产生随机数点亮的。打地鼠游戏机游戏规则判断部分,先由矩阵键盘扫描程序获得键值,利用该键值和点亮LED的随机数进行比较得到游戏结果。数码管动态显示部分,先判断数据长度,再根据长度扫描数码管,实现数码管动态显示。蜂鸣器部分,在程序的矩阵键盘扫描部分添加了蜂鸣器控制。即有键按下就会发声。3.2.2 程序流程图 开 始否是是否定时器初始化 数据初始化 产生随机数 位置对应 游戏的分加1键值是否与LED 位置对应扫描矩阵键盘 获得键值点亮LED矩阵产生随机数错分是否为5错分加1游戏结束3.2.3 程序代码#include /预定义部分#include#define uchar unsigned charuchar KEY; /得到按键返回值uchar led; /随机数产生的1到16的值,用于点亮led矩阵uchar ledcode; /用于记录led,的倒霉按键值后根据游戏规则判断int score; /游戏得分char error_c; /记录错误次数uchar table=0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0xc1, 0x86, 0x88 ; / 共阳数码管码表uchar time_c;sbit scond=P26; / 接蜂鸣器的P2.6管脚void delay(int tt) /毫秒级延时 uchar a,b; for(tt;tt0;tt-) for(b=142;b0;b-) for(a=2;a0;a-);void display(int num) /数码管动态扫描函数uchar flag;if(num10)flag=1;/判断应该显示记为数据else if(num100)flag=2;else if(num1000)flag=3;else if(num10000)flag=4;switch(flag) /显示数据case 4:P2=0xf8;P1=table num/1000%10;delay(1);case 3: /没有break可以动态显示不同位数P2=0xf4;P1=table num/100%10;delay(1);case 2:P2=0xf2;P1=table num/10%10;delay(1);case 1:P2=0xf1;P1=tablenum%10;delay(1);break;uchar keypress() /键盘扫描 uchar xx,yy,key,rekey; P0=0x0f; /先扫描低四位xx=P0&0x0f;if(xx=0x0f)return 0xff;P0=0xf0; /再扫描高四位yy=P0&0xf0;key=xx|yy; delay(10); /消抖P0=0x0f;xx=P0&0x0f;if(xx=0x0f)return 0xff;P0=0xf0;yy=P0&0xf0;rekey=xx|yy;if(key=rekey) /松手检测do /松手后才返回键值P0=0x0f;xx=P0&0x0f;display(score);scond=!scond;while(xx!=0x0f); scond=1;return(rekey);return 0xff;void time0_interrupt(void) interrupt 1EA=0; /关cpu中断TR0=0;TMOD=0x01;TH0=0;/-(50000/256); /定时器0置数TL0=1;/-(50000%256);TR0=1;EA=1;ET0=1;if(time_c+100)time_c+;elsetime_c=0;int TTT; /控制键盘扫描次数void main(void)TMOD=0x01;TH0=0;/-(50000/256);TL0=1;/-(50000%256);TR0=1;EA=1;ET0=1;IP:while(1) /游戏功能及规则部分uint i; i = (TH08)|TL0; /产生随机数srand(i); led=1+(uchar)(rand()%16;if(error_c=5)goto EXIT; TTT=500;switch(led) / 点亮LED矩阵case 1:P3=0x1e;ledcode=0x1e;break; case 2:P3=0x1d;ledcode=0x1d;break;case 3:P3=0x1b;ledcode=0x1b;break;case 4:P3=0x17;ledcode=0x17;break;case 5:P3=0x2e;ledcode=0x2e;break;case 6:P3=0x2d;ledcode=0x2d;break;case 7:P3=0x2b;ledcode=0x2b;break; case 8:P3=0x27;ledcode=0x27;break;case 9:P3=0x4e;ledcode=0x4e;break;case 10:P3=0x4d;ledcode=0x4d;break;case 11:P3=0x4b;ledcode=0x4b;break; case 12:P3=0x47;ledcode=0x47;break; case 13:P3=0x8e;ledcode=0x8e;break; case 14:P3=0x8d;ledcode=0x8d;break; case 15:P3=0x8b;ledcode=0x8b;break;case 16: P3=0x87; ledcode=0x87;break; while(TTT-)KEY=keypress(); /键盘扫描display(score); /数码管显示switch(KEY) /游戏规则处理 case 0x77: /判断LED和按键是否重合 if(ledcode=0x1e) /重合则加分从新点亮其他LED score+; else error_c+; goto IP;break; /当有键按下KEY值不为0xff则进入相应的case部分判断应该加分还是加错误次数 case 0x7b: /因为有键按下所以goto IP:重新开始下一次的if(ledcode=0x1d) score+; else error_c+;goto IP;break;case 0x7d:if(ledcode=0x1b) score+; else error_c+; goto IP;break;case 0x7e:if(ledcode=0x17) score+; else error_c+; goto IP;break;case 0xb7:if(ledcode=0x2e) score+; else error_c+; goto IP;break;case 0xbb:if(ledcode=0x2d) score+; else error_c+; goto IP;break;case 0xbd:if(ledcode=0x2b) score+; else error_c+; goto IP;break; case 0xbe:if(ledcode=0x27) score+; else error_c+; goto IP;break;case 0xd7:if(ledcode=0x4e) score+; else error_c+; goto IP;break;case 0xdb:if(ledcode=0x4d) score+; else error_c+; goto IP;break;case 0xdd: if(ledcode=0x4b) score+; else error_c+; goto IP;break; case 0xde:if(ledcode=0x47) score+; else error_c+; goto IP;break; case 0xe7: if(ledcode=0x8e) score+; else error_c+; goto IP;break; case 0xeb: if(ledcode=0x8d) score+; else error_c+; goto IP;break; case 0xed:if(ledcode=0x8b) score+; else error_c+;goto IP;break;case 0xee: if(ledcode=0x87) score+; else error_c+; goto IP;break;default: break; error_c+; /如果TTT次键盘扫描没有键按下则按错误处

温馨提示

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

最新文档

评论

0/150

提交评论