您好,欢迎来到知库网。
搜索
您的当前位置:首页模拟乒乓球比赛设计

模拟乒乓球比赛设计

来源:知库网
http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

模拟乒乓球比赛设计

---基于EasyFPGA030

学 校:广东工业大学

作 者:冯均庭 黎嘉炜 李伟亨

i

时 间:2009年8月26日

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

目 录

第1章 基于EasyFPGA030模拟乒乓球比赛的设计................................................ 1

1.1

1.2

功能概述 ................................................................................................................... 1 器件介绍 ................................................................................................................... 1 1.2.1 发光二极管简介 ............................................................................................... 1 1.2.2 数码管简介 ....................................................................................................... 2 1.2.3 蜂鸣器简介 ....................................................................................................... 3 1.2.4 EasyPFGA3P030简介 ...................................................................................... 4 1.3 电路制作及焊接 ....................................................................................................... 5

1.3.1 元件清单 ........................................................................................................... 5 1.3.2 焊接 ................................................................................................................... 5 1.4 程序设计原理 ........................................................................................................... 6

1.4.1 功能分析 ........................................................................................................... 6 1.4.2 程序设计 ........................................................................................................... 6 1.4.3 程序清单 ........................................................................................................... 9 1.4.4 端口使用情况 ................................................................................................. 14

ii

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

第1章 基于EasyFPGA030模拟乒乓球比赛的设计

1.1 功能概述

用EasyFPGA030开发套件,游戏电路是模拟乒乓球比赛,可供两人游戏。甲乙各持一按键作为球拍,实验板上一行16只发光二极管为乒乓球运动轨迹,用一只亮点代表乒乓球,它可以在此轨迹上左右移动。击球位置应在左右端第2只发光二极管位置,若击球键恰好当球到达击球位置时按下,则发出短短的击球声,球即向相反方向移动,若按键偏早或偏晚,则击球无效,无球声发出,球将继续向前运行至移位寄存器末端,并停止在该位置上不动也可以设计为亮点熄灭,此时判击球者失败,记分板上给胜球者加1分,再经过1s后,亮点自动按乒乓球比赛规则移到发球者的击球位置上,发球者按动击球按键,下一次比赛开始。

1.2 器件介绍

1.2.1 发光二极管简介

发光二极管 (Light-emitting diode, LED) 是一种半导体元件。初时多用作为指示灯、显示板等;随着白光发光二极管的出现,也被用作照明。它是21世纪的新型光源,具有效率高、寿命长、不易破损等传统光源无法与之比较的优点。加正向电压时,发光二极管能发出单色、不连续的光,这是电致发光效应的一种。改变所采用的半导体材料的化学组成成分,可使发光二极管发出在近紫外线、可见光或红外线的光。

LED与没有极性的白炽灯不同,只能在正向电流流过时才能发光。当加电压为正向时,会有较大的电流流过,于是我们称之为顺向偏压。如果电压极性接反了,则被称为逆向偏压,这时只有很小电流流过器件,并且不发光。LED 可以工作在交流电压下,但只有正向电压能使它被点亮,这会导致LED 以该交流电的频率闪烁。

符号

+

极性: 正 负 端子: 阳极 阴极 连线: 红 黑 管脚: 长 短 记号: 无 条纹 管脚号: 1

2

PCB: 方 圆 内部: 小 大 外部: 圆 平

由于体积细小,耗电低,容易推动,LED被普遍用作信息、状态显示。例如:消费性电子产品的状态指示灯;应急车辆上的发光条;机场和火车站的轻薄型消息显示板;以及用于火车、汽车、电车以及渡轮的终点显示牌;红、黄、绿和蓝光LED可用于铁路建设模型;紧急出口指示灯;交通灯;汽车转向灯与停车灯等等。

1

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

其外形常用的一般如图1.1所示。

图1.1 常见LED外形

本设计中使用LED作乒乓球的运动状态显示,用以模拟乒乓球的运动轨迹。以流水灯的形式实现乒乓球运动过程的模拟。 1.2.2 数码管简介

数码管是一种半导体发光器件,其基本单元是发光二极管(外形如图1.2)。

图1.2 数码管外形

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态显示驱动和动态显示驱动两类。本设计中以动态显示驱动作为数码管的驱动形式,所用四位数码管电路原理图如图1.3下所示。

2

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

图1.3 四位数码管的原理图

1.2.3 蜂鸣器简介

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

蜂鸣器驱动电路如图1.4所示:

图1.4 蜂鸣器驱动电路

3

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

1.2.4 EasyPFGA3P030简介

EasyFPGA030是广州致远电子有限公司为初学者“量身定做”的一款真正用得起的

FPGA开发套件,外观精悍小巧、,板子提供最简单、最实用的外设,并提供详实的资料助您在最短的时间学会FPGA的开发。

图 1.5 EasyFPGA0030开发板

芯片资源:

 基于非易失性Flash技术,单芯片解决方案,上电即行;  高度的安全性,保护知识产权;  高度的可靠性,固件错误免疫;

 采用精细颗粒架构VersaTile,资源利用率高;  具有30K系统门规模,一定的应用领域;

 提供1kbit的片内可编程非易失性FlashROM,信息存储;  灵活高效的全局时钟网络,提高设计性能;  在封装上,A3P030有132-QFN和100-VQFP两种;  支持最大81个用户I/O,热插拔和冷备份。

功能特点:

很强的兼容性,主芯片A3P030可以替换成资源更大的A3P060、A3P125、A3P250以及AGL系列;

I/O口全部引出,方便进行二次开发;

可以通过芯片内部的FlashROM进行数据存储; 提供注释详尽、简单的入门源程序;

板上集成了高性能的并口下载器,通过连接并口电缆即可下载。

并口下载器支持所有Actel第三代Flash架构的FPGA编程,包括ProASIC3、IGLOO、Fuison等。

4

    

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

1.3 电路制作及焊接

1.3.1 元件清单

表 1.1元件清单

器件名称 LED 电阻 数码管 三极管 二极管 参数 白、红、黄 1KΩ 4位数码管 8550 数量 白色、黄色各2;红色12 25 1 1 1 16位LED显示灯接法:

图 1.6 LED的原理图

1.3.2 焊接

按电路原理图焊接电路,效果如下图 1.7。

5

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

图 1.7 实物图

1.4 程序设计原理

1.4.1 功能分析

1. 乒乓球比赛规则:

赛制单打的淘汰赛采用七局四胜制,双打淘汰赛和团体赛采用五局三胜制。 2. 如何赢得一局比赛

在一局比赛中,先得11分的一方为胜方;10平后,先多得两分的一方为胜方。 3. 攻击次序和方位

在获得两分后,接发球方变为发球方,依此类推,直到该局比赛结束,或直至双方比分为10平,或采用轮换发球法时,发球和接发球次序不变,但每人只轮发1分球。在双打中,每次换发球时,前面的接发球员应成为发球员,前面的发球员的同伴应成为接发球员。 在一局比赛中首先发球的一方,在该场比赛的下一局中应首先接发球,在双打比赛的决胜局中,当一方先得5分以后,接发球的一方必须交换接发球次序。一局中,在某一方位比赛的一方,在该场比赛的下一局应换到另一方位。在决胜局中,一方先得5分时,双方应交换方位。

按比赛规则分析,本设计模拟单打比赛。设计中以两个按键分别模拟球拍作击球信号,以LED模拟球的运动过程,以4位数码管计分。简单地模拟乒乓球比赛 1.4.2 程序设计

程序模拟乒乓球比赛,比赛开始等待开球(按键信号),一开球(假设甲方开球)比赛开始,乒乓球开始运动(LED流水灯模拟),到底乙方击球位置(倒是第二LED的位置),要是击球成功(乙方有按键信号)球被击回(LED流水灯反向移动),否则球原方向移动,甲方得分。分数加1,在记分牌(数码管)上显示。方向同理。

6

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

得分后,停1S,重新进入发球状态,等待击球按键按下。一方每两发两次换发(转换开球位置)。另外每当有一方得分达到11分时好,记分清零,一局比赛结束。

根据所要达到的功能设计程序流程图,主流程:实现球的运动状态显示,模拟击球及换发球权的功能。

程序开始检查复位键否复位是根据当前状态显示对应灯号检查state内容State=1State=2检查甲方击球按键否LED原向移动LED反向移动是State=15State=16是检查乙方击球按键否LED原向移动LED反向移动熄灭灯号1秒熄灭灯号1秒判断是否甲方发球是甲方发球否否判断是否乙方发球是乙方发球乙方发球甲方发球 图1.8 主程序流程

计分流程:实现计数以及胜负判断功能。

7

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

开始检查复位信号复位分数为11而有按键信号检查分数寄存器及按键十分标志位清零显示复位其它情况显示分数检查shift数值Shift=1Shift=2Shift=3Shift=4甲方十分位寄存器为1时为0时第二位数码管按状态显示0~9第二位数码管按状态显示1乙方十分位寄存器为0时为1时第四位数码管按状态显示0~9第四位数码管按状态显示1甲方十分位寄存器为1时为0时第一位数码管按状态显示0~9第一位数码管按状态显示1乙方十分位寄存器为1时为0时第三位数码管按状态显示0~9第三位数码管按状态显示1图1.9 计分流程图

数码管显示进行动态的扫描,程序流程图如下。

8

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

开始检查复位按键否是复位是检查shift是否等于5否是否到5ms是Shift加1分数计数寄存器加1否分频计数寄存器加1shift清零 图 1.10 数码管显示流程图

1.4.3 程序清单

程序为基于Actel FPGA_A3P030设计的模拟乒乓球比赛程序,以流水灯形式模拟球的轨迹,以两按键模拟球拍。比分由数码管显示。

程序清单1 程序文件头

/*******************************文件信息**************************** **文件名: **创建者:

pingponggame.v 冯均庭

**创建日期: 2009.08.22

**功能描述: 模拟乒乓球比赛,甲乙各持一按键作为球拍,实验板上一行16只发光二极 ** ** ** ** ** ** ** **

管为乒乓球运动轨迹,用一只亮点代表乒乓球,它可以在此轨迹上左右移 动。击球位置应在左右端第2只发光二极管位置,若击球键恰好当球到达 球位置时按下,则发出短短的击球声,球即向相反方向移动,若按键偏早 或 偏晚,则击球无效,无球声发出,球将继续向前运行至移位寄存器末 端,并停止在该位置上不动。也可以设计为亮点熄灭,设计为亮点熄灭, 此时判击球者失败,记分板上给胜球者加1分,再经过1s后,亮点自动 按乒乓规则移到发球者的击球位置上,发球者按动击球按键,下一次比赛 开始。

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

程序清单 2 读击球按钮模块

//********************************************************************* // 模块名称:击球按键抖动处理

// 功能描述:判断系统按键输入,去除按键抖动造成的影响。

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

9

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

always @(posedge sclk or negedge reset ) begin

if(!reset) begin key1r<=1'b1; key2r<=1'b1; end else

begin key1r<=hit1; key2r<=key1r; end end

assign key_rst =!( key1r || key2r); // 模块名称:击球按键2抖动处理

// 功能描述:判断系统按键输入,去除按键抖动造成的影响。

//********************************************************************** always @(posedge sclk or negedge reset ) begin

if(!reset) begin key3r<=1'b1; key4r<=1'b1; end else

begin key3r<=hit2; key4r<=key3r; end end

assign key_rst2 =!( key3r || key4r); // 击球按键2防抖动输出

// 按键输入赋值给寄存器

// 判断复位键是否有效 // 击球按键2防抖寄存器置1 // 击球按键防抖动输出

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

// 按键输入赋值给寄存器

// 判断复位键是否有效 // 击球按键防抖寄存器置1

LED显示模块:实现设计主要功能,LED显示模拟球的运动,程序段包括比赛规则的实现。

程序清单3 LED显示模块

/******************************************************************* // 模块名称:LED显示

// 功能描述:利用状态机转产生流水灯效果

************************************************************************/ always@(posedge sclk or negedge reset) begin

if(!reset) begin

10

// 判断复位键是否有效 // 寄存器和LED显示输出复位

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

score_cn<=0; score_cn2<=0;

divclk_cnt <= 26'd0; left<=1'b1; stop<=1'b1; stop_0<=1'b0; score_total<=5'b0; ring_out<=1'b1;

ledout <= 16'b0000_0000_0000_0000; state <= 16'b0000_0000_0000_0001; end else

begin

case(state)

16'b0000_0000_0000_0001:

// 判断LED显示哪个状态

//

根据状态寄存器的值显示LED

begin

begin

if(!stop) // 判断LED是否显示1s

if(divclk_cnt==26'd48000000) begin

stop<=1'b1;

state <= 16'b0000_0000_0000_0001; divclk_cnt <= 26'd0;

end

else

// 点亮第一个LED灯 按键标志位清零

key_in<=1'b0; key_in2<=1'b0;

ledout <=~ 16'b1111_1111_1111_1110; divclk_cnt <= divclk_cnt+1'b1;

begin

end

end

else

begin if(stop_0) begin

if(divclk_cnt==26'd12000000)

begin // 乙方分数寄存器加1

score_cn2<=score_cn2+1; end

stop<=1'b0; stop_0<=1'b0;

state <= 16'b0000_0000_0000_0001; divclk_cnt <= 26'd0;

// 判断LED是否显示0.25s

11

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

end else begin

end begin

if(key_rst)

stop<=1'b1; left<=1'b1;

stop_0<=1'b0;

// 判断按键是否已经按下 // 个标志位赋值

ledout <=16'b1111_1111_1111_1110; divclk_cnt <= divclk_cnt+1'b1;

end else

begin

if((score_cn==4'b1011)||(score_cn2==4'b1011)) begin

score_cn<=0; score_cn2<=0;

end

end

begin score_total<=(score_cn+score_cn2); //

双方分数寄存器数值相加送总分寄存器判断是否应该互换发球 if ((score_total==5'b0)||(score_total==5'b1)|| (score_total==5'b100)||(score_total==5'b1001)|| (score_total==5'b1000)||(score_total==5'b1001)|| (score_total==5'b1100)||(score_total==5'b1101)|| (score_total==5'b10000)||(score_total==5'b10001)|| (score_total==5'b10100)||(score_total==5'b10101))

// 分数寄存器清零

begin end else

begin end

left<=1'b0; stop2<=0;

state <= 16'b1000_0000_0000_0000;

// 乙方发球跳转到最后一个状态显示

if(key_rst) else

begin

// 按键没按下保持原来显示状态

state <= 16'b0000_0000_0000_0001; ledout <=16'b1111_1111_1111_1110;

// 判断击球按键是否按下发球跳转

state <= 16'b0000_0000_0000_0010;

end

12

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

end end end end end

16'b0000_0000_0000_0010:

begin

begin

//

根据击球按键是否按下判断LED流水灯向前显示还是反向显示

// LED流水灯继续原来方向运动

if((left==1) & (!(key_in==1))) begin end else

begin

end end else

begin begin end

16'b0000_0000_0000_0100:

begin

// 本LED显示是否已经到了0.25s

end

key_in<=1'b1; ring_out<=1'b0; key_in2<=1'b0;

ledout <= 16'b1111_1111_1111_1101; divclk_cnt <= divclk_cnt+1'b1;

// 判断击球按键是否按下 // 蜂鸣器响

if(key_rst)

divclk_cnt <= 26'd0; left<=1'b0; key_in<=1'b0;

// LED流水灯往方向运动

state<=16'b0000_0000_0000_0100; stop_0<=1'b1;

state<=16'b0000_0000_0000_0001;

// 本LED显示是否已经到了0.25s

if(divclk_cnt==26'd12000000)

end

温馨提示:

由于程序代码太长,在该文档中,程序代码并没有全部列出。

13

http://www.elecfans.com 电子发烧友 http://bbs.elecfans.com 电子技术论坛

广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com

1.4.4 端口使用情况

表 1.2 端口分布清单

端口名称 hit1 hit2 ledout[0] ledout[1] ledout[2] ledout[3] ledout[4] ledout[5] ledout[6] ledout[7] ledout[8] ledout[9] ledout[10] ledout[11] ledout[12] ledout[13] ledout[14] ledout[15] 端口编号 15 16 99 97 95 93 91 86 84 82 100 98 96 94 92 90 85 83 作用 击球按键 击球按键 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示 输出16位led显示

端口名称 reset ring_out sclk score_out[0] score_out[1] score_out[2] score_out[3] score_out[4] score_out[5] score_out[6] score_out[7] score_out[8] score_out[9] score_out[10] score_out[11] 端口编号 64 29 13 45 42 40 31 33 44 41 34 32 35 43 46 作用 复位 蜂鸣器 系统时钟 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 输出比分 14

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务