资源描述
单片机-简易乒乓球游戏机 重庆大学城市科技学院 单片机课程段计 卖验报告 乒 乓 球 游 戏 1设计题目 乒乓球计分器的设计 2设计思路 本设计中,通过8只连续排列的发光二极管的依次点亮代表“乒乓球”的运动。再用两 个按键模拟左右两个球拍,键按下代表球拍击球。“左拍”按下可使发光二极管从左向单片机-简易乒乓球游戏机 右依次点亮,如同“乒乓球”从左向右飞来:“右拍”按下则可使发光二极管从右向左 依次点亮,代表乒乓球”从右向左运动。在游戏过程中,用数码显示管实时显示双方 比分。游戏规则如下: (1) “乒乓球”移动速度是固定的,设定0.2秒钟移动一位(发光二极管)。 (2) 在“乒乓球”移位一次的过程中, 进行15次的测试, 查询接球方是否有击球动作。 (3) 接球方的击球动作应发生在“乒乓球”到达本方最后一位发光二极管 (即点亮) 2. 6秒钟时间之内。如接球方在此一秒钟之内按键,则接球成功,接球方得分。“乒乓 球”转为相反方向运动。此后,原接球方变为发球方,原发球方变为接球方。游戏继续 进行。 3所做工作 (1) 完成系统设计的构思, 根据构思开始编写程序, 逐步实现系统所需要的一些功 能 (程序中通过调用子函数实现); (2) 程序在ke订中编译通过后, 将产生的Hex文件卞载到单片机实验箱上进行硬件 测试。 4硬件组成 (1) 具体电路由单片机电路、发光二极管显示电路、按键电路和数码显示电路等 部分组成。 (2) Rl、C1组成单片机的复位电路,接通电源的瞬间,由于电源电压通过R1对 C1的充电过程,单片机复位端1脚获得一个高电平复位脉冲,使得单片机进入初始状 态。 (3) 发光二极管显示和按键电路 PO.OPO.T I I接8只发光二极管,Pl I接左按键(INTO中断),模拟左拍击球动作; P3.3 I I接右按键(INTI中断),模拟右拍击球动作。P0.00.7丨I和P0.0P0.7 口接数码显示管 显示扣分计数(0、F)。 5 主程序 主程序的功能是进行初始化工作,并控制“乒乓球”游戏的开始。模拟左拍的按键接Ps-sll, 模拟右拍的按键接Pxll。游戏开始时, 显示的比分是零比零, 此后, 如右拍按下则“乒乓 球”左移:如左拍按下则“乒乓球”右移。在主程序中,需要用四个通用寄存器分别作为右 方得分寄存器、左方得分寄存器、0.2秒计时常数寄存器及“乒乓球”移位计数器。 (1)“乒乓球”左移子程序发光二极管显示电路 单片机-简易乒乓球游戏机 左移子程序的主要功能是控制“乒乓球”的向左移动,并在逐位移动过程中判断是 否有左拍击球动作。只有当“乒乓球”移动到最左的一秒时间内击球才是有效的,左拍 得分,并转乒乓球右移子程序,使“乒乓球”向右移动,即相当于左方发球。除此之外, 所有的左拍击球都算失误,重新开始“乒乓球”左移子程序,相当于由右方重新发球。 (2) “乒乓球”右移子程序 “乒乓球”的右移子程序的原理与左移子程序的原理相同,只要把左移子程序流程图中的 “右”与“左”互换即可。 6设计流程及描述 (1)按键扫描程序 本设计中用到了 3个按键,其中一个作为复位端,另外两个作为击球球拍, 球过中线后,按键一次能及时将这球击打回去,按键两次为高抛球返回去;两 个球拍是用INTO、INTI外中断实现的。 INT1中断程序流程图如下: (2)主程序流程图:单片机-简易乒乓球游戏机 (3)显示流程图: 7源程序代码及注释 单片机-简易乒乓球游戏机 org OOOOh s jmp main 单片机复位后从OOOOH org 0003h INTO中断入口 s jmp zdl 转中断服务程序 org 0013h INT1中断入口 s jmp zd2 转中断服务程序 org 0030h main :mov r2, #0 mov r3, #0 mov pO, #0 setb p3 2 ;INTO (外部中断0输入线) setb p33 ;INTO (外部中断0输入线) mov dptr, #tab mov a, r2 ;DPTR指向数据表的首地址 move a,a+dptr 查表 mov pl, a mov a, r3 数码显示 move a,a+dptr 查表 mov p2, a ;数码显示 mov tcon,#OAh ;写控制字TCON, INTO和INT1有请求 mov ie,#85h ;写控制字 IE (EA=1, EX1=1, EXO=1) sjmp $ 等待中断信号 zdl: epi ea ;关闭总中断 acall dianliangl mov rd, #Offh ;调用从右向左点亮程序 DI: mov r5, #Offh pdl: jnb p33,fhl ;判断是否有中断请求,没有则顺序执行 则跳转至中断程序结束 djnz r5, pdl djnz rd, DI acall koufenl ;延时时间到,调用扣分程序 fhl: setb ea ;开总中断有效 reti ;中断返回 zd2: cpl ea ;关闭总中断 acall dianliang2 mov rd, #Offh ;调用从左向右点亮程序 D2: mov r5, #Offh pd2: jnb p32,fh2 ;判断是否有中断请求,没有则顺序执行, 则跳转至中断程序结束 djnz r5,pd2 djnz rd, D2 acall koufen2 ;延时时间到,调用扣分程序 fh2: setb ea ;开总中断有效 reti ;中断返回 单片机-简易乒乓球游戏机 koufenl: inc r2 cjne r2,#1Oh, songl mov r2, #0 mov r3, #0 songl:mov dptr, #tab mov a, r2 move a, a+dptr mov pO,a ret koufen2: inc r3 cjne r3,#1Oh, song2 mov r2, #0 mov r3, #0 song2:mov dptr, #tab mov a, r3 move a, a+dptr mov p2,a ret dianliangl:mov a,#01h si:mov pO, a acall DINGSHI ssl: rl a cjne a, #01h, si ret dianliang2:mov a,#80h s2: mov pO, a acall DINGSHI ss2: rr a cjne a, #80h, s2 ret DINGSHI: mov tmod, #01h mov r4,#02h CZ:mov thO, #3ch mov tlO,#ObOh ;选手1扣分程序 ;扣分到F则重新开局 ;数码显示 ;P0 口输出 ;子程序返回 ;选手2扣分程序 ;P2丨I输出 ;从右向左点亮的子函数 ;调用延时 ;从左向右点亮的子函数 ;产生0.2秒的定时setb trO WSHM: jbe tfO,OK sjmp WSHM OK: djnz r4,CZ ret tab: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课程设计体会 通过本次课程设计,真正做到了用单片机开发一件产品,虽然功能不是很多,但是 对如何运用单片机开发环境做到了一定的了解,也对单片机的部分功能比较熟悉,做到 了将单片机课上学到的知识应用到实践当中。从开始构思-编写程序-仿真-焊接板子- 调试,整个过程自己熟悉了一下了,受益匪浅,自己成功做出一件具有一定功能的实物 也很有成就感,燃起了对单片机的兴趣。
展开阅读全文