毕业设计(论文)基于C51单片机的计算器系统设计.doc

上传人:laozhun 文档编号:2392934 上传时间:2023-02-17 格式:DOC 页数:34 大小:656KB
返回 下载 相关 举报
毕业设计(论文)基于C51单片机的计算器系统设计.doc_第1页
第1页 / 共34页
毕业设计(论文)基于C51单片机的计算器系统设计.doc_第2页
第2页 / 共34页
毕业设计(论文)基于C51单片机的计算器系统设计.doc_第3页
第3页 / 共34页
毕业设计(论文)基于C51单片机的计算器系统设计.doc_第4页
第4页 / 共34页
毕业设计(论文)基于C51单片机的计算器系统设计.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《毕业设计(论文)基于C51单片机的计算器系统设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于C51单片机的计算器系统设计.doc(34页珍藏版)》请在三一办公上搜索。

1、目录引言:41. 设计任务42. 方案论证53电路的硬件设计53.1 系统框图53.2 微处理器的选择53.3 电源模块63.4 AT89C51单片机参数63.5 键盘的设计83.6 复位电路的设计93.7 振荡电路的设计93.8 数码显示及驱动电路94. 电路调试和结论114.1 具体电路系统图114.2 复位电路的测试114.3 振荡电路及端口测试124.4 电源的测试124.5数码显示电路及测试135软件设计部分145.1 软件设计总宽图145.2 程序流程图156本次设计的心得与体会166.1 设计需考虑下列几点166.2 硬件系统稳定工作应考虑的几点问题166.3 软件编程注意事项1

2、76.4 C语言编程与汇编编程的比较187本次课程设计已完成如下功能208结论:21参考文献21附录一:PCB的3D效果:22附录二:总的程序23附录三:元件清单表38致 谢39基于C51单片机的计算器系统设计 专业:电子信息科学与技术引言:随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的两位数计算器。该设计系统是以AT89C51为单片机, P1口作为输入端,外接4

3、X4的键盘,通过键盘扫描来对输入数的控制,在P0口,P2口接了驱动电路。用来保证LED的工作正常。计算器将完成的功能有加,减,乘,除等功能。该系统还设了功能键,开始显示0,按了键后就进入计算状态,再按该键就进入时钟状态。当然还有一些不足之处,本次设计还不能进行小数计算。在做除法运算时也只能计算除数是被除数的整数倍的情况。但是硬件的设计上是可以实现的。比如,设几个功能键,还可以实现时间的调时,频率计,秒表等。1. 设计任务基于AT89C51芯片的应用及端口的扩展,来实现两位数的计算即加,减,乘,除等功能;在硬件的基础上做扩展功能,如时钟显示。2. 方案论证 方案一:用分立元件来做计算器系统,分别

4、用4X4键盘、加法器、移位寄存器、译码器、存储器、4个1位的共阴LED显示管;其中乘法运算是用加法和移位两种操作实现,除法运算可用减法和移位操作来实现。 方案二:采用AT89C51为核心,4x4的键盘,用共阴的四位来显示计算数值,其中数码管的段码驱动电路是选用74LS245,UN2003来做位选。经过对两个方案的比较,本设计运用方案二来实现计算器系统。3电路的硬件设计3.1 系统框图键盘输入驱动芯片数码显示AT89C51 3.1 系统框图3.2 微处理器的选择1控制中心用AT89C51来实现。2驱动是用74LS245 , UN2003来实现。3显示是用共阴的四位数码管来完成。4用7805来做稳

5、压,提供+5V电源(实际是+4.98V),符合设计的要求。3.3 电源模块图3.3电源模块参数设置:变压器选取原则:VI比VO一般高出2-6V;D1-D4为普通整流二极管,D5为发光二极管;C1取1000UF-4700uf的电解电容;C2,C4取0.1-1uf的无极性的电容;C3取100-470uf;此系统的元件参数如上图3.3。在7805的1,3两端可以在就加个二极管可以有效的保护电路,在电流过大时候可以对7805的耐压起到了保护作用一致于烧毁7805芯片。在C1的电容增大时可以提高电路的稳压效应,当然也不是说越大越是好。还的受其使用电路的制约,C2是一个滤波电容可以有效的滤掉高平信号产生的

6、干扰。D5是一个发光的二极管可以在上电是看到电路是不是导通。C3和C4构成了电容的反馈有效的滤低平波和进行保护电路。3.4 AT89C51单片机参数 Vcc正常的运行的电压是5v的电源,Vss 为地端。I/O总线,P0口,P1口,P2口,P3口。AT89C51是MCS-51产品的兼容型,ROM、128字节ROM,32根I/O引线,每根都可以独立的使用。每个的端口包含一个8位的数据锁存和一个输入缓冲器。输出时,数据可以锁存;输入是,数据可以缓冲。作为一般的I/O口使用时,在指令的控制下,可以有三种基本的方式:输入输出和读修改写。在AT89C51用作输入端时,将首先向引脚写“1”而使内部MOS管截

7、止以便引脚处于悬浮状态,从而可获得高阻抗输入。引脚图如下图 图3.4 AT89C51单片机的注意事项1 在把电流输入单片机的过程中我们要做的事前有4步,第一:用万用表测电压是不是在5v+1.5v5v-1.5v之间,因为电压太大会给单片机工作造成硬件的损害。电流要求是(1.5A0.5A)安全电流。第二步:确保电压输入,电流的安全情况下。先断电源,再插89c51芯片测量各个端口电压。第三:在各个端口的电压在调试相关的用电器件达到了规定的数值,然后就可以编程了。第四:要是出现电压为0v的情况我们就要首先查看有没有虚焊的现象。2 在P0口加上拉电阻(10K)目的是提供单片机的内部电压。因为单片机P0口

8、内部是由CMOS管构成的,电压偏低,不能使单片机P0口正常工作。3.5 键盘的设计 图3.5 键盘的设计图是键盘设计,采用AT89C51芯片接口构成4X4的的键盘,P1口的高四位作为输入,P1口的低四位作为输出.如果有键按下,则应输出为低电平,否则输出为高电平,通过这样可以判断按下什么键。在键按下后,要有一定的延时,防止由于键盘的抖动而引起误操作。键盘电路设计说明:1 在安装前首先要确保开关没有什么问题。2看电路有没有短接的现象。3在把开关安装好后要测一下看看有没有虚焊。4在p1口的低四位都加了10k的电阻,把电压拉高的目的。3.6 复位电路的设计 图3.6 复位电路的设计 图中的RC为延时电

9、路,只要RST端出现2个机器周期的高电平就可以使单片机复位。单片机复位后RST端出现底电平。3.7 振荡电路的设计 图3.7振荡电路的设计 单片机芯片内部设有一个反向放大器所构成的振荡器,18脚和19脚分别为振荡电路的输入端和输出端,时钟由内部电路产生,定时器件为石英晶体和电容组成的并联谐振回路,电容C5,C6的取值在530Pf;Y1的取值在1.212M之间选取。3.8 数码显示及驱动电路 如图所示,AT89C51的P0口用于数码管的段选,由74LS245来驱动;P2口用于数码管的位选,由ULN2003来驱动。所用数码管为共阴极 图3.8 数码显示及驱动电路四位数码管,段码端为高电平有效,位码

10、端为低电平有效。在设计驱动电路时,是把驱动分成了两部分,即断码驱动和位驱动。断码驱动电路:芯片从单片机的p0口加上拉(10k)的电阻并且送数据到74LS245芯片。位选择驱动电路:从单片机的p2口加上拉选择(10k)的电阻送数据到头UN2003芯片的低四位。在从低四位送数据到数码管。4. 电路调试和结论4.1 具体电路系统图 图4.1 具体电路系统图 4.2 复位电路的测试经过测试复位后,单片机的1脚电压为0,只是在复位的瞬间出现4.95 V的高电平 ,从而使单片机复位。在测试中,在上电后还会出现不能复位的现象,或者是复位跳变(有时候可以复位有时候不能跳变)。分析情况有电容太小了,或者是电容的

11、保护电阻选择不是很正确,通常电阻4701k而电容是10u-1000u。电容大电阻也要相应的变大。在与单片机连接处还要加一个10k的电阻,电阻接地,使复位工作稳定。4.3 振荡电路及端口测试在电路中,我们用示波器看到晶振不能起振波形,对这样的情况,我们可查看硬件电路,一看:电容(33p104p)是不是有引脚没有接地,二看:是不是存在虚焊。三看:单片机有没有电流输出。四测:把晶振拿下来,再测是不是正常。经过测试单片机4脚电压为3.7V,5脚的电压为2.2V;振荡电路的波形测试为11.0522MHZ的正弦波。复位后的端口除10脚和1脚为低电平0V外,其他脚为高电平4.95V4.4 电源的测试电源通过

12、示波器测试图形如下: 图4.4 电源的测试 电源在调试过程中1在稳压管前面的电容太小,出现电源的输出不是很稳定情况。常在稳压管前面加的电容是有极限的470u1000u左右。2 接通电源以后会出现稳压管很烫的现象,出现的情况可能是输入的电流功率太大,也有可能是硬件的接法存在问题,基于第一种,我们可以用人为的加一个煽热片,保证稳压管的正常工作。第二种可加入一个反向的稳压二级管,不让稳压管烧坏。在稳压管的后面还要加滤波电容和反馈电容。4.5数码显示电路及测试在进行调试过程中我们会发现数码管显示不是很正常,问题如:比较的暗,显示的断码不是很全面以及数码显示时出现闪动的现象等。下面简要地描述一些解决问题

13、的方法。 首先,检查在编写程序没有出现编写错误的前提下,要从单片机的输出口查起,看看输出值跟编写的程序输出值是不是相一致。接下来就要看看各个端口连接处是不是有虚焊的存在。再次,就要用万用表测量电压,电流的输出结果,看看能不能达到可以让数码管正常工作,有击穿的话就应该立即更换。最后,要是数码管的相关的问题还是没有解决,那就要看自己的电路图是不是存在问题,以及电阻选择上的错误。5软件设计部分 5.1 程序流程图 初始化地址参数输出列扫描信号列扫描信号移位读入行信号时钟记时间状态模式键再次按下四列扫描完?返回模式键第一次按下?开始计算器状态读入键值执行运算操作等于操作终止 图5.1程序流程图5.2

14、软件设计总宽图 显示缓冲初始地址LED 显 示开 始读取键值键值转换为显示数判断有键输入? 图5.2 软件设计总宽图 6本次设计的心得与体会6.1 设计需考虑下列几点1.尽可能选择典型电路。2.系统的扩充与外围装置,应充分满足应用系统的要求,并保留一些扩充槽,以便进行第二次开发。3硬件结构应结合应用软件一并考虑。软件有执行的功能尽可能用软件来执行,以便简化硬件结构。但必须注意,用软件执行硬件的功能,其响应时间比直接使用硬件时间长,且占CPU时间。4整个系统器件应尽可能做到性能匹配,例如选用石英振荡频率较高时,应选择存储速度较快的IC,选择CMOS单片机构成低功耗系统时,系统IC都应选择低功耗的

15、IC。5可靠性及抗干扰设计是硬件设计极其重要的部分,包括器件选择、电路版布线、通道隔离等。6单片机微处理器外接电路较多时,必须考虑其驱动能力,驱动能力不足时,系统工作不可靠,解决办法是:增加驱动能力或减小IC功耗,降低总线负载。6.2 硬件系统稳定工作应考虑的几点问题 1.与外界容易产生干扰的输入接点,继电器的输出接点等器件部分,采用光耦隔离,使外界杂散信号无法干扰CPU的运行。2.没有使用的端口引脚应接到一个固定的逻辑电位以免受到外界的静电干扰,导致CPU运行失常而死机。3易受杂散信号干扰处则接一个0.01uF的树脂电容的机体外壳,使杂散信号的尖峰毛刺经此电容到外壳。4每一颗IC的VCC与G

16、ND之间一般接0.01uF到0.1uF的积层电容以使电源的电压波纹及杂散信号有所旁路同时可以抵消电路的电感性,使整个电路有较好的稳定性。5所设计的逻辑门尽量使用高速CMOS型来配合CPU的快速动作要求。硬件设计时尽量使用商品化的设计电路,以减小个人开发时间。6.3 软件编程注意事项1编程时先画流程图,使编程思路更清晰2. 嵌入汇编语言的非主函数必须放在同主函数不同的文件中。放在同一文件中时,会在程序初始化时产生不能跳转至主函数的错误。3. 编程中,间接寻址要使用DPTR、PC、R0、R1 寄存器,写入数据时亦同,且不能写入立即数,而应用寄存器,如A。例子如下:MOV R1, SPMOV A,

17、R1MOV A, #03HMOV R1, A4. 堆栈压入时指针为从低地址到高地址移动,先压入高地址,后压入低地址,堆栈指针所指为空。函数返回后,PC修改为所弹出的地址,由此可通过修改堆栈中的地址,而达成修改函数返回后的运行位置。5.关于MOVX的使用。对于DPTR在程序运行中不能直接赋值,由于没有其他寄存器同为16位,想直接赋值只能用直接数。但间接赋值很方便,把寄存器内容MOV给DPH和DPL赋值就可以了。在MOVX中,P0与P2的值都只是在前半部分跳变一下,后面就不再输出地址了,若想将P2的数值锁存,另需他法。ALE的信号亦同,但需注意,其他命令也会导致ALE的跳变,故不可认为使用MOVX

18、之后,所存器的输出端会一直为P0所输出的低地址。6注意跳转指令的跳转范围,例如JZ跳转范围为256个字节,而AJMP为2KB的跳转范围,当碰到跳转范围不够时,可以想办法搞一个中间跳转。先让JZ跳到某个位置,然后用AJMP去跳到所需要跳的地方。7编程时尽量优化代码。6.4 C语言编程与汇编编程的比较1汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。2C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。缺点是占用资源较多,执行效率没有汇编高

19、。3对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在单片机开发中,还是采用汇编语言比较好。而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控

20、制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。4.深刻的理解了AT89C51的芯片的功能。5.学会用74LS245芯片,UN2003芯片的应用。6能够解决一些在设计过程中的存在问题,包括在软件的设计。7.掌握了设计过程中存在电路问题的分析方法。例如:怎么样测试芯片的好坏,电

21、路在没有电压大于5V或小于5V时是怎么样解决问题,以及怎么样用软件来测试硬件的问题。7本次课程设计已完成如下功能 1. 可以进行两位的数字计算加,减(可以显示负数),乘,除功能。 2. 进行电子时钟计时(误差2ms)。8结论: 本次设计完成对数字的两位计算功能,其中还存在一些不足的地方,在做除法运算时也只能计算除数是被除数的整数倍的情况。在该次设计还添加了电子时钟的显示功能。由于带有4X4的键盘,对功能的扩展是完全可以实现的,只要用软件设定功能键就可以完成。今后电子产品的发展也会顺着多功能应用的趋势。 在设计与实现过程中,遇到了很多的困难。在老师和同学的帮助下,本设计基本上实现了所要求的功能

22、,能满足题目的基本要求。尽量做到了硬件电路简单、稳定。减少了电磁干扰及其它的环境干扰。充分发挥了软件编程的优点,减少了因元件精度不够引起的误差。由于时间有限和我们本身知识水平的限制,我们一致认为本系统还有需要改进和提高的地方。例如,选用精度更高的电子元器件,采用更人性化的显示、控制系统等,使硬件电路部分更加精确稳定,选用更加简便的算法来进一步的完善软件部分。参考文献1余锡存,曹国华.单片机原理及接口技术. 西安电子科技大学出版社,2000。2 阎石.数字电子技术基础(第四版).高等教育出版社,1998。3 童诗白,华成英.模拟电子技术基础(第三版).高等教育出版社.20014朱善君,孙新亚.单

23、片机接口技术与应用.清华大学出版社,2005.5曾一江.单片微机原理与接口技术.科学出版社,2006.6单片机无线数据通信IC原理与应用 黄智伟 北航出版社7单片机微型机原理接口应用徐费民 北京邮电大学出版社附件附录一:PCB的3D效果:图A(1) PCB板三维图图A(2) 元气键分派三维图 图A(4) PCB板附录二:总的程序#include REGX51.H#include intrins.h#define uchar unsigned char#define uint unsigned intuchar code disptab=0xB7,/*0*/0xA0,/*1*/0xD3,/*2*

24、/0xF1,/*3*/0xE4,/*4*/0x75,/*5*/0x77,/*6*/0xA1,/*7*/0xF7,/*8*/0xF5/*9*/;/显示器缓冲区段码 /P10到P13的键驱动码/uchar code drive_code4=0x7f,0xdf,0xbf,0xef; /P1口的键盘译码 uchar code key_yima16=0x77,0xb7,0xd7,0xe7,0x7b,0xbb,0xdb,0xeb,0x7d,0xbd,0xdd,0xed,0x7e,0xbe,0xde,0xee; / 第一操作数 第二操作数/ 一秒到的标志 运算符标志 负号标志 uint second_fla

25、g,op,fuhao=0;/ 时间存储器/操作数存储区 uint data timebuf6=0,0,0,0,9,1,shuju24=0,0,0,0, 0,0,0,0; void mdelay(uint delay)/延时1MS子程序uint s;for(;delay0;delay-)for(s=0;s124;s+); /显示扫描次数*显示数据*位选口初值/void timer0_init()/定时器0初始化子程序EA=0;TR0=0;TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;EA=1;ET0=1;static vo

26、id timer0_work(void) interrupt TF0_VECTOR using 1/定时器0中断子程序TH0=(65536-10000)/256;TL0=(65536-10000)%256;second_flag+;if(second_flag=100)timebuf0+=1;if(timebuf0=10)/分个位为十则清0,分十位加1timebuf0=0;timebuf1+=1;if(timebuf1=6)/分十位为6则清0,时个位加1timebuf1=0;timebuf2+=1;if(timebuf2=10)/十位为4则清0,时十位加1timebuf2=0;timebuf3

27、+;if(timebuf3=6)/时十位为3则清0timebuf3=0;timebuf4+;if(timebuf4=4)/时十位为3则清0timebuf3=0;timebuf5+;if(timebuf5=3)/时十位为3则清0timebuf5=0;second_flag=0; void time_disp(uint time1,uint wei1,uchar first1)/时间显示子程序uint scan_time1=0;P2=first1;if(time1=4)for(;scan_time1time1;scan_time1+) P0=disptabwei1(scan_time1+2);md

28、elay(2);P2=_crol_(P2,1);P0=0x00; /段码置0,消影void key_disp(uint wei,uchar first)/键盘显示子程序static uint scan_time;P2=first;if(fuhao=0)/fuhao=0表示显示的数据是正数if(wei0=0)&(wei1=0)&(wei2=0)&(wei3=0)/显示0P2=0x02;P0=0xb7;else if(wei3=0)&(wei2=0)&(wei1=0)/显示*P2=0x02;P0=disptabwei0;else if(wei3=0for(scan_time=0;scan_time

29、2;scan_time+) P0=disptabweiscan_time;mdelay(3);P2=_crol_(P2,1);P0=0x00; /段码置0,消影else if(wei3=0)/显示*P2=first;for(scan_time=0;scan_time3;scan_time+) P0=disptabweiscan_time;mdelay(3);P2=_crol_(P2,1);P0=0x00; /段码置0,消影 elseP2=first;for(scan_time=0;scan_time4;scan_time+)/显示* P0=disptabweiscan_time;mdelay(

30、3);P2=_crol_(P2,1);P0=0x00; /段码置0,消影else/否则fuhao=1表示显示的数据是正数if(wei0=0)&(wei1=0)&(wei2=0)&(wei3=0)/显示0P2=0x02;P0=0xb7;else if(wei3=0)&(wei2=0)&(wei1=0)/显示*else if(wei3=0)&(wei2=0)/显示*P2=first;for(scan_time=0;scan_time2;scan_time+) P0=disptabweiscan_time;mdelay(3);P2=_crol_(P2,1);P0=0x00; /段码置0,消影mdel

31、ay(3);P0=0x40;mdelay(3);P0=0x00;else if(wei3=0)/显示*P2=first;for(scan_time=0;scan_time3;scan_time+) P0=disptabweiscan_time;mdelay(3);P2=_crol_(P2,1);P0=0x00; /段码置0,消影mdelay(3);P0=0x40;mdelay(3);P0=0x00; elseP2=first;for(scan_time=0;scan_time4;scan_time+)/显示* P0=disptabweiscan_time;mdelay(3);P2=_crol_

32、(P2,1);P0=0x00; /段码置0,消影mdelay(3);P2=_crol_(P2,1);P0=0x40;/mdelay(3);/P0=0x00;uchar key_search(void)/键盘译码数据获取子程序calculate(uint m)/计算器存储子程序uint result,temp0,temp1;temp0=shuju00+shuju01*10+shuju02*100+shuju03*1000;temp1=shuju10+shuju11*10+shuju12*100+shuju13*1000;switch(m)case 1: /加法 result=temp0+temp

33、1;fenli(result);break;case 2:/减法if(temp0temp1)result=temp1-temp0;fuhao=1;elseresult=temp0-temp1;fenli(result);break;case 3:/乘法result=temp1*temp0;fenli(result);break;case 4:/除法result=temp0/temp1;fenli(result);break;void main()/主函授uint key_number,i=0,j,k;/uchar ;timer0_init();while(1)key_disp(shujui,0

34、x02);key_number=gotkey();if(key_number=15)/模式键第一次按下,进入时钟状态time_disp(4,timebuf,0x02);while(gotkey()!=15)time_disp(4,timebuf,0x02);for(j=0;j2;j+) / /模式键第二次按下,清除数据区,置负号位为0,进入计算器状态for(k=0;k=0)&(key_number=10)&(key_number=13)/读入的键是操作键switch(key_number)case 10: op=1;break;/加case 11: op=2;break;/减case 12:

35、op=3;break;/乘case 13: op=4;break;/除i+; /操作次数if(i=2) i=0; else if(key_number=14)/读入的键是等于键calculate(op);/计算op=0;/操作位置0shuju10=shuju11=shuju12=shuju13=0;/第二操作数置0i=0;/操作次数置0 附录三:元件清单表元件名称型 号元件名称型 号芯 片1AT89C5174LS245UN2003有级电容10u100u1000u无级电容0.1u x433p x2电 阻470 x92.2K x11 x1晶 振12M x1芯 片27805 x2数码管四位共阴二 级

36、 管7开 关16个插 槽40 x120 x2排 阻10 k x3LED2插 座一对变压器12v x1致 谢本次毕业设计的完成,首先要感谢我的指导老师宋庆恒老师,感谢他对我毕业设计工作全面细致的安排,感谢他对我毕业设计论文的细心指导和耐心审查。本文是在老师的严格要求和精心指导下完成的,它凝聚着几个月来老师对我的悉心培养和教导所付出的大量心血。从他们身上,我看到了作为学者严谨治学、对科学对社会认真负责的工作及生活态度,使我学会了很多做事做人的道理。这些都将对今后的工作学习和生活产生巨大的影响,起到积极的促进作用。在此,向他们表示衷心地感谢! 另外,要感谢我的同学、学长及室友,他们在这段时间里,给予我大量的支持,为我提供了良好的学习环境,没有他/她们的支持与鼓励,我不可能顺利地完成论文。非常感谢! 最后我还要感谢给我测试和答辩的老师们,感谢你们给我提出的这些宝贵意见,扩展了我的知识面。感谢大家!感谢我学习生活了四年的大学,谢谢她给我学习的机会,教给了我们立足社会的知识,培养了我们成才的能力,告诫了我们失败的教训。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号