版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计开题报告基于单片机实现的俄罗斯方块游戏系别:班级:学生姓名:指导教师:20141218开题报告填写要求1.开题报告作为毕业设计答辩委员会对学生答辩资格审查的依据材料之一,应在指导教师指导下,由学生在毕业设计工作前期完成,经指导教师签署意见、专家组及系主任审查后生效;(可从教务处网页上下载)打印,禁止打印在其它纸上后剪贴;3.毕业设计的开题报告应包括以下内容:(1)主要技术指标;(2)工作思路;(3)课题的准备情况及进度计划;(4)参考文献。4.开题报告的撰写应符合科技文献规范,且不少于2000字;参考文献应不少于15篇,包括中外文科技期刊、教科书、专著等。5A42cm2.5cm倍行距。6一栏:理工类:A.理论研究B.应用研究C工程设计D.软件开发E.其它经管文教类:A.理论研究B.应用研究C.实证研究D.艺术创作E.其它“课题来源”一栏:A.科研立项B.社会生产实践C.教师自拟D.学生自选“成果形式”一栏:A.论文B.设计说明书C.实物D.软件E.作品毕业设计开题报告课题题目
基于单片机实现的俄罗斯方块游戏□A□A■B□C□D□E■□■□□
A B C D E
课题来源同组同学
A B C D□□□■开题报告内容(可另附页)见附页指导教师意见(指导教师签名:月 日专家组及系里意见(选题是否适宜、各项内容是否达到毕业设计(论文)大纲要求、整改专家组及系里意见(选题是否适宜、各项内容是否达到毕业设计(论文)大纲要求、整改意见等)专家组成员签字:教学主任(月日附页:一、设计的目的与意义
开题报告AlexPajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。二、工作思路1.实现的功能:俄罗斯方块游戏规则的实现2.特点:采用单片机实现具有便携性与易用性三、计划进度序号序号毕业设计阶段性工作及成果时间安排1收集资料确定设计方案1~3周2程序设计设计4~6周3电路系统设计7~9周4焊接与调试10周5总体校核完成毕业设计11~13周四、参考文献C[M]2004.Apress. Introduction to Visual Basic Programming [M].ProfessionalComputingandWebDesign,2006.杨元强。酷比杯获奖作品选登《LEGO俄罗斯》[J]。“酷比杯”游戏策划大赛,2007.周润景著.ProteusMCS-51&ARM7[M].北京:电子工业出版2006.JavaBean[R].技术及应用学术会议,2001.JasonLam.J2ME&Gaming[M].AddisonWesley,2004.高凌琴,陈青华.俄罗斯方块游戏关键技术探讨[J].信息技术与信息化.2008.Java2游戏设计》[M].北京:清华大学出版社,2004.JAVA[M].北京:中国2005-5.[10]谭浩强.C程序设计.[M]北京:清华大学出版社,2003.基于单片机实现的俄罗斯方块游戏MCUbasedRussiablockgame摘 要AT89S52CProteusLCDProtuesAT89S52关键词:AT89S52;C语言;Proteus仿真;LCD液晶ABSTRACTThisdesignisachievedthroughtheAT89S52microcontrollerTetrisgamedesign,programmingusingClanguage,andcarriedoutbyproteussimulation.ThisdesignisachievedthroughtheAT89S52microcontrollerTetrisgamedesign,programmingusingClanguage,andcarriedoutbyproteussimulation.Thedesigntoachievethebasicfunctionsare:applicationbuttonstocontrolthebox,changeandmovement;eliminatelineandscoring;eliminatemulti-lineincentivepoints,thegameendswhentheboxfilledwithbasicfunctionssuchasTetris.MCUintheapplicationofhandheldentertainmentdeviceshavegreatpotential,itcanbebroughttoanewstage.Inordertosolvetheexternalcircuit,wemustfullyunderstandtheliquidcrystaldisplaymethodandexternalinterfaceMCUfeatures,andtheneedtoaddressthelogicalrelationship;alsounderstandthattheprincipleofLCDliquidcrystalcontroltoadataportandcontrolporttoachievetheabovetheLCDscreendisplay.Programrequiresknowledgeoftheexternalcircuitwheretheyneedtocompletethefunctionandthefunctiontobecompletedintheformofprogramminglanguageusedtoachieve.Simulationthenprotuesbuttonstocontrolanexternalboxtoplayavarietyofgraphicalgames,andachieverecordnumberofscoresandtherelationshiphadtochangethespeedofthemoduledown.Finally,theprogramdownloadedtoAT89S52MCUandtheactualoperation,theactualoperationindicatethatthisdesigncanachievebasicgamenewstage.Inordertosolvetheexternalcircuit,wemustfullyunderstandtheliquidcrystaldisplaymethodandexternalinterfaceMCUfeatures,andtheneedtoaddressthelogicalrelationship;alsounderstandthattheprincipleofLCDliquidcrystalcontroltoadataportandcontrolporttoachievetheabovetheLCDscreendisplay.Programrequiresknowledgeoftheexternalcircuitwheretheyneedtocompletethefunctionandthefunctiontobecompletedintheformofprogramminglanguageusedtoachieve.Simulationthenprotuesbuttonstocontrolanexternalboxtoplayavarietyofgraphicalgames,andachieverecordnumberofscoresandtherelationshiphadtochangethespeedofthemoduledown.Finally,theprogramdownloadedtoAT89S52MCUandtheactualoperation,theactualoperationindicatethatthisdesigncanachievebasicgamefunctions,toachievethedesiredpurpose.PAGE\*ROMANPAGE\*ROMANII目 录绪 论 1课题背景 1电子游戏及其分类 1电子游戏发展现状 2电子游戏国外发展现状 2电子游戏国内发展现状 3整体设计方案 5系统的核心部分单片机 5单片机的选择 5AT89S52引脚功能描述 7晶振特性 9液晶显示模块 10液晶显示控制驱动器HD61202的特点 10液晶显示控制驱动器HD61202的引脚功能 10液晶显示控制驱动器HD61202的指令系统 112.2.4 HD61202的软件设计 122.2.5 JM12864J的电路结构特点 152.2.6 JM12864J的应用 162.2.7 键盘电路 17系统程序的设计 18俄罗斯方块驱动流程图 18俄罗斯方块所有绘图工作流程图 19俄罗斯方块中按下键的流程图 20俄罗斯方块所有绘图工作流程图 21系统仿真 22PROTUES软件介绍 22Keil软件介绍 22俄罗斯方块系统PROTUES仿真 24实物的制作与调试 26电路的焊接 26系统性能测试与功能说明 27结 论 28参考文献 29附录1:C语言程序 30附录2:电路原理图 59附录3:英文资料及中文翻译 60致 谢 76PAGEPAGE51 绪 论,D/A,Watchdog,LCD课题背景AlexPajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。2005年,以计算机技术、通信技术和软件技术为核心的信息技术取得了更加迅计算机、通讯、消费电子)3G电子游戏及其分类电子游戏,也就是运行在家用电脑、家用电子游戏机或是掌中宝游戏机及街机上的电子游戏程序。电子游戏是一种结合剧情故事、美术、音乐、动画、程序等技术于一身的互动型娱乐软件,涉及到多个行业。从电子游戏的分类来看,有着多种分类方式。传统的游戏分类是按照游戏类型,将其分为即时战略游戏、第一人称射击游戏、角色扮演游戏、策略型游戏等类别。根据游戏运行平台的不同,可将电子游戏分为游戏机游戏、单机版PC游戏、互动电视游戏、在线游戏和手机游戏。此外,韩国政府将电子游戏业分为家用游戏机游戏、单PC游戏、网络游戏和街机游戏四大类。考虑到中韩游戏业比较接近,论文采用(局域网)技术出现之前,电子游戏都可以归于单机版游戏,即“人机对战”游戏,或最多是双人对战游戏。而随着互联网技术的出现,通过连接游戏服务器,上百、上千、乃至上万的游戏玩家同时连线娱乐成为了现实,这就大大增加了游戏的互动性、电子游戏发展现状电子游戏国外发展现状电子游戏是最初产生于美国,1971年,一个还在MIT就读的学生设计了世界上第一个业务用游戏机,这个街机游戏的名字叫《电脑空间》。可以说时至今日,电子游戏仍然是外国的天下。美国至今仍是世界第一大游戏市场,它遵循的是以发行商为主的产业开发链模NPDGroup2004(包括家用、掌上型主机及软件)9945%。其中游戏软52(1.6),PC11(450010(423020042.48220603010GDP1/5199890%以上,50%以上。韩国号称世界上网络游戏产业最发达国家之一。迄今为止,国内网络游戏市场有超过60%的产品来自韩国游戏软件开发商,韩国网络游戏使国内很多游戏运营公司在游戏营销市场或股票资本市场上获得了巨大的成功。 韩国游戏市场的发展不是偶然,韩国政府不仅给游戏产业以正确的定位和引导,更是将其和本国经济发展紧密地联系到一起,做了很多市场培育方面的工作。韩国政府认识到,靠重型工业来支撑全国经济的做法是片面的,于是将、娱乐产业视为新的经济增长点,开始大力扶持。从那时起,科技含量极高而能源消耗极低的游戏制作及相关产业担负起了“富国兴邦”的重担。由文化观光部出面组建韩国游戏支援中心,向韩国游戏产业提供从资金到技术上的多方面支援;成立游戏投资联盟,政府每年向游戏产业投入的资金多达500电子游戏国内发展现状与电子游戏发达的国家相比,我国在电子游戏方面还存在比较大的差距。目前,中国的游戏产业经过80年代初期台湾厂商的探索至90年代,开始了自己的研1983年,智冠科技有限公司在中国台湾成立,为全球第一家签订授权重制中文版产品代理20021996,UBISOFTEA19971997III》(TombRaiderIII)1999501999(正版)约1.52000《万王之王》正式推1999(Lager)2000《万王之王》、《石器时代》、《网络三国》在台湾上市之后,游戏桔子推出了《天1995,1999Ncsoft200119932001年,天人互动软件技术有限公司在北京成立。当年SEGAPC200153171800200111200392520102010届本科生毕业设计2 整体设计方案系统的核心部分单片机单片机的选择I/O20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透CMOS3I/O1.多功能I/OA/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器看家狗)I/O/比较逻辑等。51USBSMARTCARDMP3CANI*I*CLCDVFD82.高效率和高性能RISCDSPROM(FLASH)RAM(C来开发单3.低电压和低功耗CMOS0.9V),功耗已经降低uA4.低价格AT89S52AT89S52CMOS88KFlashAtmel80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPUFlash,AT89S52与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周32个可编程I/O16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗16位定时器/6向量2级中断结构,全双工串可降至0Hz2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52单片机有PDIPPLCCTQFPDPIP也就是双列直插封装的单片机此种封装有如下特点:适合PCB的穿孔安装;易于对PCB布线;操作方便;AT89S52AT89S52单片机的管脚说明如图2-1所示:11234567891011121314151617181920P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0(RXD)P3.1(TXD)P3.2(INT0)P3.3(INT1)P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GNDVCC 40P0.0(AD0) 39P0.1(AD1) 38P0.2(AD2) 37P0.3(AD3) 36P0.4(AD4) 35P0.5(AD5) 34P0.6(AD6) 33P0.7(AD7) 32EA/VPP 31ALE/PROG 30PSEN 29P2.7(A15) 28P2.6(A14) 27P2.5(A13) 26P2.4(A12) 25P2.3(A11) 24P2.2(A10) 23P2.1(A9) 22P2.0(A8) 21图2-1DIP封装AT89S52单片机引脚结构图1.VCC:电源。2.GND:接地端。3.P0口(P0.0~P0.7):P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外口也被作为低8/具有内部上拉电阻。在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。4.P1口(P1.0~P1.7):P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)P1.0和P1.2/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表2-1所示:在Flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出引脚号第二功能P1.0T2(定时器/计数器T2的外部计数输入),时钟输出P1.1T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)5.P2口(P2.0~P2.7):P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,16位地址读取外部数据存储器(例如执行MOVX@DPTR)口使用很强的内部上拉发送18位地址(MOVX@RI)口输出P26.P3口(P3.0~P3.7):P38位双向I/O口,P2输出缓冲器能驱动4个TTLP3时,内部上拉电阻把端口拉高,引脚号第二功能P3.0RXD(串行输入)引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2P3.3INT0(外部中断0)INT0(外部中断0)P3.4T0(定时器0外部输入)P3.5P3.6T1(定时器1外部输入)WRP3.7RD(外部数据存储器写选通)在flashRST:RST脚输出96地址上的DISRTO位可以使此功能无DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号8位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0仅在执行MOVX或MOVCALE(地址为8EHSFR的第0位)的设置对微控制器处于外部执行模式下无效。PSEN :外部程序存储器选通信号( PSEN)是外部程序存储器选通信号。当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。晶振特性AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是XTAL2可以不接,而从XTAL1接入,如图2-2所示。由于外2-2所示:2010届本科生毕业设计图2-2内部振荡电路连接图液晶显示模块HD61202JM12864JHD61202HD612028HD61203HD61202HD612031.64×64=4096RAM,RAMLCDHD6120264HD6120268684.HD61202的占空比为1/32~1/64。HD61202CS1,CS2,CS3E为读写使能信号,它是在下降沿时HD61202E高电平期间,数据被读出;R/W为读写选择信号,1020102010届本科生毕业设计PAGEPAGE11RST为复位信号复位信0,RSTMCUMCUVDD,使之不起作用。HD612022-3引脚符号状态引脚符号状态引脚名称功能CS1,CS2,CS3 输入芯片片选端CS1CS2E(写HD61202;E 输入 读写使能信号在E高电平期间,数据被读出R/W输入读写选择信号R/W=1为读选通,R/W=0为写选通RS输入数据、指令选择信号RS=1为数据操作RS=0为写指令或读状态DB0-DB7三态数据总线复位信号有效时,关闭液晶显示,使显示RST输入复位信号MCUMCU制;也可直接接VDD,使之不起作用。HD61202HD61202的指令系统比较简单,总共只有七种。现分别介绍如下:显示开/关指令R/WRSDB7DB6DB5DB4DB3DB2DB1DB00000111111/0当DBO=1时,LCD显示RAM中的内容;DBO=0时,关闭显示。显示起始行(ROW)设置指令R/WRSR/WRSDB7DB6DB5 DB4 DB3 DB2 DB1 DB00011显示起始行(0-63)R/WRSR/WRSDB7DB6DB5DB4DB3DB2 DB1 DB00010111页号(0-7)RAM6488列地址(YAddress)设置指令R/WR/WRSDB7DB6DB5 DB4 DB3 DB2 DB1 DB00001显示列地址(0-63)RAMMCU读状态指令R/WRSDB7DB6DB5DB4DB3DB2DB1DB010BUSY0ON/OFFREST0000该指令用来查询HD61202的状态,各参量含义如下:BUSY: 1-内部在工作 0-正常状态ON/OFF:1-显示关闭 0-显示打开REST: 1-复位状态 0-正常状态BUSYRESTHD61202HD61202BUSYHD61202R/WRSR/WRSDB7DB6DB5DB4 DB3DB2DB1DB001写数据读、写数据指令每执行完一次读、写操作,列地址就自动增一,必须注意的是,R/WRSR/WRSDB7DB6DB5DB4 DB3 DB2DB1DB011读显示数据HD61202液晶控制器HD61202一共有七条指令,从作用上可分为两类,显示状态设置指令和数据读/写操作指令。详见指令系统可查看图形液晶显示器产品有关手册。显示L5~L00-3FH(1-64P2-P00-7H,1-8页。列地址设置中C5-C0Y0-3FH(1-64行)范围内。显示器上128点×64点,每8点为一字节数据,都对应着显示数据 RAM(在HD61202bit,计算机写入或读出显示存储器的数据代表显示8D0bit=1bit=0时该LCDdisplayON/OFFONRAM数据对应显示的画面;displayOFF则画面消失,RAM点阵字模文件的建立:由于MGLS12864液晶显示器没有内部字符发生器,所以在屏幕上显示的任何字符、汉字等须自己建立点阵字模库,然后均按图形方式进行显示。由于HD6120290度后再写入。点阵字模库建立包括以下几个方面:1.建立8×16点阵常用字符、数字、符号字模库。BIOSASCII8×16ASCII值从小到大升序排列。asm{MOVax,1130h/*AH=11h—功能调用。装入字库至软字库*/movbh,6/*AL=30h取点阵信息*/int10h/*BH=6ROM8X16点阵指针(VGA)*/movax,es/*出口:ES:BP指向字库指针*/movascii_es,axmovax,bpmovascii_bp,ax};ascii_offset=ascii_bp+16*asciicode;for(j=0;j<16;j++)buf[j]=peekb(ascii_es,ascii_offset+j);/*读16字节点阵数据*/for(m=0;m<16;m++)/*点阵数据转换成LCD格式数据*/{if(m<8){beginbyte=7;shiftn="7";}else{beginbyte="15";shiftn="15";}for(j=0;j<8;j++)ascii8x16[m]=(ascii8x16[m]+(buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;}UCDOSASC16ASC168×16点阵。所ASCIIASCII码值×162.16×16UCDOSHZK16文件做HZK1616×161)×94+位码-1)×32。作者CUCDOS点阵字库字模程序,完成字模读取。数据重新排列,并按MCS-51汇编程序的要求写成相应格式的文本文件。p=((quma-1)*94+weima-1)*32;cclibfile="fopen"("HZK16","rb");fseek(cclibfile,(long)p,SEEK_SET);fread(buf,sizeof(unsignedchar),32,cclibfile);/*32字节点阵数据*/for(m=0;m<32;m++){/*LCD*/if(m<8){beginbyte="14";shiftn="7";}elseif(m>=8&&m<16){beginbyte="15";shiftn="15";}elseif(m>=16&&m<24){beginbyte="30";shiftn="23";}else{beginbyte="31";shiftn="31";}for(j=0;j<8;j++)hzk16x16[m]=(hzk16x16[m]+(buf[beginbyte-2*j]>>(shiftn-m))&0x01)<<1;}3.(如产品商标等BMPMCS-51W78E58的程序存储器中,如用到的汉字、图形较多,可选用较大容量的程序存储器。HD16202BF=1COMM,数据寄DATA。(COMMEQU20H/*指令寄存器*/DATAEQU21H/*数据寄存器*/)1.左半屏写指令子程序WR_CMD1:MOVDPTR,#CRADR1;/*读状态字口地址*/WAIT1:MOVXA,@DPTR;/*读状态字*/JBACC.7,WAIT1;/*BF,BF=1*/MOVDPTR,#CWADR1;/*写指令字口地址*/MOVA,COMM;/*取指令代码*/MOVX@DPTR,A;/*写指令代码*/RET2.左半屏写数据子程序WR_DATA1:MOVDPTR,#CRADR1;/*读状态字口地址*/WAIT11:MOVXA,@DPTR;/*读状态字*/JBACC.7,WAIT11;/*判忙标志BF,如BF=1忙,等待*/2010届本科生毕业设计MOVDPTR,#DWADR1;/*写数据字口地址*/MOVA,DATA;/*取数据/MOVX@DPTR,A;/*写数据*/RET3.右半屏写指令子程序WR_CMD2和右半屏写数据子程序WR_DATA2的编制同左半屏子程序相同,只是对应口地址不同。JM12864JJM12864J是使用HD61202及其兼容控制驱动器作为列驱动器,同时使用HD61203作为行驱动器的液晶模块。由于HD6120不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,因此这里就不作介绍了。下面主要介绍一下JM12864J的逻辑电路图。JM12864J共有两片HD61202及其兼容控制驱动器和一片HD61203,如图2-3所示:图2-3 JM12864J的逻辑电路图JM12864JHD61202ADC,RSTJM12864JCSAHD61202(1)的CS1相连;CSBHD61202(2)CS1CSA、CSB选通组合信号为CSACSB=01选通1CSACSB=10(2JM12864J,VDD、VSSV0HD61203VDDV0VSS152010届本科生毕业设计JM12864J89S522-4图2-4 AT89S52与液晶的接口电路2-52-5VSSVDD+5V;RSP3.2R/WP3.1;DB0~DB7P2.0~P2.712P3.4P3.3RST、LEDA5V;VEELEDK162010届本科生毕业设计图2-5液晶模块电路键盘电路3P1.0P3.5P3.6P3.7172010届本科生毕业设计PAGEPAGE18系统程序的设计俄罗斯方块驱动流程图开始开始随机生成一个图形交给当前图形变量随机生成一个图形交给提示图形变量根据变化绘图(绘提示图和当前图形)N图形到底了吗图形下降一行Y行满绘图一次Y表格满NN清所有数据提示图形变量给当前图形Y消除行并Y上面的行数据下移true、当前图改变false绘图(清屏)随机生成一个图形交给提示图形变量游戏结束绘图结束20102010届本科生毕业设计俄罗斯方块所有绘图工作流程图开始开始输出分数清除刚才位置的图形N当前图形改Y绘当前图的现在位置N提示图形改变真?Y绘提示图消行动作为NY从消行的那一行的第一列开始N为空数据Y绘白色;相当于清除色彩表格中对应的色彩行+1NY结束俄罗斯方块中按下键的流程图按下键按下键记下下降图形时的位置()直接把图形下降到底行满行满YNN表格满提示图形变量给当前图形Y消除行并把上面的行数据下移清所有数据并置清随机生成一个图形交给提示图形变量绘图(清屏)绘图游戏结束结束结束俄罗斯方块所有绘图工作流程图开始开始输出分数清除刚才位置的图形,包括清除提示图和当前图N当前图形改变Y绘当前图的现在位置N提示图形改变真?Y绘提示图N消行动作为真?Y重绘表格游戏结束NY清除所有数据并清屏结束系统仿真ProteusProteusLabcenterelectronicsEDAProteusEDAPCBProteusSPICE,PCB15PCB—“TheRoutetoPCBCAD”Proteus产VSMLED/LCD、键盘、RS232其功能模块:—个易用而又功能强大的ISIS原理布图工具;Proteus混合模型SPICEARESPCBProteusProteusVSM:便于包括LCDCPU1.支持许多通用的微控制器,如PIC,AVR,HC11以及8051;2.交互的装置模型包括:LEDLCD,RS2323.强大的调试工具,包括寄存器和存储器,断点和单步模式;IARC-SPYKeiluVision35.应用特殊模型的DLL界面-提供有关元件库的全部文件。KeilKeilC51µVision2KeilSoftware,Inc/KeilElektronikGmbH80C51CC51集成开发环境的主要功能有以下几点:1.µVision2forWindows:是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;C51CCA5180C51BL51/C51A51LIB51OH51HEXIntelHexRTX-51这个工具套件是为专业软件开发人员设计的,但任何层次的编程人员都可以使80C51KeilSoftware80C51PK5180C5180C51及其所有派生系列进行配置使用;DK51DK51PK51RTX51Tiny80C51(3)编译器套件:如果开发者只需要一个CCA51编译器套件就是最好的选择。CA51µVision2IDECA51µVision280C51表4-1开发套件和工具对照表ComponentsPK51DK51CA51A51FR51uVision2ProjectManagement&Editor√√√√A51Assembler√√√√C51Compiler√√√BL51Liker/locator√√√√LIB51LibraryMagaer√√√√uVision2Debugger/Simulator√√RTX51Tiny√RTX51Full√2010届本科生毕业设计A5180C51RTX51(FR51:RTX5180C51FullRTX51TinyCAN(6)4-1PROTUES用Proteus软件,根据俄罗斯方块电路原理图,画出仿真图。ProteusKeilKeilµVision3.8Proteus7.4。1.打开PROTEUS的安装目录,进入help目录,打开ARM.HLP帮助文档,点击联接:RemoteDebuggerDrivers/DownloadandInstallremotedebuggerdriverforKeiluVision3,VDMAGDI.EXE,KEILVDM51.dllKEIL\C51\BIN图4-1Protues仿真2.KEILprojectworkspace“target1”上点右键/optionsfortarget'target1'。2420102010届本科生毕业设计PAGEPAGE25DebugUSEproteusVSMSimulator,Settingsproteus在同一台电脑,host:,port:8000,点确定/OK3.proteusDebug/UseRemoteDebugMonitor。4.KEILbuildallproteus4-1Proteus实物的制作与调试电路的焊接1.焊前准备2.焊接顺序元器件装焊顺序依次为:电阻器、电容器、二极管、三极管、集成电路、大功率管,其它元器件为先小后大。3.对元器件焊接要求电阻器焊接电容器焊接二极管的焊接二极管焊接要注意以下几点:第一,注意阳极阴极的极性,不能装错;第二,型号标记要易看可见;第三,焊接立式二极管时,对最短引线焊接时间不能超过2S。三极管焊接注意e、b、c三引线位置插接正确;焊接时间尽可能短,焊接时用镊子夹住引线脚,以利散热。焊接大功率三极管时,若需加装散热片,应将接触面平整、打磨集成电路焊接对于电容器、二极管、三极管露在印制电路板面上多余引脚均需齐根剪去。系统性能测试与功能说明结 论LCDCAT89S522010届本科生毕业设计参考文献C[M]2004.Apress.IntroductiontoVisualBasicProgramming[M].ProfessionalComputingandWebDesign,2006.李华.单片机原理与接口技术,北京:清华大学出版社,33-80.周润景著.ProteusMCS-51&ARM7[M].北京:电子工业出版2006.JavaBean[R].Java技术及应用学术会议,2001.JasonLam.J2ME&Gaming[M].AddisonWesley,2004.高凌琴,陈青华.俄罗斯方块游戏关键技术探讨[J].信息技术与信息化.2008.Java2游戏设计》[M].北京:清华大学出版社,2004.JAVA[M].北京:中国2005-5.谭浩强.C.[M]北京:清华大学出版社,2003.吴金戌,沈庆阳.80512003.[13]李宏,张家田.液晶显示器件应用技术,北京:机械工业出版社,2004.公茂法.单片机人机接口实例集,北京:北京航空航天大学出版社,1998.何立明.单片机高级教程——应用与设计,北京:北京航天航空大学出版社,2000.李广弟,朱月秀.单片机基础,北京:北京航空航天大学出版社,2001.楼然苗,李光飞.MCS-512001.LEGO[J]。“酷比杯”游戏策划大赛,2007.附录1:C语言程序#include<AT89X51.H>#defineucharunsignedchar#defineuint unsignedint#defineDOWNTIME30#defineMAXHANG20#defineMAXLIE16#defineMAXPIX3#definePUSHON#defineLCDP250#defineEN P3_0#defineRW P3_1#defineRS P3_2#defineCS1P3_3#defineCS2P3_4#defineKEYLEFTP3_5#defineKEYDOWNP3_6#defineKEYRIGHP3_7#defineKEYROTATIONP1_0uchargkey=0xff,keystate=0,t0ms1=0,t0ms=0,downtimegap=0;ucharmiao=0,fen=0;uchardownok;bitkeyflag,timeupdate,fashionupdate;ucharidatacubeMap[MAXHANG][2];typedefstruct{ucharcode*box;ucharcube:4;ucharstate:4;charrow;20102010届本科生毕业设计blockthis;uintscore=0;ucharspeed=1;
charcolumn;}block;ucharcodebittable[8]={1,2,4,8,0x10,0x20,0x40,0x80};ucharcodecube[]={/* ■■■■*/0,4,0xe,0, 0,2,6,2,/*■■■■
0,7,2,0,
4,6,4,0,*/0,8,0xe,0, 0,4,4,0xc,/*■■■■
0,0,0xe,2,
0,6,4,4,*/0,0xe,8,0, 0,4,4,6,/*■■■■
0,1,7,0,
6,2,2,0,*/0,0xc,6,0, 0,2,6,4,/* ■■■■
0,6,3,0,
2,6,4,0,*/0,6,0xc,0,*/0,6,0xc,0,/*■■■■0,4,6,2,0,3,6,0,*/0,0xf,0,0,/*■■4,4,4,4,0,0,0xf,0,2,2,2,2,■■*/0,6,6,0, 0,6,6,0, 0,6,6,0, 0,6,6,0};ucharcodeasii[]={0x3E,0x51,0x49,0x45,0x3E,//-0-0x00,0x42,0x7F,0x40,0x00,//-1-0x62,0x51,0x49,0x49,0x46,//-2-0x21,0x41,0x49,0x4D,0x33,//-3-0x18,0x14,0x12,0x7F,0x10,//-4-0x27,0x45,0x45,0x45,0x39,//-5-0x3C,0x4A,0x49,0x49,0x31,//-6-0x01,0x71,0x09,0x05,0x03,//-7-0x36,0x49,0x49,0x49,0x36,//-8-0x46,0x49,0x49,0x29,0x1E,//-9-0x00,0x36,0x36,0x00,0x00,//-:-10//next0x7F,0x04,0x08,0x10,0x7F,//-N-110x7F,0x49,0x49,0x49,0x41,//-E-120x63,0x14,0x08,0x14,0x63,//-X-130x01,0x01,0x7F,0x01,0x01,//-T-14//speed0x26,0x49,0x49,0x49,0x32,//-S-150x7F,0x09,0x09,0x09,0x06,//-P-160x7F,0x49,0x49,0x49,0x41,//-E-170x7F,0x41,0x41,0x41,0x3E,//-D-18//score0x3E,0x41,0x41,0x41,0x22,//-C-190x3E,0x41,0x41,0x41,0x3E,//-O-200x7F,0x09,0x19,0x29,0x46,//-R-210x00,0x00,0x00,0x00,0x00, //--22//GAMEOVER0x3E,0x41,0x51,0x51,0x72,//-G-230x7C,0x12,0x11,0x12,0x7C,//-A-240x7F,0x02,0x0C,0x02,0x7F,//-M-250x1F,0x20,0x40,0x20,0x1F,//-V-26//TIME// 0x00,0x41,0x7F,0x41,0x00 //-I-27};////////////////////////////////////////////////////////////////////////////////voidlcdCmd(ucharcmd){bitea;ea=EA;EA=0;EN=0;RW=0;RS=0;LCD=cmd;EN=1;EN=1;EN=0;EA=ea;}//voidlcdWriteByte(ucharch){EN=0;RS=1;RW=0;LCD=ch;EN=1;EN=1;EN=0;}//voidlcdSetPage(ucharpage){page&=0x7;page+=0xb8;lcdCmd(page);}//voidlcdSetColumn(ucharcolumn){column&=0x3f;column+=0x40;lcdCmd(column);}////characterfron=5*8voidlcdPlayChar(ucharindex,ucharpage,ucharcolume){uchari,temp;uintp;p=5*index;for(i=colume;i<colume+5;i++){if(i<64){CS1=1;CS2=0;temp=i;}else{CS1=0;CS2=1;temp=i-64;}lcdSetPage(page);lcdSetColumn(temp);lcdWriteByte(asii[p++]);}}////rectangle(3,0,50,60)voidrectangle(void){uchari,page;CS1=1;CS2=0;lcdSetPage(0);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;for(i=3;i<51;i++){EN=0;RS=1;RW=0;LCD=0x1;EN=1;EN=1;EN=0;}EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;//for(page=1;page<7;page++){lcdSetPage(page);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;for(i=3;i<51;i++){EN=0;RS=1;RW=0;LCD=0x0;EN=1;EN=1;EN=0;}EN=0;RS=1;RW=0;LCD=0xff;EN=1;EN=1;EN=0;}//lcdSetPage(7);lcdSetColumn(2);EN=0;RS=1;RW=0;LCD=0x1f;EN=1;EN=1;EN=0;for(i=3;i<51;i++){EN=0;RS=1;RW=0;LCD=0x10;EN=1;EN=1;EN=0;}EN=0;RS=1;RW=0;LCD=0x1f;EN=1;EN=1;EN=0;}////x:列;y行,页3*3voidlcdPutPix(ucharx,uchary,ucharflag){uchari,dat,bitmask,nextbit;bitbflag,pflag,ea;x=x*MAXPIX;y=y*MAXPIX;bflag=0;pflag=0;i=y%8;if(i==0)bitmask=0x7;elseif(i==1)bitmask=0xe;elseif(i==2)bitmask=0x1c;elseif(i==3)bitmask=0x38;elseif(i==4)bitmask=0x70;elseif(i==5)bitmask=0xe0;elseif(i==6){bflag=1;bitmask=0xc0;nextbit=1;}elseif(i==7){bflag=1;bitmask=0x80;nextbit=3;}if(x<62){CS1=1;CS2=0;}elseif(x>63){x-=64;CS1=0;CS2=1;}elsepflag=1;lcdSetPage(y/8);for(i=x;i<x+MAXPIX;i++){if(pflag){if(i==62||i==63){CS1=1;CS2=0;lcdSetPage(y/8);}elseif(pflag&&i==64){CS1=0;CS2=1;lcdSetPage(y/8);}}lcdSetColumn(i);ea=EA;EA=0;EN=0;LCD=0xff;RS=1;RW=1;EN=1;EN=0;EN=1;dat=LCD;EN=0;if(flag==1)dat|=bitmask;elsedat&=~bitmask;lcdSetColumn(i);EN=0;RW=0;RS=1;LCD=dat;EN=1;EN=1;EN=0;EA=ea;}if(bflag){lcdSetPage(y/8+1);for(i=x;i<x+MAXPIX;i++){if(pflag){if(i==62||i==63){CS1=1;CS2=0;lcdSetPage(y/8+1);}elseif(pflag&&i==64){CS1=0;CS2=1;lcdSetPage(y/8+1);}}lcdSetColumn(i);ea=EA;EA=0;EN=0;LCD=0xff;RS=1;RW=1;EN=1;EN=0;EN=1;dat=LCD;EN=0;if(flag==1)dat|=nextbit;elsedat&=~nextbit;lcdSetColumn(i);EN=0;RW=0;RS=1;LCD=dat;EN=1;EN=1;EN=0;EA=ea;}}}//voidlcdClear(void){uchari,page;CS1=1;CS2=0;for(page=0;page<8;page++){lcdSetPage(page);lcdSetColumn(0);for(i=0;i<64;i++)lcdWriteByte(0);}CS1=0;CS2=1;for(page=0;page<8;page++){lcdSetPage(page);lcdSetColumn(0);for(i=0;i<64;i++)lcdWriteByte(0);}}//#defineSTAR53#defineWIDE6voidlcdIni(void){lcdCmd(0x3f);lcdCmd(0xc0);lcdClear();rectangle();//NEXTlcdPlayChar(11,0,STAR);lcdPlayChar(12,0,STAR+1*WIDE);lcdPlayChar(13,0,STAR+2*WIDE);lcdPlayChar(14,0,STAR+3*WIDE);//SPEEDlcdPlayChar(15,3,STAR);lcdPlayChar(16,3,STAR+1*WIDE);lcdPlayChar(17,3,STAR+2*WIDE);lcdPlayChar(17,3,STAR+3*WIDE);lcdPlayChar(18,3,STAR+4*WIDE);//01lcdPlayChar(0,4,STAR+2*WIDE);lcdPlayChar(1,4,STAR+3*WIDE);//SCORElcdPlayChar(15,5,STAR);lcdPlayChar(19,5,STAR+1*WIDE);lcdPlayChar(20,5,STAR+2*WIDE);lcdPlayChar(21,5,STAR+3*WIDE);lcdPlayChar(12,5,STAR+4*WIDE);lcdPlayChar(0,6,STAR+1*WIDE);lcdPlayChar(0,6,STAR+2*WIDE);lcdPlayChar(0,6,STAR+3*WIDE);lcdPlayChar(0,6,STAR+4*WIDE);//TIMElcdPlayChar(0,7,STAR);lcdPlayChar(0,7,STAR+1*WIDE);lcdPlayChar(10,7,STAR+2*WIDE);lcdPlayChar(0,7,STAR+3*WIDE);lcdPlayChar(0,7,STAR+4*WIDE);}//voidshowScoreSpeed(void){ucharnum[5];chari;uinttemp;temp=score;for(i=0;i<5;i++){num[i]=temp%10;temp=temp/10;}for(i=4;i>0;i--){if(num[i]==0)num[i]=22;elsebreak;}for(i=4;i>-1;i--)lcdPlayChar(num[i],6,STAR+(4-i)*WIDE);lcdPlayChar(speed/10,4,STAR+2*WIDE);lcdPlayChar(speed%10,4,STAR+3*WIDE);}//voidtimeServer(void){if(timeupdate){timeupdate=0;lcdPlayChar(fen/10,7,STAR);lcdPlayChar(fen%10,7,STAR+1*WIDE);lcdPlayChar(10,7,STAR+2*WIDE);lcdPlayChar(miao/10,7,STAR+3*WIDE);lcdPlayChar(miao%10,7,STAR+4*WIDE);}if(fashionupdate){fashionupdate=0;lcdPlayChar(22,7,STAR+2*WIDE);}}//===================================================================voidt0isr(void)interrupt1{ucharkey;TH0=(65536-10000)/256;TL0=(65536-10000)%256;downtimegap++;t0ms=++t0ms%100;if(t0ms==0){timeupdate=1;miao=++miao%60;if(miao==0)fen=++fen%60;}if(t0ms==50)fashionupdate=1;//key=0xff;KEYLEFT=1;KEYRIGH=1;KEYROTATION=1;KEYDOWN=1;if(!KEYLEFT)key=0;if(!KEYRIGH)key=1;if(!KEYROTATION)key=2;if(!KEYDOWN)key=3;switch(keystate){case0:if(key!=gkey){gkey=key;keystate=1;}break;case1:if(key==gkey){}else
t0ms1=0;keystate=2;if(key!=0xff)keyflag=1;keystate=0;break;case2:if(key==gkey){}else{
if(t0ms1<PUSHON)t0ms1++;keystate=0;keyflag=0;gkey=0xff;}break;}}//===================================================================voidshowNextCube(ucharcode*p,ucharx,uchary){uchari,j,temp;for(i=0;i<4;i++){temp=1;for(j=0;j<4;j++){if(p[i]&temp)lcdPutPix(x+j,y+i,1);elselcdPutPix(x+j,y+i,0);temp<<=1;}}}//voidcreateCube(void){staticucharnext;this.cube=next;next=TL0%7;this.row=0;this.column=6;this.state=0;this.box=cube+16*this.cube;showNextCube(cube+16*next,19,3);}//voidshowCubeMap(void){unsignedcharhang,lie,temp;for(hang=MAXHANG-1;hang>0;hang--){if(cubeMap[hang][0]==0&&cubeMap[hang][1]==0)break;for(lie=0;lie<(MAXLIE/8);lie++){temp=8*lie;if(cubeMap[hang][lie]&0x01)lcdPutPix(temp+1,hang,1);if(cubeMap[hang][lie]&0x02)lcdPutPix(temp+2,hang,1);if(cubeMap[hang][lie]&0x04)lcdPutPix(temp+3,hang,1);if(cubeMap[hang][lie]&0x08)lcdPutPix(temp+4,hang,1);if(cubeMap[hang][lie]&0x10)lcdPutPix(temp+5,hang,1);if(cubeMap[hang][lie]&0x20)lcdPutPix(temp+6,hang,1);if(cubeMap[hang][lie]&0x40)lcdPutPix(temp+7,hang,1);if(cubeMap[hang][lie]&0x80)lcdPutPix(temp+8,hang,1);}}}//voidwriteCubeToMap(void){ucharrow,column,temp;ucharhang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row]&temp){hang=this.row+row;lie=this.column+column;cubeMap[hang][lie/8]|=bittable[lie%8];lcdPutPix(lie+1,hang,1);}temp<<=1;}}}//voidclearCubeFromMap(void){ucharrow,column,temp;ucharhang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row]&temp){hang=this.row+row;lie=this.column+column;cubeMap[hang][lie/8]&=~bittable[lie%8];lcdPutPix(lie+1,hang,0);}temp<<=1;}}}//ucharcheckBorder(void){if(this.box[3]!=0&&this.row>(MAXHANG-4))return1;elseif(this.box[2]!=0&&this.row>(MAXHANG-3))return1;elseif(this.box[1]!=0&&this.row>(MAXHANG-2))return1;elseif(this.box[0]!=0&&this.row>(MAXHANG-1))return1;//if((this.box[0]&0x01)||(this.box[1]&0x01)||(this.box[2]&0x01)||(this.box[3]&0x01)){if(this.column<0)return1;}0x02))
elseif((this.box[0]&0x02)||(this.box[1]&0x02)||(this.box[2]&0x02)||(this.box[3]&{if(this.column<-1)return1;}0x04))
elseif((this.box[0]&0x04)||(this.box[1]&0x04)||(this.box[2]&0x04)||(this.box[3]&{if(this.column<-2)return1;0x08))
}elseif((this.box[0]&0x08)||(this.box[1]&0x08)||(this.box[2]&0x08)||(this.box[3]&{if(this.column<-3)return1;}//if((this.box[0]&0x08)||(this.box[1]&0x08)||(this.box[2]&0x08)||(this.box[3]&0x08)){if(this.column>(MAXLIE-4))return1;}0x04))
elseif((this.box[0]&0x04)||(this.box[1]&0x04)||(this.box[2]&0x04)||(this.box[3]&{if(this.column>(MAXLIE-3))return1;0x02))
}elseif((this.box[0]&0x02)||(this.box[1]&0x02)||(this.box[2]&0x02)||(this.box[3]&{if(this.column>(MAXLIE-2))return1;0x08))
}elseif((this.box[0]&0x08)||(this.box[1]&0x08)||(this.box[2]&0x08)||(this.box[3]&{if(this.column>(MAXLIE-1))return1;}//return0;}//ucharcheckClask(void){ucharrow,column,temp;ucharhang,lie;for(row=0;row<4;row++){temp=1;for(column=0;column<4;column++){if(this.box[row]&temp){hang=this.row+row;lie=this.column+column;if(cubeMap[hang][lie/8]&bittable[lie%8])return1;}temp<<=1;}}return0;}//voidcheckMap(void){uchari,j,delete;bitfull;full=0;delete=0;for(i=MAXHANG-1;i>0;i--){if(cubeMap[i][0]==0&&cubeMap[i][1]==0)break;if(cubeMap[i][0]==0xff&&cubeMap[i][1]==0xff){delete++;full=1;for(j=i;j>0;j--){cubeMap[j][0]=cubeMap[j-1][0];cubeMap[j][1]=cubeMap[j-1][1];}}}if(full){
i++;cubeMap[0][0]=0;cubeMap[0][1]=0;if(delete==1)score++;elseif(delete==2)score+=4;elseif(delete==3)score+=9;elseif(delete==4)score+=16;rectangle();showCubeMap();if(score<50)speed=1;elseif(score<100)speed=2;elseif(score<500)speed=3;elseif(score<1000)speed=4;elseif(score<5000)speed=5;elseif(score<10000)speed=6;elseif(score<20000)speed=7;elseif(score<30000)speed=8;elseif(score<40000)speed=9;elseif(score<50000)speed=10;elseif(score<60000)speed=11;elsespeed=12;showScoreSpeed();}}//voidmoveLeft(void){clearCubeFromMap();this.column--;if(checkBorder()||checkClask())this.column++;writeCubeToMap();}//voidmoveRigh(void){clearCubeFromMap();this.column++;if(checkBorder()||checkClask())this.column--;writ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司合法经营与安全生产承诺书范文9篇
- 质量承诺与服务保障书(3篇)
- 岗位职责履行保证承诺书5篇
- 软件公司软件测试工程师绩效考核表
- 工业自动化工程师系统集成绩效评定表
- 工程质量责任终身维护承诺书9篇范文
- 2026年中考英语必考短语
- 2026云南迪庆州德钦县政协招聘公益性岗位人员2人备考题库(含答案详解)
- 2026北京印刷学院非事业编制财务人员招聘1人备考题库含答案详解(轻巧夺冠)
- 2026一重集团国际有限责任公司面向集团内部及社会招聘业务人员备考题库附答案详解(夺分金卷)
- 生态护林员培训
- 2025年中国装饰墙面乳胶漆数据监测报告
- 新解读《JG-T 296-2010空气吹淋室》
- GB/T 4699.2-2025铬铁、硅铬合金、氮化铬铁和高氮铬铁铬含量的测定过硫酸铵氧化滴定法和电位滴定法
- 公众号合作快递合同范本
- 危险化学品基础知识概述
- 主播合作协议解除协议书
- 旅游产业股权合作协议书
- DB32/ 4440-2022城镇污水处理厂污染物排放标准
- 文第19课《井冈翠竹》教学设计+2024-2025学年统编版语文七年级下册
- 车库使用协议合同
评论
0/150
提交评论