掷骰子游戏电路的设计与实现实验报告
掷骰子游戏设计报告

掷色子设计报告学院 土木工程学院 班级 测绘C111 学号 117548 姓名 李景赛 成绩一、设计思路1.要达到的目的①培养学生综合利用VB 语言进行程序设计的能力。
②培养学生综合使用基本控件的、子过程和控件数组等操作能力。
③单击“开始”后,使时钟控件出发Timer 事件,利用随机函数,产生一个1~6的随机数,将这个数作为“点数”在标签中显示,并调用子过程将Shape 控件数组圆形按点数做相应的显示注意Visible 和FillColor 属性的使用。
2.关键问题的解决①游戏启动过程中筛子从0~6做循环,需要设置"点"的样式②过程用于根据显示0~6数字,显示相应的控件组合③单击停止按钮,会停止骰子的滚动并显示一个随机生成的点数二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释程序运行起来,单击"开始"按钮,设Timer 控件的Enabled 属性为True,点数开始滚动,实现代码如下 Private Sub Command1_Click()Timer1.Enabled = TrueEnd Sub当Timer 控件可用时,会触发Timer 控件的Timer 事件,程序代码如下Private Sub Timer1_Timer()Randomizenum = Int(Rnd * 6) + 1Label1.Caption = num & "点"DisPlay (num)End Sub四、设计方案的完善及目前存在的问题1.设计方案要完善的地方①掷色子的界面过于单调,背景不够吸引人。
②有些代码过于繁琐,没有用更加简便的方法。
2. 目前存在的问题①有一部分代码自己还是会出现逻辑上的问题②时间仓促,本次设计还有好多地方不理想五、本次设计的收获及心得体会在本次课程设计中发现了自己存在好多问题,有些课本上的知识在课程设计中还是不能应用到课程设计当中。
C++实验报告.骰子游戏

cout<<"如果所得到的和为4或5或6或8或9或10,那么此和为游戏者的点数,"<<endl;
cout<<"如果游戏者想要获得胜利,必须继续投掷骰子,直到取得自己的数字为止"<<endl;
cout<<"如果投掷出的和为7,那么游戏者为输掉游戏."<<endl;
else if (m==2||m==3||m==12){}
else if (m==4||m==5||m==6||m==8||m==9||m==10){}
6.当需进行多轮游戏,用while循环来解决:
n=Dice.RollDice();
for (i=2;n!=m&&n!=7;i++)
{
cout<<"第"<<i<<"次掷骰子的结果为:"<<n<<endl;
二
MicrosVisualC++6.0。
三
1.构造一个掷骰子的类CDice:
class CDice
{
public:
int RollDice();
void explain();
void start();
private:
int a,b,c;
};
在类外定义函数RollDice(),explain(),start()。
}
else if (p==1)
{
srand((unsigned)time(NULL));
电骰子的设计与制作(电子电工课设)

摘要课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,电子产品已经成为当今生活应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握电子产品的开发技术是十分重要的。
本文针对电子产品中最常见的电骰子的设计与制作提出了两套切实可行的方案,对他们的优缺点进行了分析对比,并对优化方案进行了详细的介绍。
在设计部分,本文着重讲述的是用集成芯片实现电骰子的功能。
关键词:脉冲 555定时器六进制计数器随机数目录1 内容摘要-------------------------------------------------------------- 32 设计内容及要求-------------------------------------------------------- 33 设计思路-------------------------------------------------------------- 43.1 系统框图 --------------------------------------------------------- 43.2 完整电路图 ------------------------------------------------------- 43.3 电路的工作原理 --------------------------------------------------- 44 设计过程-------------------------------------------------------------- 64.1 脉冲源 ----------------------------------------------------------- 64.2 控制电路----------------------------------------------------------------- 104.3 显示电路----------------------------------------------------------------- 145 组装电路----------------------------------------------------------------------- 16 5.1 使用的主要仪器和仪表--------------------------------------------------- 16 5.2 调试电路的方法和技巧--------------------------------------------------- 165.3调试中出现的故障和原因及排除方法-------------------------------------- 176 心得体会----------------------------------------------------------------------- 177 参考文献----------------------------------------------------------------------- 188 系统需要的元器件列表--------------------------------------------------------- 189 附表--------------------------------------------------------------------------- 19电骰子的设计与制作1 内容摘要此次课程设计的内容是电骰子的设计与制作,这个电路要求按下开关后LED能从1-6随机显示一个数。
声光电骰子设计

关于声光电子“骰子”设计摘要:随着现代社会生活质量的提高,人们有更多的时间去休闲,去参与一些娱乐活动,而这也直接促进了游戏事业的发展。
有一些自然离不开骰子的随机选数。
本游戏机电路采用按压按钮的方式来显示0--9数字的大小。
利用十进制脉冲计数/分配器,蜂鸣电路等组成。
由于按压按钮和表示数字的发光二极管LED的点亮呈随机性,故每个参加游戏的人的机会是均等的,就看操作者的运气如何,而且在游戏的过程中,电路会发出蜂鸣声来指示数字有效,也增加了趣味性。
关键词:LED灯,计数器,定时器目录引言1.设计任务2.元件选择3.器件的使用和性能判断4.电路原理及实现5.实验中出现的问题6.结论7.参考文献引言在当下快节奏的都市生活中,游戏占据了人们休闲娱乐的巨大份额。
人们在玩游戏的过程中不仅放松了身心,体味到游戏所独有的魅力,而且还可以舒缓压力,把生活中的忧虑和不安统统抛弃,进入一个以自我为中心的世界,满足了自我的心理需求。
但是玩游戏有一个很重要的准则就是公平。
相信谁也不会在一个不平等的情况下,能起到游戏本身的娱乐作用。
我们利用游戏娱乐,很多时候是因为我们在现实生活中,没有得到应有的对待,收到了不公平的待遇。
所以实现游戏的公平就是一个很重大的研究方向。
一.设计任务利用常用IC,设计具有声光和数字提示的“骰子”电路供游戏使用具体要求:1.自行设计12V直流稳压电源,作为系统供电电流。
2.通过按钮产生0-9随机数,用10位LED灯显示数值大小,并用声提示数字的有效性;实际设计中也可以考虑用一个8段LED数码管来显示具体数字。
3.作品包装设计按应用场合要求设计,做到小巧、操作方便、实用为主。
4.自行收集设计题目内容有关资料,进行综合,设计出系统电路图,应注意保证作品的简单化、先进性、实用性,并注意使用成熟的电路和集成电路设计。
5.作品应考虑在应用场合和功能扩展两方面的创新设计。
6.完成样机的包装设计,原理图设计,PCB板制作,元件安装调试,最终完成样机成品两套和设计制作论文一篇。
电骰子设计与制作正文

目录摘要 (1)1 结构设计与方案选择 (2)1.1结构设计 (2)1.2各部分电路方案 (3)1.2.1脉冲产生电路 (4)1.2.2循环计数电路 (7)1.2.3译码显示电路 (9)2.整体电路方案及对比选择 (10)2.1电骰子整体电路方案一 (10)2.2电骰子整体电路方案二 (11)2.3方案对比选择 (11)3.实际电路的调试安装及故障排除 (12)结束语 (14)参考文献 (15)附录 (16)摘要现实中投掷骰子,实质是为了随机且等机会地得到1、2、3、4、5、6这六个点数。
电骰子的设计和制作的最终实质与现实中骰子相同,其需要综合运用电子、电路的知识,设计出以时间间隔为随机变量能产生1至6这六个随机数的电路。
电骰子电路由脉冲产生电路、循环计数电路、译码显示电路等部分组成。
计数器的功能是统计时钟脉冲的个数,利用这个功能和反馈置数使计数器实现1至6的循环计数。
时钟脉冲的产生可以使用555定时器构成多谐振荡器,也可以使用RC电路搭建的简单多谐振荡器。
在Multisim软件上进行设计和仿真,可以使电路图清楚美观,且使方案的比较验证更加简易,得出最佳的设计方案,大大的方便了设计过程的实施。
关键词:循环随机数多谐振荡器计数器电骰子的设计与制作1.结构设计与方案选择1.1结构设计制作电骰子即要在电路控制下每次随机地产生一个1~6中的数。
为了保证所设计出来的骰子性能,应该使得1~6出现的概率是一样的。
产生随机数的方法有很多,原理都是采集利用自然中的随机量来产生。
如采集放大空间中的噪声信号,然后利用D/A转换成数字信号,产生随机数;又如用时间作随机量,采用循环计数的方式产生随机数。
还可以在以上的基础上加上乱码电路来增加随机性。
因为利用噪声信号产生随机数的方法比较复杂、不易实现、制作成本较高,所以采用时间做随机量的方法来产生1~6的随机数。
电路分为三块:脉冲产生电路、循环计数电路和译码显示电路。
其电路框图如图1-1所示:图1-1 电骰子电路结构框图图1-1 电骰子电路结构框图脉冲产生电路有很多实现方法:可以利用门电路组成的多谐振荡器实现,也可以使用555定时器来实现,还可以用RC谐振电路来实现。
实验四:掷骰子游戏电路

实验报告课程名称FPGA实验项目掷骰子游戏电路实验仪器Quartus 2系别专业____________班级/学号__________学生姓名__________________实验日期__________________成绩_______________________指导教师_____________________实验六数字电路系统实验——设计两人掷骰子比较点大小的游戏电路一、实验目的1.设计一个游戏电路并在实验装置上验证所设计的电路;2.建立自顶向下的设计思路。
二、实验要求A、B两人玩掷骰子的游戏,当A的点数大于B的点数时,输出H=“1”、L=E=“0”;当A的点数小于B的点数时,输出L=“1”、H=E=“0”;当A的点数等于B的点数时,输出E=“1”、H=L=“0”;并同时用两个数码管显示A、B两人的点数。
二.实验程序及原理图两人掷骰子比较点大小的游戏电路原理图(1)六进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter isport(a,clk,cr:in std_logic;b:out std_logic_vector(2 downto 0)); end;architecture m1 of counter issignal po:std_logic_vector(2 downto 0); beginprocess(clk,cr)beginif cr='1' then po<="000";elsif clk 'event and clk='1' thenif a='1' thenif po=6 then po<="001";else po<=po+1;end if;end if;end if;end process;b<=po;end;(2)比较器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity compair isport(a,b:in std_logic_vector(2 downto 0); H,L,E:out std_logic);end;architecture m1 of compair isbeginprocess(a,b)beginif a>b then H<='1';L<='0';E<='0';elsif a<b then H<='0';L<='1';E<='0';else H<='0';L<='0';E<='1';end if;end process;end;(3)位码选择器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity gate3_8 isport( clk:in std_logic;a: in std_logic_vector(2 downto 0);b: in std_logic_vector(2 downto 0);out2,out1:out std_logic_vector(2 downto 0)); end gate3_8;architecture m1 of gate3_8beginprocess(clk)beginif clk='1' then out1<=a ;out2<="010";else out1<=b ;out2<="011";end if;end process;end;(4)译码电路library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show isport(out1:in std_logic_vector(2 downto 0); outp:out std_logic_vector(7 downto 0)); end;architecture m1 of show isbeginwith out1 selectoutp<="00111111" when "000","00000110" when "001","01011011" when "010","01011011" when "011","01100110" when "100","01101101" when "101","01111101" when others;end;。
电子设计报告--模拟掷色子----王允臣--田凯

设计题目: 班 级: 姓 名:
指导教师:
模拟掷骰子电路设计 信科 10-1 王允臣(08103478) 田凯 (08103476) 许新征
二Ο一三年 5 月 20 日
进度安排
任务进度
搜集资料,大致了解如何进行设计,学 习 protel,进行可行性分析等,完成需 求分析报告 在前一阶段搜集资料等准备的前提下, 进行总体设计,包括软硬件模块的设计 等,完成总体设计报告
进行详细设计,画电路图,进行仿真, 完成详细设计报告
购买电子元件,完成电路的焊接,并测 试功能,同时完成相关报告编写
时间
第 1-2 周 第 2-4 周 第 5-6 周
第 7-8 周
编写程序,并进行测试,完成相应报告
第 9-10 周
整体测试系统,查看有无不足,可以进 行进一步的完善,是系统更加人性化
第 11-12 周
sbit smg_d=P3^6;//定义控制数码管数据的 573 的锁存端 sbit smg_w=P3^5;//定义控制数码管公共端的 573 的锁存端 #define smg_data P1//定义之后可以用 DATA_573 代替 P0
sbit key=P3^7; sbit beep=P3^4;
1.5 用户使用说明
游戏时,游戏者交替按键,次序不可颠倒,不可重复按键,分出胜负后,数 码管显示不在变化。若要重新比赛,请按复位键继续。
1.5 参考资料
《Protel DXP 实用教程》王正勇 《单片机原理及应用》 作 译 者:蔡振江
《数字电路》贾立新,何剑春,包晓敏 电子工业出版社 《电路》邱关源 高等教育出版社
1
17
串口芯片 MAX232
电骰子电路设计全设计说明

电骰子电路设计全设计说明信息职业技术学院毕业设计说明书(论文)设计(论文)题目: 电骰子电路设计专业: 通信技术班级: 通技06-2 学号:姓名:指导教师:二ΟΟ八年十二月三十日信息职业技术学院毕业设计(论文)任务书备注:任务书由指导教师填写,一式二份。
其中学生一份,指导教师一份。
目录摘要 (1)第1章绪论 (2)第2章方案设计 (4)第3章单元电路设计 (7)3.1振荡电路设计 (7)3.2计数器电路设计 (8)3.2.1 计数器电路芯片的选择 (8)3.2.2 计数器电路组成 (9)3.3译码器电路设计 (10)3.3.1 译码器电路功能框图 (10)3.3.2 译码器电路设计 (10)3.4LED的驱动电路设计 (12)3.5时钟控制电路 (12)第4章电路仿真 (14)总结 (16)致谢 (17)参考文献 (18)附录总电路原理图 (19)摘要骰子是娱乐游戏的一种道具,可以用它来随机地选取1~6的数。
本电路设计一个电骰子电路,该电路由电骰子的电路结构决定。
电路由RC振荡电路、计数器电路、译码器电路、LED驱动电路、时钟控制电路五部分电路构成,其中计数器是整个电路的核心部分,而译码器在电路中没有采用原有的译码器,而用门电路来实现,是为了让电路更简单。
关键词振荡器;计数器;译码器第1章绪论骰子应用十分广泛,现在社会上流行有各种定位骰子、黄金骰子、打破无物骰子、感应骰子、遥控骰子等,它是娱乐游戏的一种道具,是许多娱乐必不可少的工具之一,比如麻将等。
早先是用骨头,木头等制成的立体小方块,六面分别刻有一、二、三、四、五、六点,只有1,2,3,4,5,6这六个数,有的地方叫色子。
用骨头、木头等制成的立体骰子,在使用时通常是把骰子摇动后掷落,以上面的数作为选取的数字。
这六个数中,每掷一次,其中某个数出现的概率是1/6。
所谓1/6的概率,就是说这六个数并不是按照某种顺序出现的,而是随机的。
如果撇开骰子的形状和使用方法的约束来抽象地评价它的功能,那么骰子就是一种“从1~6的数字中,每次只随机地选择1个数字的选择装置”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字电路与逻辑设计实验题目:掷骰子游戏电路的设计与实现学号::进考班级:学院:信息与通信工程学院日期:2014.11.10一、设计课题的任务要求设计并实现一个掷骰子游戏电路。
基本要求:1、电路可供甲乙二人游戏,游戏者甲使用的按键为BTN0,游戏者乙使用的按键为BTN1。
2、每按一次按键,代表掷一次骰子,可随机得到 1~6 围的两个数字。
3、甲乙按键产生的随机数字分别用数码管DISP0-DISP1、DISP2-DISP3 显示,并用DISP7 显示比赛局数,比赛结束用8×8 点阵显示获胜方,并伴有声音效果。
4、具体游戏规则如下:(1)第一局比赛,甲乙依次各按一次按键,按键所得两数之和为7 或11 者胜;若无人取胜,则进行第二局比赛;(2)第二局比赛,甲乙每人各按一次按键,按键所得二数之和与第一局比赛相同者获胜,若无人获胜,则进行第三局比赛,重复进行步骤(2),直到出现胜者为止。
(3)游戏局数最多进行六局。
在第六局比赛时,若重复进行步骤(2)仍未出现胜者,以按键所得两数之和最大者为获胜方。
提高要求:1、增加多人游戏的功能,数码管可分时记录显示每个游戏者的骰子点数。
2、点阵显示增加游戏开机动画、结束动画,并伴有乐曲播放。
3、自拟其它功能。
二、系统设计(包括设计思路、总体框图、分块设计)1、整体设计思路将整个游戏电路分为时钟分频模块、随机数产生模块、数码管显示模块、判断控制模块、点阵显示模块等五个模块。
其中,时钟分频模块用于产生适合其他模块使用的时钟频率;随机数产生模块接收来自按键的信号,产生1-6的随机数,其中按键带有防抖功能;数码管显示产生的随机数和局数;判断控制模块用于判断胜负,并控制点阵显示;点阵显示模块用于显示胜利的一方。
2、系统框图3、分块设计○1时钟分频模块采用多级分频的方法分别产生点阵扫描需要的1MHz的clk_dian频率、数码管扫描的10KHz的clk_shu频率、产生第一位随机数的2KHz的clk_x频率、产生第二位随机数的3.3kHz的clk_y频率和用于防抖的20hz的clk_dou频率。
○2随机数产生模块随机数产生模块用于产生随机数和局数计数。
reset用于使局数归零,重新开始游戏。
btn0用于作为产生甲方随机数的信号,btn1用于作为产生乙方随机数的信号。
clk_x和clk_y是用来产生两位随机数的时钟信号。
clk_dou为防抖时钟。
qout1-2是甲随机数输出信号,qout3-4是乙随机数输出信号,qout5是局数信号。
○3数码管显示模块数码管显示模块用于显示产生的随机数和局数。
clk_shu接收10KHz的时钟频率。
qin1-5分别接收随机数产生模块的qout1-5信号。
cat[5..0]和g[6..0]控制数码管的位选和段选信号。
○4控制判断模块控制判断模块用于判断胜负并控制点阵显示。
clk_dou为防抖时钟频率,btn1为乙方按完按键的信号,jia1-2和yi1-2为甲乙方的随机数,ju为比赛局数。
V是胜负结果,用于控制点阵显示。
○5点阵显示模块点阵显示模块用于显示胜利的一方。
clkin接1MHz的时钟频率,v是胜负结果。
beep是蜂鸣器输出信号,当有一方胜利的时候就会输出高电平信号;row和col分别是点阵的行输入和列输入。
三、仿真波形及波形分析○1分频模块由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,可观察其中的clk_x和clk_y信号。
○2随机数模块如图所示,当btn0被按下,经过防抖测试之后,产生随机数1和4,btn1被按下,经过防抖测试之后,产生随机数3和6,reset拨上之后局数归零,重新开始(圆角方形所示)。
○3数码管显示模块如图所示,圆圈为位选输出信号,其中cat4数码管没有使用。
方框为段选输出信号,以输出1和5为例,显示正确,其中的毛刺可以忽略,不影响显示效果。
○4判断控制模块如图,仅以第一局为例,设置甲方为5+2=7,乙方为1+1=2,如方框所示;btn1下降沿触发比较,v的结果为01,即甲方获胜,如圆圈所示,仿真结果正确。
○5点阵显示模块如图,以显示甲为例,输入为v=01,行输出和列输出显示结果为汉字甲,蜂鸣器输出beep=1,符合预设结果。
四、源程序分频器模块fenpinqi.vhdlibrary ieee;use ieee.std_logic_1164.all;entity fenpinqi isport( clkin:in std_logic; --时钟信号输入clk_dian,clk_shu,clk_x,clk_y,clk_dou:out std_logic); --时钟信号输出end fenpinqi;architecture a of fenpinqi issignal tmp1:integer range 0 to 24;signal tmp2:integer range 0 to 49;signal tmp3:integer range 0 to 4;signal tmp4:integer range 0 to 149;signal tmp5:integer range 0 to 499;signal clktmp1:std_logic;signal clktmp2:std_logic;signal clktmp3:std_logic;signal clktmp4:std_logic;signal clktmp5:std_logic;beginp1:process(clkin)---分频到1MHzbeginif clkin'event and clkin='1' thenif tmp1=24 thentmp1<=0;clktmp1<=not clktmp1;elsetmp1<=tmp1+1;end if;end if;end process p1;p2:process(clktmp1)---二级分频,分频到10kHz beginif clktmp1'event and clktmp1='1' thenif tmp2=49 thentmp2<=0;clktmp2<=not clktmp2;elsetmp2<=tmp2+1;end if;end if;end process p2;p3:process(clktmp2)---分频到1kHzbeginif clktmp2'event and clktmp2='1' thenif tmp3=4 thentmp3<=0;clktmp3<=not clktmp3;elsetmp3<=tmp3+1;end if;end if;end process p3;p4:process(clktmp1)--分频到3.333kHz beginif clktmp1'event and clktmp1='1' then if tmp4=149 thentmp4<=0;clktmp4<=not clktmp4;elsetmp4<=tmp4+1;end if;end if;end process p4;p5:process(clktmp2)—分频到20hzbeginif clktmp2'event and clktmp2='1' then if tmp5=499 thentmp5<=0;clktmp5<=not clktmp5;elsetmp5<=tmp5+1;end if;end if;end process p5;clk_dian<=clktmp1;--点阵扫描频率clk_shu<=clktmp2;--数码管扫描频率clk_x<=clktmp3;--产生第一位随机数频率clk_y<=clktmp4;--第二伪随机数频率clk_dou<=clktmp5;--防抖扫描频率end a;2、随机数模块 suijishu3.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity suijishu3 isport(reset:in std_logic;--复位信号btn0:in std_logic;--甲按键信号btn1:in std_logic;--乙按键信号clk_x:in std_logic;--第一位随机数频率clk_y:in std_logic;--第二位随机数频率clk_dou:in std_logic;--防抖频率qout1: out std_logic_vector(3 downto 0);--甲第一位随机数输出qout2: out std_logic_vector(3 downto 0);--甲第二位随机数输出qout3: out std_logic_vector(3 downto 0);--乙第一位随机数输出qout4: out std_logic_vector(3 downto 0);--乙第二位随机数输出qout5: out std_logic_vector(3 downto 0));--局数输出end suijishu3;architecture a of suijishu3 issignal q5,q6,q7,q8:std_logic;signal q1,q2,q3,q4:std_logic;signal x:integer range 0 to 100;signal y:integer range 100 to 200;signal xx:integer range 0 to 6;signal yy:integer range 0 to 6;signal xx1:integer range 0 to 6;signal yy1:integer range 0 to 6;signal ju:integer range 0 to 6;beginp1:process(clk_x,clk_y)beginif clk_x'event and clk_x='1' then--利用clk_x从0到100计数if x=100 thenx<=0;elsex<=x+1;end if;end if;if clk_y'event and clk_y='1' then--利用clk_x从100到200计数if y=200 theny<=100;elsey<=y+1;end if;end if;end process p1;p2:process(btn0,clk_dou)--btn0键防抖beginif clk_dou'event and clk_dou='1' thenq3<=q2;q2<=q1;q1<=btn0;q4<=q1 and q2 and q3;--经过三个防抖信号周期(1.5ms),q4变为1,作为按键信号输出end if;end process p2;p3:process(btn1,clk_dou)--btn1键防抖beginif clk_dou'event and clk_dou='1' thenq7<=q6;q6<=q5;q5<=btn1;q8<=q5 and q6 and q7;end if;end process p3;p4:process(q4,reset)beginif reset='1' then--如果复位信号为1,局数归零ju<=0;elsif q4'event and q4='1' then--q4为甲按键防抖后输出信号xx<=(x rem 6)+1;-- 产生第一位随机数yy<=(y rem 6)+1;--产生第二位随机数if ju=6 then--局数统计ju<=1;elseju<=ju+1;end if;end if;case xx iswhen 6 =>qout1<="0110";--译码输出 when 5 =>qout1<="0101";when 4 =>qout1<="0100";when 3 =>qout1<="0011";when 2 =>qout1<="0010";when 1 =>qout1<="0001";when others=>qout1<="0001";end case;case yy iswhen 6 =>qout2<="0110";when 5 =>qout2<="0101";when 4 =>qout2<="0100";when 3 =>qout2<="0011";when 2 =>qout2<="0010";when 1 =>qout2<="0001";when others=>qout2<="0001";end case;case ju iswhen 6 =>qout5<="0110";when 5 =>qout5<="0101";when 4 =>qout5<="0100";when 3 =>qout5<="0011";when 2 =>qout5<="0010";when 1 =>qout5<="0001";when 0 =>qout5<="0000";when others=>qout5<="0000"; end case;end process p4;p5:process(q8)--产生乙方的随机数beginif q8'event and q8='1' thenxx1<=(x rem 6)+1; yy1<=(y rem 6)+1;end if;case xx1 iswhen 6 =>qout3<="0110";when 5 =>qout3<="0101";when 4 =>qout3<="0100";when 3 =>qout3<="0011";when 2 =>qout3<="0010";when 1 =>qout3<="0001";when others=>qout3<="0001";end case;case yy1 iswhen 6 =>qout4<="0110";when 5 =>qout4<="0101";when 4 =>qout4<="0100";when 3 =>qout4<="0011";when 2 =>qout4<="0010";when 1 =>qout4<="0001";when others=>qout4<="0001";end case;end process p5;end a;3、数码管模块shumaguan.vhdlibrary ieee;use ieee.std_logic_1164.all;ENTITY shumaguan ISPORT(clk_shu:in std_logic; --数码管扫描频率qin1,qin2,qin3,qin4,qin5:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--随机数输入信号g:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--段选输出信号 cat:OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); --位选输出信号END shumaguan;ARCHITECTURE a OF shumaguan ISSIGNAL tmpg:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL tmpn:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL tmpc:INTEGER RANGE 0 TO 4;BEGINp1:PROCESS(clk_shu) --0到4计数器BEGINif(clk_shu'event and clk_shu='1')thenif tmpc = 4 then tmpc<=0;elsetmpc<=tmpc+1;END IF;END IF;END PROCESS p1;p2:PROCESS(tmpc) --数码管选通轮流显示BEGINcase tmpc isWHEN 0 => tmpn<=qin1;cat<=""; WHEN 1 => tmpn<=qin2;cat<="";WHEN 2 => tmpn<=qin3;cat<="";WHEN 3 => tmpn<=qin4;cat<="";WHEN 4 => tmpn<=qin5;cat<="";END CASE;END PROCESS p2;p3:PROCESS(tmpn) --译码电路BEGINCASE tmpn ISWHEN"0000"=> tmpg<="";--0WHEN"0001"=> tmpg<="";--1WHEN"0010"=> tmpg<="";--2WHEN"0011"=> tmpg<="";--3WHEN"0100"=> tmpg<="";--4WHEN"0101"=> tmpg<="";--5WHEN"0110"=> tmpg<="";--6WHEN OTHERS=> tmpg<="";END CASE;END PROCESS p3;g<=tmpg;END a;4、控制判断模块control3.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity control3 isport(clk_dou:in std_logic;--防抖频率btn1:in std_logic;--乙按键信号jia1:in std_logic_vector(3 downto 0);jia2:in std_logic_vector(3 downto 0);yi1:in std_logic_vector(3 downto 0);yi2:in std_logic_vector(3 downto 0);--甲乙随机数 ju:in std_logic_vector(3 downto 0);--局数v:out std_logic_vector(1 downto 0));--输出end control3;architecture a of control3 issignal q11,q12,q13,q14:std_logic;signal jia:std_logic_vector(3 downto 0);signal yi: std_logic_vector(3 downto 0);signal jia_temp:std_logic_vector(3 downto 0); signal yi_temp:std_logic_vector(3 downto 0); signal v_temp:std_logic_vector(1 downto 0); beginp1:process(clk_dou,btn1)--乙按键防抖beginif clk_dou'event and clk_dou='1' thenq13<=q12;q12<=q11;q11<=btn1;q14<=q11 and q12 and q13;end if;end process p1;jia<=jia1 + jia2;--甲两位随机数相加yi<= yi1+ yi2; --乙两位随机数相加process(q14,jia,yi,ju)beginif q14'event and q14='0'then --乙按键的下降沿触发if ju="0001" then--判断局数jia_temp<=jia;yi_temp<=yi;--如果是第一局,将甲乙结果寄存if ( jia = "0111"or jia="1011" ) and (yi/="0111" and yi/="1011")then--甲胜利v_temp<="01";elsif(jia/="0111" and jia/="1011") and (yi="0111" or yi="1011")then--乙胜利v_temp<="10";elsev_temp<="11";--无人获胜end if;elsif ju="0110"then--第六局if(jia>yi)thenv_temp<="01";elsif(jia<yi)thenv_temp<="10";elsev_temp<="11";end if;else--第二到第五局if(jia=jia_temp)and(yi/=yi_temp)thenv_temp<="01";elsif(jia/=jia_temp)and(yi=yi_temp)then v_temp<="10";elsev_temp<="11";end if;end if;end if;end process;v<=v_temp;end a;5、点阵模块dianzhen.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;ENTITY dianzhen isPORT(clkin: IN STD_LOGIC;--扫描时钟beep:out std_logic; --蜂鸣器输出v: IN STD_LOGIC_vector(1 downto 0);--控制输入 row: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --行 col: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --列END dianzhen;ARCHITECTURE a OF dianzhen ISsignal tmp:integer range 0 to 7;SIGNAL tmp_row:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL tmp_col:STD_LOGIC_VECTOR(7 DOWNTO 0); beginp1:process(clkin)--0-7计数器beginif clkin'event and clkin='1' thenif tmp=7 thentmp<=0;elsetmp<=tmp+1;end if;end if;end process p1;p2:process(v,tmp)beginif v = "01"then--显示甲case tmp isWHEN 0=>tmp_col<="";tmp_row<="";WHEN 1=>tmp_col<="";tmp_row<="";WHEN 2=>tmp_col<="";tmp_row<="";WHEN 3=>tmp_col<="";tmp_row<="";WHEN 4=>tmp_col<="";tmp_row<="";WHEN 5=>tmp_col<="";tmp_row<="";WHEN 6=>tmp_col<="";tmp_row<="";WHEN 7=>tmp_col<="";tmp_row<=""; end case;elsif v="10"then --显示乙方case tmp isWHEN 0=>tmp_col<="";tmp_row<="";WHEN 1=>tmp_col<="";tmp_row<="";WHEN 2=>tmp_col<="";tmp_row<="";WHEN 3=>tmp_col<="";tmp_row<="";WHEN 4=>tmp_col<="";tmp_row<="";WHEN 5=>tmp_col<="";tmp_row<="";WHEN 6=>tmp_col<="";tmp_row<="";WHEN 7=>tmp_col<="";tmp_row<="";end case;else tmp_col<=""; --不显示end if;end process p2;p3:process(v)beginif v="10" or v="01"thenbeep<='1';--有人获胜,输出高电平,蜂鸣器发声 elsebeep<='0';end if;end process p3;row<=tmp_col;col<=tmp_row;end a;五、功能说明及资源利用情况实际电路框图:功能说明:事先约定,甲方先按按键,乙方后按。