乒乓球游戏机单片机工程实践报告.doc
《乒乓球游戏机单片机工程实践报告.doc》由会员分享,可在线阅读,更多相关《乒乓球游戏机单片机工程实践报告.doc(18页珍藏版)》请在沃文网上搜索。
1、目录一、 设计目的:用单片机实现一个模拟的乒乓球游戏机0二、 设计任务:0三、 框图(包括自检和任务的框图):0四、 程序清单:6键盘自检:k1 bit p1.0;定义键盘13LED自检程序15五、 设计体会17七、参考资料17一、 设计目的:用单片机实现一个模拟的乒乓球游戏机二、 设计任务:任务内容:开发LED显示模块 加速模块、显示模块、蜂鸣器模块任务分配:组长:王伟男负责主程序的编写以及定时器和中断的编写及联调 组员:徐菡卿负责编写键盘采集程序编写 组员:周秀丽负责编写延时子程序和蜂鸣器的程序的编写 三、 框图(包括自检和任务的框图):1、 硬件编程框图及相关说明P0.0P0.7Led数
2、码管单片机P2.5-p2.774ls138蜂鸣器P1.0-P1.7键盘 P2.32、 主程序框图、子程序框图及相关说明(1) 主程序框图 开始 向左发球 是 是否为20次 右侧加分蜂鸣器响 停止加速 否 显示分数 否 是否接住球 是向右发球 开始加速 左加分蜂鸣器响 是 停止加速是否为20次 否 是否接住球 否 是 开始加速乒乓球向左移的子程序框图(乒乓球向右移动的程序同理): 开始 开显示“一” 第一位显示 下几位显示分数显示子程序: 开始 取分数将分数的十位数与个位数放入缓存区 显示个位数 延时 显示十位数定时器中断子程序: 开始 开始计时 否 是否已经溢出50次 是加速 重装初值 蜂鸣器
3、自检程序: 主程序 中断子程序 开始 开始 装入初值 取反蜂鸣器启动定时计数器 重装初值 加初值 返回 返回 键盘自检: 开始 否 是否有键按下 是 蜂鸣器响 否 键是否提起 是 返回LED自检程序: 开始 显示第一位 数字0-9显示第二位 数字0-9 显示第三位 数字0-9显示第四位 数字0-9 显示第五位数字0-9 返回 四、 程序清单: ;*;#功能:实现模拟乒乓球游戏机功能;#CPU:AT80C51;#晶振频率11.0592MHz;#开发环境:伟福ICE;#返回值:无;#设计人:刘红喜、王欣冉、郭兴荣;#组别:一组;#游戏规则:当按下k3键时游戏开始,首先从左侧发球,其中k1和k4键分
4、别代表左侧球拍和右侧#;#当左侧球拍提前击球或者滞后击球都会为对方加分,接住球不计分,右侧同理#;#当接住球后开始加速,但是当提前击球或者滞后击球则停止加速球的运动#;#规定每局打20次,在20次结束后开始显示比分#;*score_left equ 30h;定义左侧分数缓存区uint_left equ 31h;左侧得分的个位缓存区decade_left equ 32h;左侧得分的十位缓存区score_right equ 33h;定义右侧分数缓存区uint_right equ 34h;定义右侧的分缓存区decade_right equ 35h;定义右侧分数十位缓存区speed equ 36h;定
5、义球移动速度缓存区speed2 equ 37htimes equ 38h;为发球的次数开辟缓存区beep bit p2.3;定义蜂鸣器端口k1 bit p1.0;定义k1位k2 bit p1.1;定义k2位k3 bit p1.2;定义k3位k4 bit p1.3;定义k4位sw1 bit p1.4;定义拨盘sw2 bit p1.5sw3 bit p1.6sw4 bit p1.7org 00hajmp mainorg 0bhajmp timer0;timer0为定时器0子程序org 30h;错开中断入口地址;*;下面是主程序#;#;*main:init:mov p1,#0ffh;键盘端口初始化
6、mov p0,#00h;关数码管 setb p2.3;关闭蜂鸣器 mov score_left,#0h;初始化分数 mov uint_left,#0h;初始化左侧分数个位 mov decade_left,#0h mov score_right,#0h;初始化右侧分数 mov uint_right,#0h;初始化右侧个位分数 mov decade_right,#0h;初始化右侧分数十位 mov speed,#60;初始化球的移动速度 mov times,#20;每局打20下 mov TMOD,#01h;设置定时计数器方式1 mov TH0,#0b1h mov TL0,#0e0h;定时20ms m
7、ov IE,#82h;开总中断和定时计数器0中断 mov r7,#0h;初始化r7start:jb k3,start;启动判断开关 lcall delay2;延时去抖动 jb k3,start;如果k3键按下则继续执行,否则返回 lcall win_buzzer;*;乒乓球左移程序;此段程序用于将“球”向左移动;*led_left:mov p0,#80h ;送入“一” djnz times,led_left1;判断是否为20次 lcall score_display_left led_left1:acall sel5 acall delay acall sel8led_left2:jb k1,
8、led_left3;如果k1不按下则 lcall delay2 jb k1,led_left2 lcall led_left_failled_left3:acall sel4 acall delay acall sel8led_left4:jb k1,led_left5 lcall delay2 jb k1,led_left4 acall led_left_fail;如果在此时按下k1键则跳入输判断子程序led_left5:acall sel3 acall delay acall sel8led_left6:jb k1,led_left7 lcall delay2 jb k1,led_left
9、6 lcall led_left_fail;led_left7:acall sel2 acall delay acall sel8led_left8:jb k1,led_left9 lcall delay2 jb k1,led_left8 lcall led_left_failled_left9:acall sel1 acall delay acall sel8led_left10:jb k1,led_left11 ;如果没有按下键则重新从左发球 nop;较容易出问题处 nop lcall delay2 jb k1,led_left10 acall sel1;开数码管第一位 nop acall
10、 win_buzzer setb tr0;如果接住球启动定时器加速球的速度 ljmp led_rightled_left11:inc score_right lcall fail_buzzer clr TR0 ljmp led_left;*;此程序实现乒乓球右移动程序;*led_right:mov p0,#80h ;送入“一” djnz times,led_right1 lcall score_display_leftled_right1:acall sel1 acall delay acall sel8led_right2:jb k4,led_right3 lcall delay2 jb k
11、4,led_right2 lcall led_right_failled_right3:acall sel2 acall delay acall sel8led_right4:jb k4,led_right5 lcall delay2 jb k4,led_right4 lcall led_right_failled_right5:acall sel3 acall delay acall sel8led_right6:jb k4,led_right7 lcall delay2 jb k4,led_right6 lcall led_right_failled_right7:acall sel4 a
12、call delay acall sel8led_right8:jb k4,led_right9 lcall delay2 jb k4,led_right8 lcall led_right_failled_right9:acall sel5 acall delay acall sel8 nop nopled_right10: jb k4,led_right11;如果没有按下则重新从有发球 lcall delay2 jb k4,led_right10 acall sel5;开数码管第5位 nop acall win_buzzer setb TR0;如果接住球则启动定时计数器 ajmp led_l
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 乒乓球 游戏机 单片机 工程 实践 报告