《单片机简易乒乓球游戏机》由会员分享,可在线阅读,更多相关《单片机简易乒乓球游戏机(7页珍藏版)》请在金锄头文库上搜索。
1、游戏机 重庆大学城市科技学院单片机课程设计实验报告乒乓球游戏1 设计题目乒乓球计分器的设计2 设计思路 本设计中,通过 8 只连续排列的发光二极管的依次点亮代表“乒乓球”的运动。再用两个按键模拟左右两个球拍,键按下代表球拍击球。 “左拍”按下可使发光二极管从左游戏机 向右依次点亮,如同“乒乓球”从左向右飞来;“右拍”按下则可使发光二极管从右向左依次点亮,代表“乒乓球”从右向左运动。在游戏过程中,用数码显示管实时显示双方比分。游戏规则如下:(1) “乒乓球”移动速度是固定的,设定 0.2 秒钟移动一位(发光二极管) 。(2)在“乒乓球”移位一次的过程中,进行 15 次的测试,查询接球方是否有击球
2、动作。(3)接球方的击球动作应发生在“乒乓球”到达本方最后一位发光二极管(即点亮)2.6 秒钟时间之内。如接球方在此一秒钟之内按键,则接球成功,接球方得分。 “乒乓球”转为相反方向运动。此后,原接球方变为发球方,原发球方变为接球方。游戏继续进行。3 所做工作(1) 完成系统设计的构思,根据构思开始编写程序,逐步实现系统所需要的一些功能(程序中通过调用子函数实现) ;(2) 程序在 keil 中编译通过后,将产生的 Hex 文件下载到单片机实验箱上进行硬件测试。4 硬件组成(1)具体电路由单片机电路、发光二极管显示电路、按键电路和数码显示电路等部分组成。(2)R1、C1 组成单片机的复位电路,接
3、通电源的瞬间,由于电源电压通过 R1 对C1 的充电过程,单片机复位端 1 脚获得一个高电平复位脉冲,使得单片机进入初始状态。(3)发光二极管显示和按键电路P0.0P0.7口接 8 只发光二极管,P 3.2口接左按键(INT0 中断) ,模拟左拍击球动作;P3.3口接右按键(INT1 中断),模拟右拍击球动作。P 0.0P0.7 口和 P0.0P0.7口接数码显示管显示扣分计数(0F) 。发光二极管显示电路5 主程序主程序的功能是进行初始化工作,并控制“乒乓球”游戏的开始。模拟左拍的按键接 P3.3口,模拟右拍的按键接 P3.2口。游戏开始时,显示的比分是零比零,此后,如右拍按下则“乒乓球”左
4、移;如左拍按下则“乒乓球”右移。在主程序中,需要用四个通用寄存器分游戏机 别作为右方得分寄存器、左方得分寄存器、0.2 秒计时常数寄存器及“乒乓球”移位计数器。(1) “乒乓球”左移子程序左移子程序的主要功能是控制“乒乓球”的向左移动,并在逐位移动过程中判断是否有左拍击球动作。只有当“乒乓球”移动到最左的一秒时间内击球才是有效的,左拍得分,并转乒乓球右移子程序,使“乒乓球”向右移动,即相当于左方发球。除此之外,所有的左拍击球都算失误,重新开始“乒乓球”左移子程序,相当于由右方重新发球。(2) “乒乓球”右移子程序“乒乓球”的右移子程序的原理与左移子程序的原理相同,只要把左移子程序流程图中的“右
5、”与“左”互换即可。6 设计流程及描述(1) 按键扫描程序本设计中用到了 3 个按键,其中一个作为复位端,另外两个作为击球球拍,球过中线后,按键一次能及时将这球击打回去,按键两次为高抛球返回去;两个球拍是用 INTO、INT1 外中断实现的。INT1 中断程序流程图如下:关闭总中断是赋延时初值是开总中断是调用点灯程序(从右到左)判断在延时期间,INT1 是否有请求 YYOUYOUQQ返回调用扣分子程序显示数码(2)主程序流程图:游戏机 开始P3.2 ( INT0)P 3.3 (INT1 )输入先写 1 写入控制字 IER2,R3,P0 设初值等待中断R2 到 P1 显示R3 到 P2 显示写入
6、控制字 TCON(3)显示流程图:7 源程序代码及注释游戏机 org 0000hsjmp main ;单片机复位后从 0000Horg 0003h ;INT0 中断入口sjmp zd1 ;转中断服务程序org 0013h ;INT1 中断入口sjmp zd2 ;转中断服务程序 org 0030hmain: mov r2,#0mov r3,#0mov p0,#0setb p32 ;INT0(外部中断 0 输入线)setb p33 ;INT0(外部中断 0 输入线)mov dptr,#tab ;DPTR 指向数据表的首地址mov a,r2movc a,a+dptr ;查表mov p1,a ;数码显
7、示 mov a,r3 movc a,a+dptr ;查表mov p2,a ;数码显示 mov tcon,#0Ah ;写控制字 TCON,INT0 和 INT1 有请求mov ie,#85h ;写控制字 IE(EA=1,EX1=1,EX0=1)sjmp $ ;等待中断信号zd1: cpl ea ;关闭总中断acall dianliang1 ;调用从右向左点亮程序mov r4,#0ffhD1: mov r5,#0ffhpd1: jnb p33,fh1 ;判断是否有中断请求,没有则顺序执行 则跳转至中断程序结束djnz r5,pd1 djnz r4,D1acall koufen1 ;延时时间到,调用
8、扣分程序fh1: setb ea ;开总中断有效reti ;中断返回zd2: cpl ea ;关闭总中断acall dianliang2 ;调用从左向右点亮程序mov r4,#0ffhD2: mov r5,#0ffhpd2: jnb p32,fh2 ;判断是否有中断请求,没有则顺序执行,有则跳转至中断程序结束djnz r5,pd2 djnz r4,D2acall koufen2 ;延时时间到,调用扣分程序fh2: setb ea ;开总中断有效reti ;中断返回游戏机 koufen1: inc r2 ;选手 1 扣分程序cjne r2,#10h,song1 ;扣分到 F 则重新开局 mov
9、r2,#0mov r3,#0song1:mov dptr,#tab ;数码显示mov a,r2movc a,a+dptrmov p0,a ;P0 口输出ret ;子程序返回koufen2: inc r3 ;选手 2 扣分程序cjne r3,#10h,song2mov r2,#0mov r3,#0song2:mov dptr,#tab mov a,r3movc a,a+dptrmov p2,a ;P2 口输出retdianliang1:mov a,#01h ;从右向左点亮的子函数s1:mov p0,aacall DINGSHI ;调用延时ss1: rl a cjne a,#01h,s1retdi
10、anliang2:mov a,#80h ;从左向右点亮的子函数s2: mov p0,aacall DINGSHIss2: rr acjne a,#80h,s2retDINGSHI: mov tmod,#01h ;产生 0.2 秒的定时mov r4,#02hCZ:mov th0,#3chmov tl0,#0b0hsetb tr0WSHM: jbc tf0,OKsjmp WSHMOK: djnz r4,CZrettab:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;显示0F 的数据表 end 8 实验结果游戏机
11、 单片机上电后,若不按按键则乒乓球点开始在示波器上两边来回呈抛物线跳动,乒乓球在一边触底线后,另一方得分,数码管分数加 1,同时 LED 灯闪烁一下;乒乓球过中线后,按键一次乒乓球即使反弹回去,数码管分数不变,同时 LED 灯不亮;连续按键两次,乒乓球呈高抛球轨迹反弹回去;当一方分数达到 15 分时,数码管归零。9 课程设计体会通过本次课程设计,真正做到了用单片机开发一件产品,虽然功能不是很多,但是对如何运用单片机开发环境做到了一定的了解,也对单片机的部分功能比较熟悉,做到了将单片机课上学到的知识应用到实践当中。从开始构思-编写程序-仿真-焊接板子-调试,整个过程自己熟悉了一下了,受益匪浅,自己成功做出一件具有一定功能的实物也很有成就感,燃起了对单片机的兴趣。