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