单片机简易乒乓球游戏机.docx

上传人:b****4 文档编号:3072310 上传时间:2022-11-17 格式:DOCX 页数:23 大小:242.64KB
下载 相关 举报
单片机简易乒乓球游戏机.docx_第1页
第1页 / 共23页
单片机简易乒乓球游戏机.docx_第2页
第2页 / 共23页
单片机简易乒乓球游戏机.docx_第3页
第3页 / 共23页
单片机简易乒乓球游戏机.docx_第4页
第4页 / 共23页
单片机简易乒乓球游戏机.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

单片机简易乒乓球游戏机.docx

《单片机简易乒乓球游戏机.docx》由会员分享,可在线阅读,更多相关《单片机简易乒乓球游戏机.docx(23页珍藏版)》请在冰豆网上搜索。

单片机简易乒乓球游戏机.docx

单片机简易乒乓球游戏机

单片机课程设计

实验报告

 

设计题目

简单乒乓球游戏

所选题意义

充分利用51单片机壮大的操纵功能并结合实验室所具有的设备(示波器),设计一个简单的两人乒乓球游戏,使这种生活中游戏也能在电子设备中实现,再次证明实验也并非是枯燥的,乐趣就在其中,关键取决于自己

系统所实现的要紧功能

(1)利用51单片机输出两路脉冲波到示波器,将示波器设置为X-Y模式(显示乒乓球点),操纵单片机使乒乓球在示波器上两边跳动,途径呈抛物线形式;

(2)利用两个按键作为球拍,能够将乒乓球即便击打归去(仍然呈抛物线),假设没有即便击打乒乓球,那么球触边界表示一方击球失败,另一方相应的加1分,分数实时在数码管上显示,同时有代表两边的红、绿LED灯相应闪烁;

(3)按键一次,蜂鸣响一下,球走向为一样抛物线,按键两次表示球以高抛球形式返归去;

(4)球的球向由LED灯实时显示,同时球过中线时,数码管小数点闪烁一下

(5)同实际一样,游戏为11分制,任何一方先达到11分为成功方,同时奏响成功方的音乐(两边有各自不同的音乐),在奏响音乐的时候,数码管归零,音乐终止后,游戏从头开始

本人所做工作

(1)完成系统设计的构思,依照构思开始编写程序,慢慢实现系统所需要的一些功能(程序中通过挪用子函数实现);

(2)程序在keil中编译通事后,将产生的Hex文件加入到Proteus仿真环境下的单片机中,连接电路后仿真;

(3)在编写完程序和Proteus仿真取得预期成效后,开始购买元件,焊接硬件电路;

(4)焊接完后,在实验室利用示波器和单片机电路联调,以达到最正确成效

硬件电路设计及描述

本设计用自己焊接的PCB板实现。

实际焊接的电路在keil和Proteus联调环境下实现了全数功能。

系统硬件电路包括:

显示部份、按键部份、蜂鸣奏乐部份。

(1)显示部份

电路图如下:

本设计采纳的是共阳数码管,作为打球两边计分显示。

用P0口作为数码管的段选,由于P0口内部没有上拉电阻,在输出1时是悬浮的,状态不确信,因另外接上拉电阻,当输出0时,靠内手下拉电阻输出为低电平,当输出为1时,靠外部上拉电阻输出为高电平。

P2口的0、一、二、3端口作为数码管的位选端,由于用的是大号的共阳数码管,因此为了让实际中数码管足够亮,在位选端加入PNP三极管增加驱动。

两个红、绿LED发光二极管灯别离接P1_7、P1_6口,得分的一方闪烁一下各自的LED灯;同时LED灯显示球在抛物线的哪一边,球过中线时,数码管小数点亮一下。

(2)蜂鸣奏响部份

电路图如下:

P1_3口作为蜂鸣器的输入端,为了能驱动蜂鸣器,一样增加了PNP。

(3)按键部份

两个外部触点按键别离接外中断INTO、INT1作为击球的球拍。

总的电路图如下:

(1)单片机XATL一、XATL2端口接12M晶振;RST端口接复位按键;

(2)对ROM的读操作是始终从单片机的内部程序存储器开始的,因此EA端口一直接高电平;

(3)P1_一、P1_2作为两路X轴、Y轴脉冲波的输出端,接入到示波器中显示乒乓球运动

单片机上电后,假设不按按键那么乒乓球点开始在示波器上两边来回呈抛物线跳动,乒乓球在一边触底线后,另一方得分,数码管分数加1,同时LED灯闪烁一下;乒乓球过中线后,按键一次乒乓球即便反弹归去,数码管分数不变,同时LED灯不亮;持续按键两次,乒乓球呈高抛球轨迹反弹归去;当一方分数达到11分时,音乐奏响,同时数码管归零。

软件设计流程及描述

(1)按键扫描程序

本设计顶用到了3个按键,其中一个作为复位端,另外两个作为击球球拍,球过中线后,按键一次能及时将这球击打归去,按键两次为高抛球返归去;两个球拍是用INTO、INT1外中断实现的。

INTO中断程序流程图如下:

 

外中断开启

INTO是否为0

进外中断,延时10ms

INT0是否为0

退出外中断

球是否中线和边界之间

建立返回标志位flag;shu1++,shu2=0;

判断shu1奇偶数,建立发高抛球标志位

数码管显示,发X轴、Y轴波

按键是否弹出

(2)T0中断效劳程序

采纳按时器T0计时,采纳模式1每隔进入按时器中断效劳程序中对乒乓球进行处置,包括判定标志位来加减用于查X轴、Y轴表的计数值;判定球是不是触边界了,假设触边界那么让发球方分数加1,点亮发光二极管;判定比分是不是达到11分来决定是不是设定开启音乐子程序的标志位。

T0中断效劳程序流程图如下:

 

保护现场

设定计数初值

到否

进中断,判断标志位flag

重装计数器值

0

查表计数值++,判断计数值是否为54

设Flag为1,比分加1,抛物线标志位置1,点亮LED灯

判断比分是否为11

恢复现场

1

查表计数值--,判断计数值是否为0

设Flag为0,比分加1,抛物线标志位置1,点亮LED灯

判断比分是否为11

返回

建立响不同音乐标志位flag2,比分置0,关T0中断,设置T1计数初值,设定进入响音乐程序的标志位flag1

(3)显示部份

采纳数码管动态扫描法,能实时显示比分值

数码管显示子程序流程图如下:

位选设定(高位)

查共阳表后送入到P0口

位选设定(低位)

查共阳表后送入到P0口

延时

延时

返回

(4)蜂鸣音乐设计

音调由不同频率的方波产生,音调与频率的关系如下表所示(这是其中一个八度)。

要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时刻。

利用计时器计时此半周期时刻,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时刻再对I/O反相,就可在I/O脚取得此频率的方波。

在在焊接板中产生方波的I/O脚选用,端口已经与蜂鸣器的驱动电路相连。

如此输出不同频率的方波,蜂鸣器便会发出不同的声音。

另外,音调的节拍是由延时实现的。

依照延时的设定和乐谱的节拍数,设定半拍、1拍的时刻。

(5)整体设计流程图:

中断初始化

灭LED灯,发X轴、Y轴波子函数调用,数码管显示子函数调用

标志位flag1是否为1

判断flag2

1

0

查询乐曲“欢乐颂”表(音调、节拍),调用song子函数

查询乐曲“卡农”表(音调、节拍),调用song子函数

判断乐曲是否结束对定时器T1、T0开启与否进行设置

数码管显示

进定时器T0中断服务程序

时间中断

外中断

进外中断服务程序

 

源程序代码及注释

#include<>

#defineucharunsignedchar//8位无符号数

#defineintunsignedint//16位无符号数

#defineulongunsignedlong//32位无符号数

/*************************************************************************/

sbitspeaker=P1^3;//扬声器输出口定义

unsignedchartimer0h,timer0l,time;//音调、节拍变量概念

/***********频率-半周期数据表高八位共保留了四个八度的28个频率数据***/

codeunsignedcharFREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,//超低音1234567

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,//低音1,2,3,4,5,6,7

0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,//中音1234567

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};//高音1234567

/*******************频率-半周期数据表低八位***************************/

codeunsignedcharFREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,//超低音1234567

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,//低音1,2,3,4,5,6,7

0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,//中音1234567

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};//高音1234567

/************************************************************************

一个音符有三个数字。

前为第几个音、中为第几个八度、后为时长(以半拍为单位)

6,2,3代表:

6,中音,3个半拍;

1,3,2代表:

1,高音,2个半拍;

要想演奏不同的乐曲,只需要修改下面的数据表

************************************************************************/

/**********************************欢乐颂*******************************/

ucharcodehls[]={3,2,2,3,2,2,4,2,2,5,2,2,5,2,2,4,2,2,3,2,2,2,2,2,1,2,2,

1,2,2,2,2,2,3,2,2,3,2,3,2,2,1,2,2,4,3,2,2,3,2,2,4,2,2,5,2,2,5,2,2,4,2,2,

3,2,2,2,2,2,1,2,2,1,2,2,2,2,2,3,2,2,2,2,3,1,2,1,1,2,4,2,2,2,2,2,2,3,2,2,

1,2,2,2,2,2,3,2,1,4,2,1,3,2,2,1,2,2,2,2,2,3,2,1,4,2,1,3,2,2,2,2,2,1,2,2,

2,2,2,5,1,2,3,2,2,3,2,2,3,2,2,4,2,2,5,2,2,5,2,2,4,2,2,3,2,2,4,2,1,2,2,1,

1,2,2,1,2,2,2,2,2,3,2,2,2,2,3,1,2,1,1,2,4,

0,0,0};

/**********************************卡农*********************************/

ucharcodekan[]={5,3,2,3,3,1,4,3,1,5,3,2,3,3,1,4,3,1,5,3,1,5,2,1,6,2,1,

7,2,1,1,3,1,2,3,1,3,3,1,4,3,1,3,3,2,1,3,1,2,3,1,3,3,2,3,2,1,4,2,1,5,2,1,

6,2,1,5,2,1,4,2,1,5,2,1,3,2,1,4,2,1,5,2,1,4,2,2,6,2,1,5,2,1,4,2,2,3,2,1,

2,2,1,3,2,1,2,2,1,1,2,1,2,2,1,3,2,1,4,2,1,5,2,1,6,2,1,4,2,2,6,2,1,5,2,1,

6,2,2,7,2,1,1,3,1,5,2,1,6,2,1,7,2,1,1,3,1,2,3,1,3,3,1,4,3,1,5,3,1,3,3,2,

1,3,1,2,3,1,3,3,2,2,3,1,1,3,1,2,3,1,7,2,1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1