基于Proteus的单片机实时时钟的仿真设计毕业设计论文_第1页
基于Proteus的单片机实时时钟的仿真设计毕业设计论文_第2页
基于Proteus的单片机实时时钟的仿真设计毕业设计论文_第3页
基于Proteus的单片机实时时钟的仿真设计毕业设计论文_第4页
基于Proteus的单片机实时时钟的仿真设计毕业设计论文_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计论文题目基于Proteus的单片机实时时钟的仿真设计毕业设计论文中文摘要(题目):基于(题目):基于Proteus的单片机实时时钟的仿真设计摘要:本设计论述的是一个基于Proteus技术的单片机的实时时钟仿真系统的实现。使用了Proteus软件技术和Keilc软件进行仿真和调试,最终实现日常的时钟显示,它还可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,同时具有时钟调整、闹钟等功能。本电子时钟设计首要的工作是结合以往所学的单片机程序编写理论和编写规则来编写电子时钟的软件部分,编写时要结合所配的STM8S105芯片的管脚功能和其他硬件电路,如DS1302时钟芯片和LCD1602液晶显示屏,该部分运用STVD单片机软件来完成。在编写完软件并检测完正确后用仿真硬件检测运行检测程序是否正确,并调试。待这一切工作做好后再利用系统板硬件电路来实践实现软件功能与硬件的结合。并应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。关键词:Proteus实时时钟单片机仿真毕业设计论文外文摘要(Title):basedonsinglechipProteusdesignsimulationofreal-timeclAbstract:thispaperbasedonthedesignofasinglechipProteustechnologyoftherealizationofthesimulationsystemforreal-timeclock.USEStheProteussoftwaretechnologyandKeilcsoftwaresimulationanddebugging,finallyrealizesthedailytheclockdisplay,itcanalsoonyear,month,day,Sunday,when,minutesandsecondsfortiming,havealeapyearcompensationfunction,alsohastheclockadjustment,alarmclock,andotherfunctions.Thiselectronicclockdesignfirstworkistocombinethemicrocontrollerprogramminglearnedeverwriterulestowritetheoryandthesoftwareparts,electronicclocktowriteonthematchwhenSTM8S105chiptubefootfunctionandotherhardwarecircuit,suchasDS1302clockchipandLCD1602LCDscreen,thispartutilizationSTVDsingle-chipmicrocomputersoftwaretocomplete.Inwritingthesoftwareandfinishedwithsimulationtestafterrighthardwaredetectionoperationtestprocedureiscorrect,anddebugging.Untoallthisworkdonereusethsystemboardhardwarecircuittopracticerealizethecombinationofhardwareandsoftwarefunctions.AndtheapplicationofISISsoftwarerealizetheProteusmicrocontrollerelectronicclocksystemdesignandsimulation.Thismethodsimulationeffecttrue,accurate,savethehardwareresources.Keywords:Proteusreal-timeclocksingle-chipmicrocomputersimulation目录1引言12设计思路和功能描述13硬件原理分析14Proteus简介24.1该软件的特点:24.2如何进入ProteusISIS34.3工作界面3Keilc与Proteus连接调试45基本原理45.1ISIS软件的主要特性有56硬件电路设计与实现57主要芯片、元器件简介67.1DS130267.1.1DS1302的主要特性77.1.2主要功能87.2AT89C51单片机87.2.1.主要特性97.2.2.管脚说明97.2.3.振荡器特性117.2.4.芯片擦除117.3LCD1602液晶屏显示电路128软件设计设计149系统仿真分析38结论41致谢42参考文献:431引言单片微型计算机,简称单片机,又称微控制器。单片机作为微型计算机家族的一员,以独特的结构和优点,越来越深受各个应用领域的关注和重视,应用十分广泛,发展极快。单片机技术应用于各行各业,是一种实用的智能型控制技术,单片机技术的发展极大地推动了电子、通信、计算机、机电一体化等行业的快速发展,成为当前教学和科研的热门技术。单片机电子时钟系统可以用多种技术手段实现。本文借助于Proteus仿真系统进行系统虚拟开发成功之后再进行实际操作,可以节约开发时间,降低开发成本,具有很大的灵活性和可扩展性。在国外有包括斯坦福、剑桥等在内的几千家高校将Proteus作为电子工程学位的教学和实验平台;在国内也有众多大学正在体验Proteus的独一无二的功能并申报大学计划。该方法具有普遍意义。通过实际应用发现,采用该方法可以大大简化硬件电路测试和系统调试过程中电路板制作、元器件安装、焊接等过程。很明显,使用该方法可以提高开发效率、降低开发成本、提升开发速度,对单片机系统开发具有指导意义。2设计思路和功能描述整体设计任务:本电子时钟设计首要的工作是结合以往所学的单片机程序编写理论和编写规则来编写电子时钟的软件部分,编写时要结合所配的STM8S105芯片的管脚功能和其他硬件电路,如DS1302时钟芯片和LCD1602液晶显示屏,该部分运用STVD单片机软件来完成。在编写完软件并检测完正确后用仿真硬件检测运行检测程序是否正确,并调试。待这一切工作做好后再利用系统板硬件电路来实践实现软件功能与硬件的结合。3硬件原理分析电路设计分析电路原理设计是基于小系统包括电源电路、复位电路、按键电路、时钟电路、LCD液晶显示驱动电路、输出控制电路。电源部分是用直流电源经变压来提供的5V,晶体振荡器采用的是16MHz的石英晶体振荡器。部分硬件设计:本设计采用DS1302实时时钟芯片来进行计时,并将1302的数据输入单片机进行处理,送入LCD1602液晶显示屏进行显示。用四个电位按键来实现对电子时钟的调试工作,当按第一下总控键时进入中断程序,即时钟的调整状态,有两个电位按键分别来调整时钟的加和减;第四个按键用来调整时分秒日月年,按一下调整秒,连按两下调整分,按三下调整时,四下调整日,五下调整月,六下调整年,七下退出时间设置。用一个按键和其他部件组成的复位电路与芯片连接来实现整个程序及硬件的重新复位功能。4Proteus简介Proteus是目前最先进的单片机CPU和外围电路仿真工具之一。本文介绍了单片机仿真软件Proteus的特点,并结合实时时钟电路的实例详细介绍了使用Proteus进行电路设计与仿真的过程及方法,旨在为单片机爱好者和技术人员提供了一个很好的学习平台。ProteusISIS是英国Lacenterelec-tronics公司开发的电路分析与实物仿真软件,应用范围十分广泛,涉及PCB制版、Spice电路仿真、单片机仿真以及对ARM7/LPC2000的仿真。Proteus主要由ARESISIS两大模块构成,ARES主要用于印刷电路板(PCB)的设计及其电路仿真,ISIS主要用于原理图的设计并仿真。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。4.1该软件的特点:1.实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真,数字电路仿真。单片机及其外围电路组成的系统的仿真。有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。2.支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、805l系列。AVR系列、ARM系列、PICl2系列、PICl6系列、PICl8系列、Z80系列、HCl1系列以及各种外围芯片。3.提供软件调试功能。该软件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,同时支持第三方的软件编译和调试环境,如KeilC5luVision2等软件。4.具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本文介绍ProteusISIS软件的工作环境和一些基本操作。4.2如何进入ProteusISIS双击桌面上的ISIS6Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus6Professional”→“ISIS6Professional”,出现如图1所示屏幕,表明进入ProteusISIS集成环境。图1启动时的屏幕4.3工作界面ProteusISIS的工作界面是一种标准的Windows界面,如图2所示。包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。图2ProteusISIS的工作界面Keilc与Proteus连接调试1.假若Keilc与Proteus均已正确安装在C:\ProgramFiles的目录里;2.安装Keilc与Proteus的连接插件vdmagdi.exe;3.进入KeilcμVision2开发集成环境,创建一个新项目(Project,并为该项目)选定合适的单片机CPU器件(如:Atmel公司的AT89C51)。并为该项目加入Keilc源程序。下面以单片机实时时钟电路为例,介绍使用Proteus进行单片机实时时钟电路设计与仿真的过程。5基本原理单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。软件调试一般比较容易进行,但如果要进行硬件电路测试和系统调试则比较麻烦,因为要进行这两个过程必须在电路板设计制作完成、元器件焊接完毕之后进行。而电路板的制作、元器件的安装、焊接是费时费力的,如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。Proteus软件是来自英国Labcenterelectronics公司的EDA工具软Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是:将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,Proteus为我们建立了完备的电子设计开发环境。Proteus软件由ISIS和ARES两个软件构成,其中ISIS是原理图编辑与仿真软件,ARES是布线编辑软件。这里主要介绍ISIS软件。5.1ISIS软件的主要特性有可以仿真、分析各种模拟器件和集成电路,其最大的特点是可以支持许多型号的单片机仿真,该软件的单片机仿真库里有5l系列、PIC系列、AVR系列、摩托罗拉的68MHll系列等,Proteus的仿真是基于SPICE3F5的,因此它也能像其他的EDA软件那样进行电路分析,如模拟分析、数字仿真、混合信号分析、频率分析等。提供了虚拟示波器、逻辑分析仪、信号发生器、计数器、电表、虚拟终端等虚拟仪器仪表供选用。能够进行原理图(SCH)的设计。能和Keilc等软件整合使用,以求达到更好的仿真效果。6硬件电路设计与实现以单片机电子时钟系统为例,介绍使用Proteus进行单片机电子时钟系统设计与仿真的过程。这里使用的是Proteus6Demo版本。该电子时钟系统硬件主要由AT89C51单片机、时钟芯片DS1302、LCD1602等元器件组成。系统原理图如图1所示。和Protel,EWB等软件相似,绘制原理图都要先从器件库里取出所需的元件并在绘图区布局好,同时编辑元件的参数,接着进行连线,添加必要的网络标识等步骤。运行Proteus的ISIS后出现程序主窗口界面,鼠标左键单击窗口左侧的元器件工具栏的component。按钮,接着再点击窗口左侧的元器件选择区的PickDivices。按钮,弹出如图2所示的PickDevices窗口,再在Category栏里点击MicroprocessorICs项后,在Results栏里会出现各种类型的CPU器件,找到AT89C51后双击,AT89C51就被添加到当前窗口左侧的元器件列表区了。用同样的方法依次把DS1302、LCD1602、数码管、晶振以及多个电阻、电容也添加到器件列表区里。然后再依次点击列表区里的器件,单击左键把他们放到绘图区,右键选中元件,并编辑其属性,合理布局后,进行连线。连线时当鼠标的指针靠近一个对象的引脚时,跟着鼠标的指针就会出现一个“×”提示符号,点击鼠标左键即可画线了,需要拐弯时点击一下即可,在终点再点击确认一下就画出了一段导线,所有导线画完后,点击工具栏的Inter—sheetTerminal。按钮,添加上电源和接地符号,原理图的绘制就完成了。最后,保存设计文件于C:\LabcenterElectronics\Proteus6Demonstration\eclock文件夹,文件名为eclock.DSN。7主要芯片、元器件简介7.1DS1302DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的引脚排列中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。7.1.1DS1302 的主要特性引脚排列图3DS1302引脚排列图DS1302的引脚排列如图所示,各引脚的功能如下:X1,X2——32768Hz晶振引脚端;RST——复位端;I/O——数据输入/输出端;SCLK——串行时钟端;GND——地;VCC2,VCC1——主电源与后备电源引脚端。1.2主要功能 DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器、实时时钟电路以及用于高速暂存的31字节RAM。DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。其工作过程可概括为:首先系统RST引脚驱动至高电平,然后在作用于SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。因此,其与单片机之间的数据传送是十分容易实现的。7.2AT89C51单片机AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。图4AT89系列芯片7.2.1.主要特性·与MCS-51兼容·4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路7.2.2.管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。7.2.3.振荡器特性XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。7.2.4.芯片擦除整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1且”在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。7.3LCD1602液晶屏显示电路16021602是一种字符型液晶显示模块,专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。下面以某公司的1602字符型液晶显示器为例,介绍其用法。一般1602字符型液晶显示器实物如图图51602液晶实物图1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图图6LCD背光和不背光尺寸差别16021602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极输出控制电路将PB口用于单片机和LCD显示器的数据传输通道,如下图所示,通过控制LCD的读写控制端将1302的数据显示出来。图7整体布局8软件设计设计地址空间及端口分配_Boolrs@PC_ODR:1;//PC作为LCD的控制端,设置为输入_Boolrw@PC_ODR:2;_Boolen@PC_ODR:3;_Boolsclk@PA_ODR:4;//串行时钟,输入输出控制_Booldio@PA_ODR:5;//三线接口时的数据线_Boolid@PA_IDR:5;_Boolce@PA_ODR:6;//作为复位端口_BoolID1@PG_IDR:0;//将PD6引脚设置为外部中断的输入引脚总体架构说明该时钟程序设计思路如下:(1)、在程序头将设计中的一些IO口进行分配并注释。(2)、初始化程序,对单片机的IO口设置为输入输出等,对1302,1602的参数进行设置,如设定时钟运行为24小时制;将一些未到时钟设计功能的功能端口关闭等。开始主程序进行程序扫描,先扫初始化字子程序初始化DS1302和LCD1602,启动时钟芯片进行计时,初始化1602的显示方式,将分配好的时分秒等数字调入到显示子程序中。——>显示子程序通过分配的空间对应口将DS1302时钟芯片的数据显示相应的时分秒,年月日等。——>进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。如进入时间调整,中断进入、退出等。——>最后返回主程序头重新依次扫描。显示过程设有消隐,按键通过软件去斗。、子程序部分。在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。这些子程序包括显示子程序、延时子程序、时间计数子程序、按键处理子程序、调时间子程序等。3、各子程序功能显示子程序:将时钟芯片1302内的时钟数据送入单片机进行处理再送入LCD1602内进行显示,显示格式为:年/月/日/时/分/秒/星期。延时子程序:该子程序是为了实现1302及1602在读写过程中的上升下降沿让芯片有足够的读写时间,以及字符有足够的显示时间,同时作为按键开关扫描去抖的延迟时间。时间计数子程序:该程序功能是调动DS1302的初始化程序、读写程序,并将其内部数据送入单片机内进行处理。DS1302选择24小时工作方式,秒计数,走到59后进位分,后变00从新开始计时,分走到59后进位时,分从新开始00计时,时走到23,分走到59,秒走到59后进入从新日期周期计时。按键处理子程序:该程序进行按键处理的功能判断分别对时分秒、年月日等进行调整已经中断的进入与退出等。4、程序清单#include"stm8s105C_S.h"ucharn1,n2,n3;ucharu0,u1,u2,u3;uchartable[]={"20--"};uchartable1[]={"::"};uchartable2[]={'0','1','2','3','4','5','6','7','8','9'};uchartable3[]={"MonTueWedThuFriSatSun"};uchartable4[]={"Happybirthday"};//16个字符uchartable5[]={"<<<<<toyou>>>>>"};#defineuintunsignedint#defineucharunsignedchar#definePBPB_ODR#defineWrite_second0X80//秒写寄存器地址#defineWrite_minute0X82//分写寄存器地址#defineWrite_hour0X84//时写寄存器地址#defineWrite_day0X86//日写寄存器地址#defineWrite_month0X88//月写寄存器地址#defineWrite_week0X8A//周写寄存器地址#defineWrite_year0X8C//年写寄存器地址#defineWrite_protect0X8E//写保护字节写寄存器地址#defineWrite_chongdian0x90//慢充电寄存器地址#defineRead_second0X81//秒读寄存器地址#defineRead_minute0X83//分读寄存器地址#defineRead_hour0X85//时读寄存器地址#defineRead_day0X87//日读寄存器地址#defineRead_month0X89//月读寄存器地址#defineRead_week0X8B//周读寄存器地址#defineRead_year0X8D//年读寄存器地址_Boolrs@PC_ODR:1;//pc作为lcd的控制端,设置为输入_Boolrw@PC_ODR:2;_Boolen@PC_ODR:3;_Boolsclk@PA_ODR:4;//串行时钟,输入输出控制_Booldio@PA_ODR:5;//三线接口时的数据线_Boolid@PA_IDR:5;_Boolce@PA_ODR:6;//复位_Boolda_od@PA_DDR:5;_Boolda_CR1@PA_CR1:5;_Boolda_CR2@PA_CR2:5;_BoolID1@PG_IDR:0;//将Pd6引脚设置我外部中断的输入引脚_BoolID2@PD_IDR:5;_BoolID3@PG_IDR:1;_BoolID4@PD_IDR:6;//键盘的输入//shfm_key(void){ucharlshi;ucharan=0,n=0;do{if(!ID1){delay(6);if(!ID1){while(!ID1);lshi=1;an++;if(an==1){Write_ds1302(Write_second,0x80);//先暂停时钟秒u2=Read_ds1302(Read_second);u2=((u2&0x70)>>4)*10+(u2&0x0F);write_sfm(6,u2);lcd_wcom(0x80+0x40+7);lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}if(an==2){u1=Read_ds1302(Read_minute);u1=((u1&0x70)>>4)*10+(u1&0x0F);write_sfm(3,u1);lcd_wcom(0x80+0x40+4);//显示分lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}if(an==3){u0=Read_ds1302(Read_hour);u0=((u0&0x70)>>4)*10+(u0&0x0F);write_sfm(0,u0);lcd_wcom(0x80+0x40+1);//显示时lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}if(an==4){n3=Read_ds1302(Read_day);n3=((n3&0x70)>>4)*10+(n3&0x0F);write_sfm1(8,n3);lcd_wcom(0x80+9);//显示日lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}if(an==5){n2=Read_ds1302(Read_month);n2=((n2&0x70)>>4)*10+(n2&0x0F);write_sfm1(5,n2);lcd_wcom(0x80+6);//显示月lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}if(an==6){n1=Read_ds1302(Read_year);n1=((n1&0x70)>>4)*10+(n1&0x0F);write_sfm1(2,n1);lcd_wcom(0x80+3);//显示年lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}if(an==7){lshi=0;an=0;Write_ds1302(Write_second,0x00);//从新开启时钟lcd_wcom(0x38);lcd_wcom(0x0c);n=1;}}}switch(an){case1:if(ID2==0){delay(4);if(ID2==0){while(!ID2);_asm("NOP");jia_key(Write_second,Read_second,6,1);_asm("NOP");}}if(ID3==0)//秒的减{delay(4);if(ID3==0){while(!ID3);_asm("NOP");jia_key(Write_second,Read_second,6,0);_asm("NOP");}}break;case2:if(ID2==0)//分的加{delay(4);if(ID2==0){while(!ID2);_asm("NOP");jia_key(Write_minute,Read_minute,3,1);_asm("NOP");}}if(ID3==0)//分的减{delay(4);if(ID3==0){while(!ID3);_asm("NOP");jia_key(Write_minute,Read_minute,3,0);_asm("NOP");}}break;case3:if(ID2==0)//时的加{delay(4);if(ID2==0){while(!ID2);_asm("NOP");hjia_key(Write_hour,Read_hour,0,1);_asm("NOP");}}if(ID3==0)//小时的减{delay(4);if(ID3==0){while(!ID3);_asm("NOP");hjia_key(Write_hour,Read_hour,0,0);_asm("NOP");}}break;case4:if(ID2==0)//日的加{delay(4);if(ID2==0){while(!ID2);_asm("NOP");rjia_key(Write_day,Read_day,8,1);_asm("NOP");}}if(ID3==0)//日的减{delay(4);if(ID3==0){while(!ID3);_asm("NOP");rjia_key(Write_day,Read_day,8,0);_asm("NOP");}}break;case5:if(ID2==0)//月的加{delay(4);if(ID2==0){while(!ID2);_asm("NOP");yjia_key(Write_month,Read_month,5,1);_asm("NOP");}}if(ID3==0)//月的减{delay(4);if(ID3==0){while(!ID3);_asm("NOP");yjia_key(Write_month,Read_month,5,0);_asm("NOP");}}break;case6:if(ID2==0)//年的加{delay(4);if(ID2==0){while(!ID2);_asm("NOP");njia_key(Write_year,Read_year,2,1);_asm("NOP");}}if(ID3==0)//年的减{delay(4);if(ID3==0){while(!ID3);_asm("NOP");njia_key(Write_year,Read_year,2,0);_asm("NOP");}}break;}}while(lshi==1);_asm("NOP");return(n);return(n);}voidWrite_ds1302(ucharaddr,uchardat){uchari;PC_DDR|=0xFF;PC_CR1|=0xFF;PC_CR2|=0X00;ce=0;//先复位sclk=0;//清零,保持io口的低电平,以待数据的写入ce=1;//置1,开始写数据//发送地址for(i=0;i<8;i++){dio=addr&0x01;//将一位bcd码的数据送给io口addr=addr>>1;//右移一位sclk=1;//产生上升沿,发送数据sclk=0;}//发送数据for(i=0;i<8;i++){dio=dat&0x01;//将一位bcd码的地址数据送给io口dat=dat>>1;sclk=1;//产生上升沿,发送数据delay(1);sclk=0;}ce=0;}//读操作//Read_ds1302(ucharaddr){uchari;uchark;uchardat;da_od=0;da_CR1=0;da_CR2=0;ce=0;sclk=0;ce=1;//发送地址for(i=0;i<8;i++){sclk=0;delay(10);if(addr&0x01){dio=1;}elsedio=0;addr>>=1;sclk=1;delay(2);}da_od=0;da_CR1=0;da_CR2=0;//读取数据//for(k=0;k<8;k++){dat>>=1;sclk=1;delay(2);sclk=0;delay(2);if(id==0){dat&=0x7f;}elsedat|=0x80;}sclk=1;ce=0;return(dat);}//IO口的初始化//voidGPIO_Init(void){PC_DDR|=0X0F;PC_CR1|=0X0F;PC_CR2|=0X00;PG_DDR|=0X00;PG_CR1|=0X03;PG_CR2|=0X00;PD_DDR|=0X1C;PD_CR1|=0X0F;EXTI_CR1|=0X00;ITC_SPR2|=0X30;PD_CR2|=0X40;PA_DDR|=0XFF;PA_CR1|=0XFF;PA_CR2|=0X00;PB_DDR|=0XFF;PB_CR1|=0XFF;PB_CR2|=0X00;}//延时函数//voiddelay(uintn){uintx,y;for(x=n;x>0;x--)for(y=110;y>0;y--);}//1602写命令函//voidlcd_wcom(ucharcom){rs=0;//选择指令寄存器rw=0;//选择写PB=com;//把命令字送入PBdelay(5);//延时一小会儿,让1602准备接收数据en=1;//使能线电平变化,命令送入1602的8位数据口en=0;}//1602写数据函数//voidlcd_wdat(uchardat){rs=1;//选择数据寄存器rw=0;//选择写PB=dat;//把要显示的数据送入P2delay(5);//延时一小会儿,让1602准备接收数据en=1;//使能线电平变化,数据送入1602的8位数据?en=0;}//1602初始化函数//voidlcd_init(void){uchara,k;delay(15);//等待电源稳定lcd_wcom(0x38);//8位数据,双列,5*7字形lcd_wcom(0x0c);//开启显示屏,关光标,光标不闪烁lcd_wcom(0x06);//显示地址递增,即写一个数据后显示位置右移一位lcd_wcom(0x01);//清屏/////////显示第一行/////////lcd_wcom(0x80);for(a=0;a<15;a++){lcd_wdat(table[a]);delay(5);}/////////显示第二行/////////lcd_wcom(0x80+0x40);for(k=0;k<8;k++){lcd_wdat(table1[k]);delay(5);}}///年月日时分秒输入的子函数////秒分的加减子函数//输入//voidjia_key(ucharrd,ucharwd,ucharfd,ucharfen){u1=Read_ds1302(wd);_asm("nop");u1=((u1&0x70)>>4)*10+(u1&0x0F);if(fen==1){u1++;if(u1==60){u1=0;}}else{u1--;if((u1+1)==0){u1=59;}if(u1>59){u1=59;}}Write_ds1302(rd,(u1/10)<<4|(u1%10));////秒write_sfm(fd,u1);lcd_wcom(0x80+0x40+fd);//显示分lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}//时的加减子函数//输入//voidhjia_key(ucharrd,ucharwd,ucharfd,ucharshi){u0=Read_ds1302(wd);u0=((u0&0x70)>>4)*10+(u0&0x0F);if(shi==1){u0++;if(u0==24){u0=0;}}else{u0--;if((u0+1)==0){u0=23;}if(u0>23){u0=23;}}Write_ds1302(rd,(u0/10)<<4|(u0%10));//秒_asm("nop");write_sfm(fd,u0);lcd_wcom(0x80+0x40+fd);//显示分_asm("nop");lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标lcd_wcom(0x80+0x40+fd);}//日的加减子函数/输入//voidrjia_key(ucharrd,ucharwd,ucharfd,ucharday){n3=Read_ds1302(wd);n3=((n3&0x70)>>4)*10+(n3&0x0F);if(day==1){n3++;if(n3==32){n3=0;}}else{n3--;if((n3+1)==0){n3=31;}_asm("nop");if(n3>31){n3=31;}}Write_ds1302(rd,(n3/10)<<4|(n3%10));_asm("nop");write_sfm1(fd,n3);_asm("nop");lcd_wcom(0x80+fd);//显示lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}//月的子函数//输入//voidyjia_key(ucharrd,ucharwd,ucharfd,ucharyue){n2=Read_ds1302(wd);n2=((n2&0x70)>>4)*10+(n2&0x0F);_asm("nop");if(yue==1){n2++;if(n2==13){n2=0;}}else{n2--;if((n2+1)==0){n2=12;}if(n2>12){n2=12;}}Write_ds1302(rd,(n2/10)<<4|(n2%10));_asm("nop");write_sfm1(fd,n2);_asm("nop");lcd_wcom(0x80+fd);_asm("nop");lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标}//年的子函数/输入//voidnjia_key(ucharrd,ucharwd,ucharfd,ucharnian){n1=Read_ds1302(wd);n1=((n1&0xF0)>>4)*10+(n1&0x0F);if(nian==1){n1++;if(n1==100){n1=0;}}else{n1--;if((n1+1)==0){n1=99;}if(n1>99){n1=99;}}Write_ds1302(rd,(n1/10)<<4|(n1%10));write_sfm1(fd,n1);lcd_wcom(0x80+fd);//显示lcd_wcom(0x38);lcd_wcom(0x0f);//显示功能开,有光标lcd_wcom(0x80+fd);}//初始化1302,设置开始时候的时分秒voidInit_DS1302(void){Write_ds1302(Write_protect,0x00);Write_ds1302(Write_year,0x0A);//年Write_ds1302(Write_month,0XC);//月Write_ds1302(Write_day,0X22);//日Write_ds1302(Write_hour,0X23);//小时Write_ds1302(Write_minute,0X59);//分Write_ds1302(Write_second,0X00);//秒Write_ds1302(Write_protect,0x80);//关闭寄存器操作;}voidwrite_sfm(ucharadd,uchardat){ucharshi,ge;shi=dat/10;ge=dat%10;lcd_wcom(0x80+0x40+add);lcd_wdat(table2[shi]);lcd_wdat(table2[ge]);}voidwrite_sfm1(ucharadd,uchardat){ucharshi,ge;shi=dat/10;ge=dat%10;lcd_wcom(0x80+add);lcd_wdat(table2[shi]);lcd_wdat(table2[ge]);}voidwrite_sfm2(ucharadd,uchardat){uchark,ge;ge=dat%10;lcd_wcom(0x80+add);for(k=(ge*3-3);k<(ge*3);k++){lcd_wdat(table3[k]);delay(5);}}voidlcd_init1(void)//显示祝福语{uchari,k=0;PD_ODR=0x11;lcd_wcom(0x80);for(i=0;i<16;i++){lcd_wdat(table4[i]);}lcd_wcom(0x80+0x40);for(k=0;k<16;k++){lcd_wdat(table5[k]);delay(100);PD_ODR=0X18;}}voidnaozhong(ucharhour1,ucharday1,ucharmonth1){if(hour1==00)//判断是否时相等{if(day1==23)//判断日是否相等{if(month1==12)//判断月是否相等{lcd_init1();lcd_wcom(0x01);//清屏lcd_init();PD_ODR=0X00;return;}}}}voidread_shzh(void){u2=Read_ds1302(Read_second);//把读取的数据暂时储存在u2u2=((u2&0x70)>>4)*10+(u2&0x0F);//转十进制的bcd码换成十进制write_sfm(6,u2);u1=Read_ds1302(Read_minute);//分u1=((u1&0xF0)>>4)*10+(u1&0x0F);//转换成十进制write_sfm(3,u1);//显示分u0=Read_ds1302(Read_hour);//时u0=((u0&0xF0)>>4)*10+(u0&0x0F);//转换成十进制write_sfm(0,u0);//显示小时u3=Read_ds1302(Read_week);//周u3=u3&0x0F;//转换成十进制write_sfm2(11,u3);//显示星期n1=Read_ds1302(Read_year);n1=((n1&0xF0)>>4)*10+(n1&0x0F);//转换成十进制write_sfm1(2,n1);//显示年n3=Read_ds1302(Read_day);n3=((n3&0x30)>>4)*10+(n3&0x0F);//转换成十进制write_sfm1(8,n3);//显示日n2=Read_ds1302(Read_month);n2=((n2&0x10)>>4)*10+(n2&0x0F);//转换成十进制write_sfm1(5,n2);//显示月if(u1==0){naozhong(u0,n3,n2);//闹钟子函数}}main(){_asm("sim");delay(20);//延时15ms等待电源电压稳定GPIO_Init();//IO口初始化_asm("NOP");lcd_init();_asm("NOP");delay(5);Init_DS1302();while(1){_asm("rim");delay(5);read_shzh();_asm("NOP");}}实现9系统仿真分析该时钟程序设计思路如下:开始显示初始化开始显示初始化定时器赋初值中断初始化软件计数器初始化开启定时器调用显示、按键子程序图8工作流程第1步:在程序头将设计中的一些IO口进行分配并注释。第2步:初始化程序,对单片机的IO口设置为输入输出等,对1302,1602n的参数进行设置,如设定时钟运行为24小时制;将一些未到时钟设计功能的功能端口关闭等。第3步:开始主程序进行程序扫描,先扫初始化字子程序初始化DS1302和LCD1602,启动时钟芯片进行计时,初始化1602的显示方式,将分配好的时分秒等数字调入到显示子程序中。——>显示子程序通过分配的空间对应口将DS1302时钟芯片的数据显示相应的时分秒,年月日等。——>进入按键扫描,判断按键是否有变动,若有就根据设计程序对相应的按键按入次数而进行实现相应的功能。如进入时间调整,中断进入、退出等。——>最后返回主程序头重新依次扫描。显示过程设有消隐,按键通过软件去斗。第4步:子程序部分。在主程序的调用下依据不同的子程序工能而编写子程序,有多级嵌套。这些子程序包括显示子程序、延时子程序、时间计数子程序、按键处理子程序、调时间子程序等。第5步:电路原理图在ISIS里设计完成,并将系统软件编译成.Hex文件后,下面就可以进行电子时钟的系统虚拟仿真了。在ISIS的原理图中,右键单击AT89C51将其选中,然后单击左键打开AT89C51的EditComponent对话框,如图8所示。在ProgramFile:选项中选择文件111.Hex,单击OK按钮完成仿真设置。点击ISIS下方仿真按钮的运行按钮,系统开始运行,实时显示当前时间。图9是系统运行时的画面。 图9EditComponent对话框图10系统运行时的画面图11系统仿真时的时间显示结论单片机电子时钟系统的设计与仿真中加入Proteus软件之后,实现了硬件软化的目的。通过本文的Proteus软件实现单片机实时时钟电路仿真设计的实例,可以得出将Proteus软件引入单片机课程中进行辅助教学,是教学方法的一种改革,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,具有明显的经济性、可移植性、可推广性。有利于促进课程和教学改革,有利于促进课程和教学改革,有利于培养学生的创新素质和创造能力,更有利于人才的培养。同时Proteus不断完善的功能和强大的仿真能力被越来越多的设计人员所喜爱。在大学生电子设计竞赛活动中也逐步得到了推广。虽然本次设计基本完成,但是本次设计相对于老师给的任务书还是有几点没有完成,该时钟电路没有自备电池,在系统掉电的情况下不能正常的显示实时时间;另外闹铃电路的工作也不是完成的太好,它是通过按键来实现的,而在实际应用中,通过软件实现比较方便。这些功能没有完善主要归咎于自己对于专业知识认识还不够,自己的理论知识扩展得还不够,还有待提高。而且在设计之初,也遇到了好多困难,首先是对于该项软件的不太熟悉,运用起来就不是那么好用。再者就是,对于单片机的软件编程,可能以前运用的少,那么具体用它来实现某一个功能的时候,其实根本就无从下手,然后就是在图书馆和网上找一些关于单片机的资料,然后自己慢慢的看,又不懂的问老师,老师一一给我解答,这不仅使我能够顺利完成本次的项目的设计,同时也使我能够学到很多关于单片机的知识,让我受益匪浅。另外,自己所学的知识面还是太狭隘了,不能够满足实际运用的需要,所以我以后一定要利用空闲时间好好专研自己的专业,多看书、多学习,将自己所学灵活运用到生活实际运用中去。致谢通过了一段时间的努力学习和资料的查找,本次的毕业设计论文终于顺利完成了。在我刚开始做这个毕业设计的时候遇到了不少困难。比如对Proteus软件一无所知,在我的毕业设计老师指导下,我去了图书馆借了相关的书籍回来经过一段时间得学习,终于对Proteus软件有了一些基础得了解。老师以其严谨求实的治学态度、高度的敬业精神、兢兢业业、孜孜以求的工作作风和大胆创新的进取精神对我产生重要影响。在这里也要感谢学校给我这次机会来写本次的毕业设计,因为在本次毕业设计中我学到了很多知识,也对有些知识产生了兴趣,我相信这对我以后的人生道路上会有很大的帮助的。感谢老师在百忙中抽出时间对我的论文进行批阅,我会继续努力学习有关单片机方面的知识,争取进一步的提高。参考文献:[1]张靖武,周灵彬.单片机系统的PROTEUS设计与仿真[M].北京:电子工业出版社,2007.[2]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.[3]刘文秀.单片机应用系统仿真策略的研究[J]。现代电子技术.2005第28期.[4]方怡冰.单片机课程的教学与实验改革[J]。电气电子教学学报.2006.[5]叶挺秀.应用电子学[M].杭州:浙江大学出版社,1994[6]朱承高.电工及电子技术手册[M].北京:高等教育出版社,1990[7]阎石.数字电子技术基础(第三版)[M].北京:高等教育出版社,1989[8]李朝青.单片机原理及接口技术(第三版)[M].北京:北京航空航天大学出版社,2005

毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期:年月日导师签名:日期:年月日指导教师评阅书指导教师评价:一、撰写(设计)过程学生在论文(设计)过程中的治学态度、工作精神□优□良□中□及格□不及格学生掌握专业知识、技能的扎实程度□优□良□中□及格□不及格学生综合运用所学知识和专业技能分析和解决问题的能力□优□良□中□及格□不及格研究方法的科学性;技术线路的可行性;设计方案的合理性□优□良□中□及格□不及格完成毕业论文(设计)期间的出勤情况□优□良□中□及格□不及格二、论文(设计)质量论文(设计)的整体结构是否符合撰写规范?□优□良□中□及格□不及格是否完成指定的论文(设计)任务(包括装订及附件)?□优□良□中□及格□不及格三、论文(设计)水平论文(设计)的理论意义或对解决实际问题的指导意义□优□良□中□及格□不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论