首页 微机原理课程设计-老虎机

微机原理课程设计-老虎机

举报
开通vip

微机原理课程设计-老虎机微机原理课程设计-老虎机老虎机模拟程序摘要本次课程设计要求设计一个能够模拟实现老虎机游戏的程序,程序不断产生3个1到7的随机数,使用三个键分别控制老虎机的启动、暂停和结束,根据暂停后得到数字确定获奖信息。本程序采用汇编语言,基于8086平台实现。老虎机的启动、暂停和结束分别可以使用键盘上三个不同键R,S,ESC来控制,通过读写端口实现键值的输入和显示数字的输出;老虎机滚筒上的随机数,通过读取端口和获得BIOS系统累加时数来实现;老虎机的图形界面,兼有欢迎信息和提示信息,通过输出字符串来显示。最终实现了能够产生随机数...

微机原理课程设计-老虎机
微机原理课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 -老虎机老虎机模拟程序摘要本次课程设计 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 设计一个能够模拟实现老虎机游戏的程序,程序不断产生3个1到7的随机数,使用三个键分别控制老虎机的启动、暂停和结束,根据暂停后得到数字确定获奖信息。本程序采用汇编语言,基于8086平台实现。老虎机的启动、暂停和结束分别可以使用键盘上三个不同键R,S,ESC来控制,通过读写端口实现键值的输入和显示数字的输出;老虎机滚筒上的随机数,通过读取端口和获得BIOS系统累加时数来实现;老虎机的图形界面,兼有欢迎信息和提示信息,通过输出字符串来显示。最终实现了能够产生随机数,并且通过键盘控制启动、暂停和退出,有友善图形界面的老虎机模拟程序。关键字:老虎机;8086;汇编语言;随机数;图形界面设计任务 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 选择1.1任务分析本次课程设计需要模拟老虎机进行摇奖,有以下几个需求:(1)随机数。老虎机三个滚筒上出现范围为1到7的随机数。随机数可以通过读取端口或者获取BIOS系统累加时数获取[1]。(2)使用三个不同的键来控制老虎机的启动、暂停和结束。由R键控制老虎机启动,S键控制老虎机暂停,ESC控制老虎机退出。并且在按到其他无关键时,不影响程序运行。(3)与获奖数字比较。老虎机一共三位数,直接依次判断比较。(4)较为完整的运行界面。通过输出,在屏幕上显示欢迎信息、使用老虎机的方法、中奖号码、老虎机现在的状态、随机数出现的方框。1.2方案选择1.2.1系统硬件设计选择老虎机的三位随机数要求数据各位同时传送,符合8255可编程并行接口的特点,因此选用8255芯片。8255A工作于方式0,并且使用74LS138译码器实现8255A的片选电路,通过键盘输入控制信号,显示器显示老虎机的界面。1.2.2软件设计选择老虎机需要获取三位随机数,本次使用了两种方法获得随机数,一个是通过读取端口获得随机数,另一个是利用INT1AH,AH=0获取BIOS系统累加时数。要通过键盘上三个不同按键控制老虎机的启动、暂停和结束,调用21号中断的08h功能可以实现无回显的键盘输入。确定号码是否中奖直接通过逐位比较进行判断。图形界面调用10h中断进行设置[2]。软件设计的编写和调试在emu8086上完成,最终的运行与改进在MasmforWindows集成实验环境共享版2015上完成。详细设计2.1理论分析与计算本次设计最核心的内容就是产生随机数,利用读取端口或者获取BIOS系统累加时数都可以得到随机数,但是得到的随机数范围并不是在1到7之间的,因此需要将得到的随机数模7后加上1,即可得到1到7之间的随机数。得到随机数之后,还需要判断它是否为一个中奖号码。通过观察可以得知,中奖号码有两种类型,一种是三个数字完全相同,另一种是三个数字呈依次加一递增,可以使用LOOP来判断,但是由于数字很少,只有三位,因此可以直接将该随机数的每一位与获奖数字的每一位进行比较。2.2算法设计图1主要流程本次设计的主要部分流程图1所示。用户在点击R或者r键之后,老虎机的滚筒就开始转动,状态显示为RUNNING,并且产生3个范围在1到7之间的随机数,分别依次存放在num的第零、第一、第二个位置。按下S或者s键,随机数停止改变,暂停,进入判断是否中奖的环节。随机数的获取,可以利用INT1AH,AH=0获取BIOS系统累加时数来实现,然而如果只使用这一种方法,得到的三位随机数将是完全相同的,因此通过查阅相关资料,最终本程序采用了两种不同的方式获取随机数,一个就是利用INT1AH,AH=0获取BIOS系统累加时数,另一个则是通过读取端口获得随机数。本程序中,rand1和rand2是读取端口获得随机数,由于读取的端口不同,获得的随机数也不同;rand3是获取BIOS系统累加时数获取随机数。;读取端口获得随机数rand1procnearpushcxpushdxpushaxmovax,0h;间隔定时器out43h,al;通过端口43hinal,40h;读取端口获得随机数inal,40h;随机数在al中movbl,7divblmovbl,ahaddbl,1addbl,30hpopaxpopdxpopcxretrand1endp;获取bios系统累加时数rand3procnearpushcxpushdxpushaxmovah,0;读计数器值int1ahmovax,dxandah,3;更随机movdl,7divdlmovbl,ahaddbl,1addbl,30hpopaxpopdxpopcxretrand3endp两种获取随机数的代码图2a与图2b所示:图2a通过读取端口获取随机数图2b获取bios系统累加时数图3判断是否中奖获取随机数程序暂停之后,需要判断得到的随机数是否为中奖号码。中奖号码分为两种,一种是三个数字完全相同,另一种是三个数字依次递增1。由于中奖号码只有三位数字,因此直接使用CMP判断,不用LOOP循环。判断中奖的过程如图3所示,首先判断第一个数是否和第二个数相等,如果相等继续判断第二个数和第三个是否相等,如果不等,那么没有中奖,否则中奖。如果第一个数和第二个数不等,判断第一个数是否比第二个数小1,如果不是,则没有中奖,否则继续判断第二个数是否比第三个数小1,如果是,则中奖,若不是,则没有中奖。在判断完成后,如果没有中奖,程序将会在屏幕上显示信息,告诉玩家没有中奖;如果中奖,根据界面上已有的中奖号码展示,屏幕上将会提示玩家获得几等奖,在玩家选择重新开始后,屏幕上的中奖信息将被会清空。2.3软件设计整体流程图如图4所示:图4整体流程整个程序可以分为四个板块:(1)界面显示。通过改变背景和字体颜色,将整个界面分为了几个部分,分别有:欢迎界面、状态显示界面、中奖号码显示、中奖情况、随机号码显示。在欢迎界面中,打印了欢迎信息和提示信息;状态显示界面显示程序目前的状态是运行中还是暂停;中奖号码显示界面告诉玩家,哪些号码是有奖号码,分别对应几等奖;中奖情况在一次摇奖结束程序暂停时出现,用来显示玩家是否中奖;随机号码界面就是老虎机的滚筒,上面显示三位1到7的随机数。(2)获取随机数。由于有老虎机有三位数,范围为1到7,如果只用一个rand函数,出现的随机数是完全相同的,因此本次设计里三个随机数函数rand1、rand2和rand3。分别用读取端口获得随机数和获取BIOS系统累加时数获得随机数,再通过除以7得到0到6之间的余数加一,获得1到7之间的随机数。(3)判断是否中奖。随机得到的数字保存在num中,只有三个数字,可以不用LOOP而直接依次判断是否满足三位数相同或者三位数依次加一的条件,如果满足,就按照游戏设定输出中奖信息,没有中奖就输出未中奖的信息。(4)延时板块[3]。可以在程序中加入delay函数来改变滚筒中随机数出现的速度,该函数是通过循环来程序运行速度减慢,调整delay的ax和cx的大小即可调节老虎机旋转速度的快慢,也可以不使用该板块。setposmacrorow,colpushaxpushbxpushdxmovah,02h;调用10中断2号子程序movbh,0movdh,row;设置光标所在行movdl,col;设置光标所在列int10hpopdxpopbxpopaxendm在程序中,多次出现需要在某个特定位置输出字符,因此需要设置光标位置,为了可以方便地设置光标位置,查阅资料后,在程序中使用了一个宏,调用第10h号中断的2号子程序用来置光标位置,如图5所示。图5设置光标位置这段代码中,将AX、BX、DX压入栈,在程序的结尾弹出栈,是因为在宏中这三个寄存器的值会发生改变,因此将它们压入栈后保证了在这段代码运行结束后,AX、BX、DX的值不会被改变,不影响主程序的运行。8086CPU74LS138译码器8255A芯片显示器键盘2.4硬件电路设计图6硬件电路框图硬件电路框图如图6所示,主要使用了五种元器件,分别是:(1)8086处理器,工作在最小模式,控制执行每条指令。(2)74LS138译码器,片选电路,用于获得片选信号。(3)8255A芯片,工作在方式0,也就是基本输入输出方式,PC口连接到键盘接口,通过键盘读入控制信号;PA口和PB口连接到显示器,在显示器上进行输出显示。(4)显示器,显示当前老虎机的界面状态。(5)键盘,键入控制信号,控制老虎机的状态。系统调试与效果分析图7开始界面(1)玩家刚进入程序时界面如图7所示,屏幕上显示欢迎信息,欢迎玩家并介绍该游戏的名称;操作说明,帮助玩家更快地了解如何操作,方便玩家使用;状态栏,显示游戏当前状态;中奖号码板块,公布有奖号码;摇号区,显示玩家当前数字,最初进入游戏时为空。图8运行中(2)按下R或者r键之后,老虎机开始运行,界面如图8所示,状态栏显示当前状态RUNNING,同时玩家摇奖区中的三位范围为1到7的随机数不断变化。图9未能获奖(3)RUNNING状态下按下S或者s键暂停后,老虎机进入暂停状态,状态栏显示当前状态为STOP,摇奖区的三个数字暂停滚动,根据摇奖区当前静止时得到的数字与上方获奖数字比较后,判断出当前数字并未获奖,屏幕上显示信息告诉玩家未获奖,如图9所示。图10三个数相同获奖(4)RUNNING状态下按下S或者s键暂停后,老虎机进入暂停状态,状态栏显示当前状态为STOP,摇奖区三个数字暂停滚动,根据当前静止时得到的数字判断是否中奖,若三个数字相同,则按照中奖号码栏目显示的顺序,确定获得几等奖,并显示获奖情况,如图10所示。图11三个数依次加一递增获奖(5)RUNNING状态下按下S或者s键暂停后,老虎机进入暂停状态,状态栏显示当前状态为STOP,摇奖区三个数字暂停滚动,根据当前静止时得到的数字判断是否中奖,若三个依次递增1,则按照中奖号码栏目显示的顺序,确定获得几等奖,并显示获奖情况,如图11所示。图12结束退出界面(6)按下ESC后,程序如图12所示,界面上显示退出提示语句语句,提示玩家再按下任意键之后即可退出程序。问题解决(1)界面的设置:最开始只能使用在字符串前面补充空格的方法来使字符出现在指定位置,很不便于操作,后来通过查阅资料,使用了一个宏定义,来设置光标的位置,相当于C语言中可以传递参数的函数,每次传递行和列两个参数,即可将字符串输出在指定位置。并且为了使界面更加美观,需要将某些地方设置成有颜色的矩形框;在输出界面的时候,最开始只能一行一行输出,代码十分冗长,在查资料后了解到在一段字符串后加上0dh,0ah,就可以将字符串换行。(2)读入字符:21号中断的01H功能,是带回显的键盘输入,然而在本次设计当中,输入了字符之后不需要显示出来,这样显得更加美观,因此使用了21号中断的08H功能,这是无回显的键盘输入。在程序运行中,如果按下了并非’S’键的其他键,程序就会一直运行,再按下’S’键也不能暂停,为了解决这个问题,调用了INT21H的0CH功能,清除输入缓冲区。(3)在使用jz跳转的时候,出现错误:jz是短跳转指令,jmp为长跳转指令,因此先jz跳转到一个较近的标签处,再从这个标签jmp到需要的地方。(4)随机数:如果只通过获取BIOS相同累加时数来获取随机数,得到的三位数相同,因此查阅资料了解到了另一种获取随机数的方式,通过读取端口获得随机数,读取两个不同的端口获得的随机数也不同,因此三位随机数就能成功得到。参考文献[1]杨永生,王立红.汇编语言程序设计[M].北京:清华大学出版社,2004[2]鲍远慧.8088/8086汇编语言中宏的编制和使用[J].智能计算机与应用,2001(3):20-21[3]王义.汇编语言程序设计的要点和技巧[J].中国西部科技,2006(29):32-33stacksegmentdw64dup(0)stackendsdatasegmenttitle1db'************************************************************',0dh,0ahdb'**',0dh,0ahdb'*SimulationOfSlotMachine*',0dh,0ahdb'**',0dh,0ahdb'*WELCOMETOTHEGAME,ANDGOODLUCK*',0dh,0ahdb'**',0dh,0ahdb'*Press"R"tostart,"S"tostop,"ESC"toexit*',0dh,0ahdb'**',0dh,0ahdb'************************************************************','$'title2db'YOURNUMBERS','$'win1db'777>666>555>444>333>222>111>','$'win2db'567>456>345>234>123','$'endstr1db'Thankyou!Welcometothenexttime!','$'endstr2db'Pressanykeytoexit.','$'stadb'PressRtostart','$'runningdb'RUNNING','$'stoppingdb'STOP','$'numdb'','$'blankdb'','$'losedb'Whatapity!Youdidnotgetanything!','$'p777db'Congratulations!Youwonthe1stprize!','$'p666db'Congratulations!Youwonthe2ndprize!','$'p555db'Congratulations!Youwonthe3rdprize!','$'p444db'Congratulations!Youwonthe4thprize!','$'p333db'Congratulations!Youwonthe5thprize!','$'p222db'Congratulations!Youwonthe6thprize!','$'p111db'Congratulations!Youwonthe7thprize!','$'p567db'Congratulations!Youwonthe8thprize!','$'p456db'Congratulations!Youwonthe9thprize!','$'p345db'Congratulations!Youwonthe10thprize!','$'p234db'Congratulations!Youwonthe11thprize!','$'p123db'Congratulations!Youwonthe12thprize!','$'dataendscodesegmentassumeds:data,cs:code,ss:stacksetposmacrorow,colpushaxpushbxpushdxmovah,02hmovbh,0movdh,rowmovdl,colint10hpopdxpopbxpopaxendmstart:movax,datamovds,axmovah,01hmovcx,3000hint10h;***********设置背景****************movax,0700hmovbh,070hxorcx,cxmovdx,2090hint10hmovax,0700hmovbh,000hmovcx,0900hmovdx,1890hint10h;*******欢迎界面*******leadx,title1movah,09hint21h;*********状态框************;状态框(running/stop)movax,0600h;06h功能movbh,004eh;设置颜色movcx,0a1eh;设置上边界和左边界movdx,0c30h;设置下边界和右边界int10hsetpos11,30leadx,stamovah,09hint21h;***************************;中奖号码显示movax,0600hmovbh,0006hmovcx,0d10hmovdx,113chint10hmovax,0600hmovbh,000ehmovcx,1210hmovdx,133chint10hsetpos14,8leadx,win1movah,09hint21hsetpos16,8leadx,win2movah,09hint21h;********滚筒框***********movax,0600hmovbh,0070hmovcx,1512hmovdx,1721hint10hmovax,0600hmovbh,0070hmovcx,1526hmovdx,172ahint10hmovax,0600hmovbh,0070hmovcx,152ehmovdx,1732hint10hmovax,0600hmovbh,0070hmovcx,1536hmovdx,173ahint10hsetpos22,19leadx,title2movah,09hint21h;**********开始游戏*****************begin:movah,0ch;清空键盘缓冲区int21hmovah,08hint21hcmpal,'R'jzruncmpal,'r'jzruncmpal,1bhjzexit1jmpbegin;********************************************exit1:jmpexitrun:setpos18,8leadx,blankmovah,09hint21hsetpos11,30leadx,runningmovah,09hint21hcallrand1;callRAND;movsi,offsetnummov[si],blsetpos22,40movdl,blmovah,2int21hcallrand2;CALLRAND;addbl,1movsi,offsetnummov[si+1],blsetpos22,48movdl,blmovah,2int21hcallrand3;CALLRAND;addbl,2movsi,offsetnummov[si+2],blsetpos22,56movdl,blmovah,2int21h;calldelay;控制转动速度movah,01hint16hcmpal,'S'jzstpcmpal,'s'jzstpcmpal,1bhjzexit1movah,0chint21handal,00hjztmp;************************stp:setpos11,30leadx,stoppingmovah,09hint21hmovsi,offsetnumjmpcmp1stp2:movah,08hint21h;movah,01h;int16hcmpal,'R'jztmpcmpal,1bhjzexitjmpbegin;******tmp:jmprun;************cmp*************cmp1:;判断第一个数和第二个是否相等,不等转到判断是否递增;若相等继续判断movah,[si]moval,[si+1]cmpah,aljnzcmp2movah,[si+2]cmpah,aljzdeal1jnzdeal3cmp2:addah,1;第一个数+1和第二个数比较不等则不中奖cmpah,aljnzdeal3;如果相等继续判断moval,[si+2]addah,1cmpah,aljzdeal2jnzdeal3deal1:;三个数相等movsi,offsetnummoval,[si]cmpal,'7'jzp7cmpal,'6'jzp6cmpal,'5'jzp5cmpal,'4'jzp4cmpal,'3'jzp3cmpal,'2'jzp2cmpal,'1'jzp1p7:setpos18,8leadx,p777movah,09hint21hjmpstp2p6:setpos18,8leadx,p666movah,09hint21hjmpstp2p5:setpos18,8leadx,p555movah,09hint21hjmpstp2p4:setpos18,8leadx,p444movah,09hint21hjmpstp2p3:setpos18,8leadx,p333movah,09hint21hjmpstp2p2:setpos18,8leadx,p222movah,09hint21hjmpstp2p1:setpos18,8leadx,p111movah,09hint21hjmpstp2deal2:;递增movsi,offsetnummoval,[si]cmpal,'5'jzp25cmpal,'4'jzp24cmpal,'3'jzp23cmpal,'2'jzp22cmpal,'1'jzp21p25:setpos18,8leadx,p567movah,09hint21hjmpstp2p24:setpos18,8leadx,p456movah,09hint21hjmpstp2p23:setpos18,8leadx,p345movah,09hint21hjmpstp2p22:setpos18,8leadx,p234movah,09hint21hjmpstp2p21:setpos18,8leadx,p123movah,09hint21hjmpstp2deal3:;没中奖setpos18,8leadx,losemovah,09hint21hjmpstp2;***********获取随机数*****************RANDprocnearpushcxpushdxpushaxstimovah,0int1ahmovax,dxandah,3movdl,7divdlmovbl,ahADDBL,1ADDBL,30HpopaxpopdxpopcxretRANDENDP;----------------rand1procnearpushcxpushdxpushaxmovax,0h;间隔定时器out43h,al;通过端口43hinal,40h;读取端口获得随机数inal,40h;随机数在al中movbl,7divblmovbl,ahaddbl,1addbl,30hpopaxpopdxpopcxretrand1endprand2procnearpushcxpushdxpushaxmovax,0hout43h,alinal,41hinal,41hmovbl,7divblmovbl,ahaddbl,1addbl,30hpopaxpopdxpopcxretrand2endp;利用int1ah,ah=0获取bios系统累加时数rand3procnearpushcxpushdxpushaxmovah,0int1ahmovax,dxandah,3;更随机movdl,7divdlmovbl,ahaddbl,1addbl,30hpopaxpopdxpopcxretrand3endp;**********************************delayprocpushaxpushcxmovax,2;调节这两个参数可以改变延时的时间delay1:movcx,65535delay2:nop;空指令,但占用一个指令的时间loopdelay2decaxjnzdelay1popcxpopaxretdelayendpexit:movax,0600hmovbh,006ehmovcx,0e10hmovdx,123chint10hsetpos15,8leadx,endstr1movah,09hint21hsetpos17,8leadx,endstr2movah,09hint21hmovah,4chint21hcodeendsendstart
本文档为【微机原理课程设计-老虎机】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
平平
暂无简介~
格式:doc
大小:332KB
软件:Word
页数:36
分类:修理服务/居民服务
上传时间:2022-02-16
浏览量:19