基于单片机的电子秤设计

目 录

摘 要 I
Abstract II
引 言 1
1 系统总体设计方案 4
1.1 设计目标与要求 5
1.2 方案论证与选择 6
2 硬件电路设计 7
2.1 单片机型号选择 7
2.2 显示模块电路设计 8
2.3 传感器模块电路设计 9
2.4 按键模块电路设计 11
2.5 报警模块电路设计 12
2.6 模数转换电路设计 12
3 软件电路设计 15
3.1 软件程序设计 15
3.2 系统程序流程图 15
4 设计产品的安装与调试 22
4.1 安装 22
4.2 调试 23
4.3 误差分析 24
4.4 遇到的问题及解决方法 26
结 论 27
参考文献 28
附录1 原理图 29
附录2 源程序清单 30
致 谢 43

摘 要

电子秤是我们生活中经常用到的一种衡器,是传统衡器的替代产品。它在生产、销售及商品流通领域得到了普遍的应用。但电子秤大多具有数量读取不方便、易被人为作弊、称量工具运行不稳定、精确度不够高、零部件易损坏、体积大、重量高、电能消耗高等缺点,从而给使用带来了诸多不便。因此,有针对性的开发设计一种方便、快捷、稳定、高效的电子秤势在必行。
为了拥有一款便于日常使用的电子秤,本设计设计了以单片微型计算机为核心,利用称重传感器将重力信号转变为电压信号,键盘、液晶显示器作为人机交互接口配合对应的软件组成的电子秤。本系统主控芯片选用STC89C52单片机,以应变片式传感器作为信号采集模块,报警采用声光模式,显示采用液晶显示器,信号转换采用专用模块,从而使系统可以实现称重、金额计算、声光报警电路等功能。
本设计不仅反映了应用单片机最小系统的灵活性,而且实现了电子秤的多功能性。实现了轻便便携、测量误差小、集价格计算和重量测量功能于一体,基本可以满足商业和居民家庭生活中的基本使用需求。

关键词:传感器采集;数模转换; 单片机; 电子秤

Abstract

Electronic scale is a kind of weighing apparatus often used in our life. It is a substitute product of traditional weighing apparatus. It has been widely used in the fields of production, sales and commodity circulation. But the electronic scale mostly has the quantity to read inconvenient, easy to be cheated by the human, the weighing tool operation is not stable, the accuracy is not high enough, the parts are easy to damage, the volume is large, the weight is high, the power consumption is high shortcoming, thus brought many inconvenience to the use. Therefore, targeted development and design of a convenient, fast, stable, efficient electronic balance is imperative.
In order to have a convenient for daily use of electronic balance, the design design of a single chip microcomputer as the core, using a weighing sensor to convert the gravity signal into a voltage signal, keyboard, liquid crystal display as a human-computer interaction interface with the corresponding software components of the electronic balance. The main control chip of the system is STC89C52 microcontroller, and the strain gauge sensor is used as the signal acquisition module. The alarm adopts the sound and light mode, the display adopts the liquid crystal display, and the signal conversion adopts the special module, so that the system can realize the functions of weighing, amount calculation, sound and light alarm circuit and so on.
The design not only reflects the flexibility of the microcontroller minimum system, but also realizes the versatility of the electronic scale. It is portable, small measurement error, price calculation and weight measurement, and can meet the basic needs of business and household life.

Keywords: Sensor acquisition; Digital to analog conversion; Single chip microcomputer; Electronic scale

引 言

人们生活中经常要用到称量重量的情况,此时我们就要用到衡器,电子秤就是衡器中的一种,它用来取代利用杠杆平衡制作的普通衡器。它主要被使用于生产、销售及商品流通领域及我们的日常生活中。与常用的机械式衡具相比,电子秤的优点有测量精准度高、轻便便携、适用范围广、实际使用简单及计算价格方便等,避免了老旧的机械秤的精准度低、操作复杂并且需要人为记录价格等缺点。要设计电子秤,首先要使用应变片式传感器将测量的物体的重量进行采集和变换。将得到的模拟信号放大之后再转换为数字信号。然后将数字信号引入微处理器进行处理和解码才能得到显示,从而给出正确的重量。目前使用的称量工具大都存在着这样或那样的问题,给使用带来困难。例如,有些具有复杂的结构,这会导致成本增加,大多数的操作不可靠、精准度低、容易被破坏的器件很多、安装量大且能耗低、没有保存,这会带来许多有关于操作使用的问题。因此,必须开发出一系列易于使用和可靠的高精度电子秤。
在我国,直到上个世纪40年代后期,称重设备仍是完全机械化的,并在上个世纪40年代开始制造机电组合设备。上个世纪50年代出现了以压力传感器为主导的电子秤,到上个世纪50年代中期,称重设备的制造得以发展是由于电子产品的出现。上个世纪80年代以来,通过研发,消化,吸收和技术改造的引入使我们的国家从传统的机械称重转向了同时拥有微电子,传感器和IT技术的电子秤发展阶段。但是,总的来说,我国的电子秤产品的数量和质量远远不能与工业化国家相提并论。很大一部分的差别是技术不够高级和工艺不够先进、加工仪器和测量设备老化、研发能力弱、各品种产品型号少、故障、可靠性差和稳定性低等。如今,电子称重设备的生产和使用正在取得新的发展[1]。测量方法不断改进,测量结果不断向数字化发展;动态称重技术逐步取代静态称重技术;测量参数不断增加;人们已经把研究的方向转向快速称重和动态称重方面。
电子秤发展基础是由于称重传感器性能的层层突破。在世界的其他国家,如日本、德国等一些国家,在19世纪60年代就生产出了电子秤,其称量精确度已经达到小数点后三位,并在上个世纪70年代中期,大概四分之三的电子秤被制造出来,机械厂已经发展到可以通过机电组合的传感器进行电子重量的转换。欧美一些国家工业电子称重已经基本达到了很高的水平。尤其是检测的精确度和工作的可靠性方面已经在技术上有了很大的突破和提升。关于电子称重方面的传感器,已经在研究电子秤相关产品的应用范围和整体结构以及其技术和功能。例如:(1)美国里维尔(Revere)公司开发了具有两种牵引和压缩功能的称重传感器,可补偿大气压力,用于高达5000d的高精度控制平台;(2) HBM已开发出重量为1至100吨的爆震探测器,由两种不同的耐压材料结构C2A和结构C16A组成,并由耐压材料外壳提供过载保护,其具有的爆震和耐压性能分别符合了欧洲国家标准EN50014和美国标准EB50018d;(3)型号为F6Ox系列产品是由美国斯凯梅公司自主开发的,精度一般为6000d的新一代高称量精度的F6Ox系列不锈钢称重快速过载传感器。该产品适用于潮湿,腐蚀性和高温防水环境;(4)塞特内尔公司自主开发了200型称重快速过载传感器,该称重传感器的特点是使用优质青铜材料作为弹性体材料。它具有固有频率高、线性稳定度好、动态响应快等特点。电子减速机油过载保护装置直接集成在电子平台过载保护装置中,从而有限度地确保了较高的平台称量动态响应速度和较长的传感器使用寿命。组装3至30kg的电子平台称重秤,精度一般为4000d[4]。
电子称重产品发展趋势是向微型化、模块化、集成化和智能化的方向发展。在测量速度、测量准确性、产品稳定性和可靠性方面,它们的技术性能越来越高;功能往往是“智能”功能,可将称量信息进行贮存和控制;应用程序属性倾向于集成和组合。微处理器的出现正在快速的改变着我们的生活,几乎工作在我们生活的所有领域。微处理器控制可以使仪器和设备比使用电子或数字电路功能更强大。使用微处理器设计的电子秤将越来越适应社会的发展和经济的要求。最近几年来,随着电子秤地参与数据分析和过程转换的频率越来越高,现代称重技术和信息系统已成为工艺、存储和运输、预处理、接收和销售领域必不可少的元素。
当今的电子秤具有各种各样的计算和数据处理功能,可以满足大量应用的需求。未来,随着微处理器技术的发展越来越快,电子秤技术将经历翻天覆地的变化。同时,将更高级,更智能的新一代电子秤推向市场,并扩大其使用范围。本设计研究的是一个由微处理器控制的高准确度高智能化的电子秤设计方案。这种高精准度的智能电子秤占用空间小,测量准确度高且使用便捷,它结合了质量测量功能和价格计算功能,适合在商业和家庭生活的诸多方面使用。
由于现在的电子秤普遍存在测量精度低、读取速度慢、体积大、重量高、零部件易损坏、电能消耗高等缺点,所以本设计将从轻便便携、测量误差小、集价格计算和重量测量功能于一体、自动报警等方面来进行研究。

1 系统总体设计方案

精确的电子秤在日常生活中既可以称出去皮后的重量,也可以存储基本产品的单价,只要拥有一样商品的单价,秤就会迅速计算出价格,而且最终也会对所有物品进行合计,并且计算出来的结果非常正确。
在设计系统时,根据要执行的功能,设计电子秤有两种选择:
方案一:由时钟电路、复位电路、数据采集电路、LCD信号显示电路、A/D信号转换电路、单片机以及过载声光报警装置等电路组成。被测物体的重量由应变片将重力转换成电阻的变化,再由电桥将其变成电压信号,此时的电压很小。电压信号被送到信号处理模块中,信号处理模块先对电压信号进行放大,然后将它变成数字信号,再然后将转换的结果传送给单片机,单片机将数字信号转换成显示器所需要的代码使被测物体的重量在显示屏上显示出来。如果需要显示物品价格,我们还可以通过键盘对物品的单价进行设置,以便单片机计算出物品的金额,电路设计有相应的过载声光报警装置,在设备工作异常时报警。其整体设计方案如图1.1所示。

在这里插入图片描述

图1.1 方案一设计思路框图

方案二:由时钟电路、复位电路、数据采集电路、数码管显示电路、单片机以及过载声光报警装置电路等组成。是在系统内部工作电路设计原理的基础,采用了键盘做为人机交互的接口电路,通过键盘设置被称物品的单价从而实现自动计算金额的功能。这种方案,成本低,硬件电路设计简单,并且在系统进行编程的过程中消减了很大一部分的单片机程序的工作量。整体设计方案的硬件框图如图1.2所示。

在这里插入图片描述

图1.2 方案二设计思路框图
方案二采用的数码管设计,可以直接实现基本的数码管称重显示功能,但由于方案二使用了数码管,从而限制测量的精度,方案二需要使用位数较多的数码管显示器才能使其得以很好的实现。但这样显示电路就需要占用较多的单片机接口电路,如果接口数量不能满足要求则需要扩展I/O接口电路,增加成本和工作量。而方案一采用LCD显示器省去了I/O口的设计和运用。同时由于LCD显示的位数较多容易满足输入输出位数的要求,测量精度能够达到要求。另外,方案二在信号处理方面也有些欠缺。而且由于方案一在前端进行显示信号的处理时,多了一个A/D信号转换的措施,能够有效的快速处理后端信号,符合了设计的要求。所以本方案的设计主要选择了方案一。
1.1 设计目标与要求
(1)单价由键盘设置;
(2)称重有去皮功能,能同时显示被称物品的重量、价格和总价;
(3)测量范围和精度满足称重要求,称重范围为0到10kg,称量绝对误差在±0.001kg以下,当称重的重量超过10kg时,蜂鸣器报警,LED亮[13]。
1.2 方案论证与选择
主控制器是电子秤的核心,主控制器必须能够接收来自转换传感器的信号,还要进行键盘扫描,具有计算功能并能通过显示器显示必要的信息,还需要控制报警装置。选择主控制器有两个选项[16]。
方案一:单片机作为主控制器
单片机作为主控制器可以用作特定的控制系统,它工作可靠,操作容易,维护方便,成本较低,所以在小型控制系统中,比较适合以单片机作为主控核心[12]。但是,在大型控制系统中,对控制系统的各个方面的性能要求都很高,而在工作条件较差的情况下,则存在影响系统功能的环境原因[2]。 所以单片机合适用于复杂的大型系统。
方案二:PLC作为主控制器
主控制器也可以选用PLC,它应用范围广、接线简单、适用性较强、编程不易出错、操作方便,可以作为控制网络系统连接,便于安装,方便维护,大部分被使用于精细、快速、稳定和控制点数量多的系统中,但价格偏高。
由于本设计所需求的电子秤不需要精确度很高,且对工作环境简单,但要求控制器及程序被固化。单片机作为控制器能够满足要求,并且价格低,体积小方便携带,所以最终选择了以单片机作为本设计的主控制器。

2 硬件电路设计

电子秤的结构可以大致分为三个主要的部分:数据采集模块、控制器模块和显示模块。其中主要的数据采集传感器模块由对压力过载传感器、预备数字信号进行处理和激活的A/D信号转换三个部分共同组成。经过转换后的预备数字信号被自动传输到相应的控制器模块进行测量信号处理,控制器对该预备数字的测量信号进行相应的处理,激活的预备信号显示控制器模块可以完成对人机间的测量信息采集和交换[5]。同时还在秤上添加了特殊的压力过载和欠载状态警告显示功能。

在这里插入图片描述

图2.1 硬件电路设计框图
2.1 单片机型号选择
方案一:单片机选用STC89C52。作为一种小型单片机被诸多用户使用,特点是低电压和低功耗。微处理器内部集成了Flash存储器为8k字节。STC89C52在以51系列单片机为内核的基础上增加了很多传统的MCS-51单片机不具备的功能。在单片机内部,设有灵活的8位微处理器和在线可编程闪存。 STC89C52单片机受到众多使用者的青睐。STC89C52单片机内部16位定时计数器有3个比MCS-51单片机多了1个T2,更加方便设计者使用。此外,STC89C52设计有省电模式、空闲模式和掉电模式可供用户选择,使STC89C52能耗更低,运行也更安全可靠,即使运行中突然断电,掉电模式也会使运行的数据得以保存而不会丢失。为了的满足不同产品的设计需求,STC89C52的封装形式有PLCC、TQFP和PDIP等三种,使用起来更加方便[7]。
方案二:单片机选用AT89C51。它是一种应用较广的8位单片机。AT89C51的工作电压低、性能高的特性受到诸多使用者的欢迎,其内部带Flash程序存贮器4k字节,芯片内集成了256字节随机存储器,接口部分并行 IO口线有32个,串行接口为全双工一个,具有定时和计数功能最多可以达到16位共有2个,中断系统比较完善,芯片集成了振荡器和时钟电路。AT89C51提供了省电模式、空闲模式和掉电模式等多种运行模式。CPU根据系统运行情况自动改变运行模式,用户也可以通过软件选择单片机的运行模式,省电模式又有多种不同模式供选择,掉电模式下会存贮运行数据防止丢失。
综上所述,STC89C52较AT89C51拥有更大的外部扩展,要求工作电压范围更广,存储空间更大,编程方式更多,所以选择STC89C52。
2.2 显示模块电路设计
方案一:选用FYD12864-0402B液晶显示模块。它是一种具有128×64显示分辨率的点阵液晶数字图形显示液晶组件,该液晶显示模块具有并行和串行两种通讯方式,模块内部具有一级和二级的国标简体中文字库;字库内存有16×8点阵的ASCII字符集128个和16×16点阵的汉字8192个。利用该显示模块作为显示器,可以方便地构成全中文显示界面。该模块可以直接显示4行8列的16×16点阵的中文汉字,也可以用来显示图形。该模块拥有电压低功耗低的性能特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且实际上该液晶显示模块的性能和价格也略低于相同点阵的图形显示液晶模块。
方案二:选用LCD1602液晶显示模块。LCD1602显示模块可同时显示32个字符,分为上下两行。利用液晶的物理特性,用电压控制显示屏幕上各各区域达到显示图形的目的。LCD1602液晶模块通常也被叫作1602字符型的液晶,是一种属于点阵型液晶模块,是用来显示数字、英文字母和常用图形符号等。它的液晶点阵是不连续的,中间有许多用于分割字符的间隔,这些间隔把屏幕分割也若干部分,每个部分是一个5×7或者5×11等点阵字符位可以显示一个字符,这些间隔很好地调节了显示字符的间距,但正是因为这些间隔的存在,它显示的图形变得不连续。
与LCD1602液晶显示器相比,LCD12864液晶显示器的没有尺寸限制,并且也可以用来显示曲线和图形等。另外,LCD12864液晶显示器的功能更加强大,所以本设计选择了方案一。实物如图2.2所示。
在这里插入图片描述

图2.2 FYD12864-0402B液晶显示实物图
在这里插入图片描述

图2.3 显示模块原理图
2.3 传感器模块电路设计
在电子秤中,传感器的选择至关重要。测量的最初数据是由称重传感器产生的,称重传感器的性能直接决定了电子称重设备的性能。称重传感器性能的好坏和优劣或产品质量的水平高低,对整个电子称重传感器和控制系统的安全性起到决定性作用。称重传感器的主要性能指标有准确度、稳定性和产品可靠性三个方面,这三个参数也是选择称重传感器的主要依据。
不同用途的电子称重装置性能指标的要求不同,对称重传感器的各项性能指标的要求也能一概而论。通常在选择电子称重的精度时不要盲目追求高精度,精度以满足测量误差要求为目的,坚持够用的原则。如果电子称重传感器的工作环境温度变化较大,应该正确地选择适当的传感器工作位置温度和范围,以确保电子称重传感器在使用和安装位置的温度变化条件下可以稳定地继续正常工作。
传感器的选择必须考虑以下因素:
(1)外观和尺寸;
(2)有无密封的要求;
(3)精度;
(4)测量范围;
(5)所需参数及所需要的电缆长度。
称重传感器可以按变换原理分类,可分为电阻应变式、电容式、差动变压器式、压电式、压磁式和振频式等多种。
本产品的传感器在设计过程中采用了一种电阻应变式的传感器,一些导体和半导体的电阻值是变化的,当它受到压力或拉力时,它的形状会随着受到的力而改变,电阻值也随着形变而改变。因此,通过测量电阻值的大小,就可以反映受力的大小[10]。
在这里插入图片描述

图2.4 应变式称重传感器的原理图
在这里插入图片描述

图2.5 传感器模块原理图
2.4 按键模块电路设计
键盘是单片机接收指令的主要设备,单片机通过键盘接收用户的指令。键盘的种类很多,常用的是机械式键盘。机械式键盘由多个按键组成,设计者根据所设计的设备的用途设置按键的数量。机械按键的原理就是一个开关,我们按下按键时开关闭合,释放时开关断开。单片机系统接收到信号后由程序实现对应的功能。
针对本软件设计的要求,由于需要输入阿拉伯数字从0到9以便计算商品的价格,数字键占用十个按键,设有"去皮"键一个,“置零"键一个,”."键一个,"微调加"键一个,"微调减"键一个,"总价"键一个。将以上十六个按键组合编制成4×4的正方形矩阵键盘。通过这样的设计可以完成矩阵键盘的工作模式而大大减少了单片机IO口的数量和占用,为其他单片机功能的设计留出了空间[11]。
电子秤输入面板:

1
2
3
去皮

4
5
6
置零

7
8
9
微调减

常用价格
0
.
微调加
在这里插入图片描述

图2.6 矩阵键盘原理图
2.5 报警模块电路设计
本系统设计了报警电路,在超量程或欠量程的情况下发出报警信号,如下图所示。报警电路由发光管和一支蜂鸣器及其驱动电路组成,当系统检测到超量程或欠量程时,单片机输出一个报警信号点亮发光二极管并通过三极管驱动蜂鸣器发出报警音[18]。
在这里插入图片描述

图2.7 报警模块原理图

2.6 模数转换电路设计
HX711是24位A/D转换器模块电路,它是专为称重传感器设计制造的。HX711集成度比其他同类电路更高、测量响应的速度更迅速、具有很强的抗干扰能力。HX711不需要时钟振荡器及直流稳压电源等外围电路,它们都已经集成在了模块内部,有利于产品成本的降低,由于是专用芯片电路设计、安装、软件编程和调试都比通用芯片容易得多,有利于产品整体性能的提升,系统开机时HX711芯片自动复位,省去了软件编程的麻烦[3]。
在这里插入图片描述

图2.8 HX711内部方框图
在这里插入图片描述

图2.9 模数转换模块原理图

管脚说明:

图2.10 SOP-16L封装
表2.1 管脚描述
管脚号 名称 性能 描述
1 VSUP 电源 稳压电路供电电源:2.6 ~ 5.5V
2 BASE 模拟输出 稳压电路控制输出(不用稳压电路时为无连接)
3 AVDD 电源 模拟电源:2.6 ~5.5V
4 VFB 模拟输入 稳压电路控制输入(不用稳压电路时应接地)
5 AGND 地 模拟地
6 VBG 模拟输出 参考电源输出
7 INA- 模拟输入 通道A负输入端
8 INA+ 模拟输入 通道A正输入端
9 INB- 模拟输入 通道B负输入端
10 INB+ 模拟输入 通道B正输入端
11 PD_SCK 数字输入 断电控制(高电平有效)和串口时钟输入
12 DOUT 数字输出 串口数据输出
13 XO 数字输入输出 晶振输入(不用晶振时为无连接)
14 XI 数字输入 外部时钟或晶振输入,0:使用片内振荡器
15 RATE 数字输入 输出数据速率控制,0:10Hz;1:80Hz
16 DVDD 电源 数字电源:2.6 ~5.5V

3 软件电路设计

3.1 软件程序设计
单片机上电后,开始初始化,初始化单片机中每个模块的设置以及A/D转换器的功能设置,初始化后运行主程序[17]。
在嵌入式单片机的过程控制数据处理系统中,主要工作模式有过程控制和数据处理两种工作模式。其中数据处理工作模式包括数据的收集、数字处理、数据的转换和图像显示等数据的处理。过程控制的程序主要是通过根据特定方法计算然后输出信号来控制生产。
在设计软件以执行上述任务时,任务被分解为几个部分,并将每个部分称为模块。所谓的“模块”本质上是一个执行特定功能的相对独立的程序段。模块化的编程语言和方法的优点很多,比如说单个的模块比一个完整的应用程序更易编写及运行和调试、模块之间可以共存等等。
3.2 系统程序流程图
软件由一个主程序和若干个子程序组成,这样能够极大的方便程序编写和程序调试。如图3.1所示。
3.2.1 显示模块流程图
单片机应用系统中通常需要有人机之间的对话功能,其中包括人对设备进行数据录入以及对设备运行过程实现控制等,也包括人从设备读取运行过程和结果的各种。人们获取设备运行的信息的主要器件就是显示器。
液晶显示模块是一种常用的显示设备,它的工作速度很慢,不能跟上CPU的速度,所以在对单片机送显示数据之前必需要确认显示模块是否处于空闲状态,液晶显示器的闲忙状态用忙标志位来表示,低电平,表示闲,可以执行操作。在液晶显示过程中我们要先传送显示地址然后再传送要显示的内容。如图3.2所示。

在这里插入图片描述

图3.1 主程序流程图

在这里插入图片描述

图3.2 显示模块流程图

3.2.2 传感器模块流程图
应变片可以将外力产生应变转换为电阻的变化,为了显示与记录受力的大小,还要将电阻的变化转换为电信号,这种电信号可以是电压或者电流,这种物体量的转换要借助一定的测量电路。本设计采用直流电桥做为测量电路。 目前应变片测量电路产生的电压信号都比较小,无法直接使用,通常需要经过放大电路放大后使用,这里就要用到电流或电压放大器[20]。
我们反应变片式电阻传感器牢固的粘贴到悬臂梁上,当悬臂梁受力发生形状变化时,应变片随之产生形变,其电阻值发生变化。应变片电阻值的变化一般都很小,测量起来比较困难,常用的办法是利用电桥进行测量,然后利用放大电路对测量所得的电压进行放大,最后将放大的信号送给显示器或执行电路[15]。

在这里插入图片描述

图3.3 传感器模块流程图

3.2.3 按键模块流程图
键盘模块主要是监控键盘,调用显示子程序等。
由常用独立式键盘的基本工作原理可以得知,按键是状态是通过按键与单片机连接的I/O的电平变化而进行读取的,在单片机程序设计中,通过程序读取与按键相连的口线的电平值,然后判断此电平的高低来判断这个按键是否被按下。设计者可以根据需要对每个按键进行赋值或赋予指定的功能。

在这里插入图片描述

图3.4 按键模块流程图
3.2.4 报警模块流程图
由于压力传感器所受压力有上限重量,所以所测物品重量必须在一定范围内,超过传感器所能承受的范围以后,警报必须报警。
报警采用了声音信号报警,用一只三极管来驱动蜂鸣器做为报警电路。当系统检测到报警信号时,由单片机的引脚发出低电平的报警信号,蜂鸣器鸣响,发出报警音,当报警解除后对应的单片机引脚变为高电平,蜂鸣器停止鸣响,报警结束。

在这里插入图片描述

图3.5 报警模块流程图
3.2.5 模数转换流程图
模数转换子程序的作用是系统上电并完成设备初始化后,将前级送来的电压信号从模拟信号转换成数字信号,并把得到的数字信号存贮在单片机的数据存贮器中。本设计中的A/D转换器的任务是将放大器的模拟输出信号转换为数字输出量[8]。

在这里插入图片描述

图3.6 模数转换流程图

4 设计产品的安装与调试

4.1 安装
焊接电路板,对电子元件进行误读并粗略检验之后依次焊接。焊接时,必须确保将烙铁的尖端靠在两个焊接部分的接合处,并且将整个焊接部分充分加热。如果将元件焊接在印制板上,则必须确保烙铁头同时加热需要焊接在一起的两个部件,并确保两个焊接面同时均匀加热。当将焊接部分的焊接表面充分预热后,焊丝在与烙铁相反的一侧上与焊接部分接触。焊丝熔化到一定程度后,将焊丝快速向斜上方移走。观察焊接点的焊锡变化,在完成焊接之后,将烙铁快速向斜上方移开完成焊接[6]。焊接时注意加热时间不能太长,整个焊接过程不超过4s,通过大量的练习不断提高自己的焊接能力,提高焊接质量。
所有焊点全部焊接后,观察电路焊接是否有问题,是否有漏焊,焊点是否完整,然后用万用表检测电路,尤其注意电源部分,电压是否正常,并确定是否发生了严重的问题,如短路等。在确认没有问题后,连接电源后观察并调试每一个器件与按键,看是否正常工作,然后逐一测试功能。
在这里插入图片描述

图4.1 实物图1
在这里插入图片描述

图4.2 实物图2
4.2 调试
在软件设计方面利用Keil4,使用C语言完成程序代码设计。作为国外开发的编程软件,Keil4可以实现单片机C语言的有效兼容,使用语言较为广泛,在软件编程时,可按照自身需求确定编程语言,它的功能具有极强的可扩展性,可以进行下载、编译或者编程等操作[9]。
Keil uVision4 IDE是众多单片机设计软件中使用最为广泛的一种,它是基于Windows的开发平台。uVision4是一个集成开发环境,包含一个高效的编译器、一个项目管理器和一个MAKE工具。它在功能强大的运行环境中集成了项目管理,源代码编辑,程序调试等。uVision4支持所有Keil C51工具,包括C编译器、宏汇编器、连接/定位器、目标代码到HEX的转换器。C51美国标准交叉优化编译器C从源代码C生成可重定位的目标文件。A51宏汇编器从8051汇编源代码产生可重定位的目标文件。BL51连接/重定位器组合由C51和A51产生的可重定位的目标文件,生成目标文件。LIB51库管理器将目标文件组合在一起,以生成连接器可以使用的库文件。从OH51目标文件到HEX格式的转换器从绝对目标文件创建Intel HEX格式文件。RTX-51实时操作系统简化了复杂和对时间要求敏感的软件项目[14]。
(1)使用Keil 4软件创建项目:单击菜单栏上的“工程”,输入并保存新项目名称“基于单片机的电子秤设计”,然后器件选择 “STC89C52”。
(2)新建用户源文件:在新建空白文本中编写程序源代码,编码完成保存文件并命名“基于单片机的电子秤设计.c”,完成新文件创建。
(3)程序编译和调试:单击编译按钮,软件将在信息窗口显示提示信息,如果提示信息中有error信息,则须按提示找出错误并改正,直到提示没有错误为止。Keil uVision4软件开发流程图如下图所示。

在这里插入图片描述

在这里插入图片描述

图4.3 调试流程图
4.3 误差分析
便携式电子秤是一种静态称重的电子设备,产生误差的主要因素有三个方面:称重传感器、电子电路和机械承重系统(即秤体)。
(1)应变式称重传感器的误差。应变式传感器是非线性的、其工作特性还存在着不重复性,检测速度上存在滞后等基本特性都使得测量产生误差。由于其周围环境的变化还会引起传感器的零点漂移和系数的改变。所有这些误差制作时,都通过各种的补偿和修正的方法尽量降低,剩余的误差很难再进行处理了,可以将其作为偶然误差进行处理。因此传感器的应变式合成称重误差一般可按下式均方根法进行合成,即由下式均方根法求得:

式中 ——传感器的合成误差;
——传感器的非线性误差;
——传感器的不重复性误差;
——传感器的滞后误差;
——温度变化引起传感器的零点变动误差;
——温度变化引起传感器系数变动误差;
——称重传感器周围环境温度变化的幅度。
(2)高精度的合成数字测量传感器设计仪表和高精度数字传感器设计芯片在数字电子秤合成测量仪器设备设计中的广泛应用,使得数字电子设备的平均合成测量误差在高精度数字电子秤中所相应占的平均合成测量误差值的比例远远要低于传统数字测量传感器。电子设备的合成误差为:

式中 ——仪器的非线性;
——温度变化引起的零点变动;
——温度变化引起的灵敏度变动;
——时间引起的零点漂移;
——时间引起的灵敏度变化;
——电压变化引起的零点漂移;
——电压变动引起的灵敏度变化;
——设备所处环境温度的变化量。
电子秤中,电子设备部分由功率放大器、A/D信号转换器、显示等部分组成,总的合成误差为

式中、、、——为每个仪器的误差。
此外,称重系统是通过导线与电子设备相连的,连接导线过长也会产生误差。因为导线的电阻值会随着温度的变化而发生改变;环境潮湿时导线的电阻也会改变;使用称重传感器的引线还可能会因其内部受到的电磁干扰而产生引起称重传感器的误差等。
(3)载物平台用于放置被测重的物体,并把被称物体的重力传递给应变片。在重力的传递过程中由于机械结构设计方面的问题包括机械构件的摩擦力问题等,物品的重力不可能全部传递到应变片传感器上。另外传递的重力也可能不是垂直作用在应变片的中轴线上,重力也可能和应变片的中轴线存在一定的夹角,这样都将造成检测到的力不是真实的作用力,因些载物平台在检测力的过程中也会产生一定的误差。
载物平台的误差、电源电压波动等所带来的误差都不容易定量计算,各种导线所引起的误差更难准确计算。我们可以通过合理的结构设计,精准的安装操作来减少误差的产生,提高检测的精度[19]。
4.4 遇到的问题及解决方法
(1)液晶显示器上显示的汉字存在代码混乱和字体未对准的问题。 经过研究,发现单个中文单词代表两个字节,因此在源程序中对代码进行了纠正和对齐,不再出现代码混乱和遗漏的情况。重新加载后的字符对齐。
(2)实物完成后显示器亮并显示数字,电子秤上放物品但显示器上显示重量的数字没有变化,经过检查发现是电路板上有个别焊点焊锡不够没有焊接上,经过重新焊接,电子秤可以正常使用。

结 论

本设计使用STC89C52单片机微处理器作为中央控制器,并使用带有高精度HX711称重传感器和FYD12864-0402B液晶显示器的电子秤,还添加了蜂鸣器报警模块对本设计进行了完善。称重精度和工作稳定性基本满足设计的要求,校准方法简单方便,稳定性高,操作容易,成本低。该电子秤综合应用了单片机技术、传感器技术和数字显示技术等,它具有较高的灵敏度和准确度高,液晶显示更加直观,且使用方便。
本设计不仅反映了应用单片机最小系统的灵活性,而且还具有多功能性。本设计在项目方案制定、仪器的选择和软件设计等方面进行了充分的考虑。本设计体现在产品的实用性体积小、重量轻、精度高在称重的同时完成计价功能,可以直接利用商品单价自动计算得出商品的总价,实现了去皮功能,超重使用时会同时发出声音和灯光的报警信号,基本能够满足民用电子秤的使用需求,实现了制作电子秤的意义。

参考文献

[1] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2010
[2] 彭介华.电子技术课程设计指导[M].北京:高等教育出版社,2008
[3] 常健生.检测与转换技术[M].北京:机械工业出版社,2004
[4] 赵广平,孙雯萍,孙建军.电子称重技术现状及发展趋势[J].仪表技术与传感器.2007(07)
[5] 张绪光,刘在娥.电路与模拟电子技术[M].北京:北京大学出版社,2010
[6] 黄智伟.印刷电路板设计技术与实践[M].北京:电子工业出版社,2013
[7] 谢维成.单片机原理与应用及C51程序设计[M].北京:清华大学出版社,2009
[8] 徐晓光.数字逻辑与数字电路[M].北京:机械工业出版社,2008
[9] 郭天祥.51单片机C语言教程[M].北京:电子工业出版社,2009
[10] 王琦.电阻应变式称重传感器的设计[J].木材加工机械,2005(03)
[11] 张力,倪铭.衡器.对电子秤除皮准确度测试、除皮后的称量测试的探讨[J].2018(09)
[12] 凌有铸,刘力.单片机控制的电子秤[J].中国纺织大学学报.1998(05)
[13] 王健.电子秤功能的实现与应用[D].北方工业大学.2011
[14] 嵇道凤,王颖.数字电子秤的设计与仿真[J].电子世界.2013(23)
[15] 秦玉伟. 一种悬臂梁结构的高精度电子秤[J].自动化与仪器仪表,2020(04):97-99
[16] 沈红卫.基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005:30-35
[17] 刘勇.数字电路[M].天津:电子工业出版社,2004:201-209
[18] 赵云,李振,李海枫,马强,刘欢.基于51单片机电子秤重量报警系统[J].软件,2020,41(04):88-92
[19] 程望斌,刘硕卿,王曾盛,何巧巧,叶珊丽,陈茉莉.多功能电子秤的优化设计与实现[J].湖南理工学院学报(自然科学版),2019,32(03):23-25
[20] 江天亮.基于单片机和传感器的电子秤系统教学设计与实现[J].电子测试,2019(10):8-9+15

附录1 原理图

在这里插入图片描述

附录2 源程序清单

主程序:
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
bit bdata flag_key;
#include “main.h”
#include “LCD1602.h”
#include “HX711.h”
#include “keyboard.h”
#include “eeprom52.h”

//#include “wannianli.h”
//#include “yyxp.h”

unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
unsigned long Weight_Maopi_0 = 0;
int qupi=0;
long Weight_Shiwu = 0;
//键盘处理变量
unsigned char keycode;
unsigned char DotPos; //小数点标志及位置

uint GapValue,GapValue1;

unsigned long idata price; //单价,长整型值,单位为分
unsigned long idata danjia[8]={11,22,33,44,100,200,300,400};
unsigned char count_danjia;
unsigned long idata money,total_money; //总价,长整型值,单位为分
//定义标识
volatile bit FlagTest = 0; //定时测试标志,每0.5秒置位,测完清0
volatile bit FlagKeyPress = 0; //有键按下标志,处理完毕清0
//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很更准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
//#define GapValue 349
sbit LED=P3^6;
sbit Buzzer = P2^0;
volatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂

/把数据保存到单片机内部eeprom中/
void write_eeprom()
{
SectorErase(0x2000);
GapValue1=GapValue&0x00ff;
byte_write(0x2000, GapValue1);
GapValue1=(GapValue&0xff00)>>8;
byte_write(0x2001, GapValue1);
byte_write(0x2060, a_a);
}

/*把数据从单片机内部eeprom中读出来/
void read_eeprom()
{
GapValue = byte_read(0x2001);
GapValue = (GapValue<<8)|byte_read(0x2000);
a_a = byte_read(0x2060);
}

/开机自检eeprom初始化***/
void init_eeprom()
{
read_eeprom(); //先读
if(a_a != 1) //新的单片机初始单片机内问eeprom
{
GapValue = 3500;
a_a = 1;
write_eeprom(); //保存数据
}
}

//显示单价,单位为元,四位整数,两位小数
void Display_Price()
{
LCD1602_write_com(0x88);
LCD1602_write_word("单价: ");

LCD1602_write_data(price/100 + 0x30);
LCD1602_write_data(price%100/10 + 0x30);
LCD1602_write_data('.');
LCD1602_write_data(price%10 + 0x30);
LCD1602_write_word("元");

}

//显示重量,单位kg,两位整数,三位小数
void Display_Weight()
{
LCD1602_write_com(0x90);
LCD1602_write_word("重量: ");
LCD1602_write_data(’ ‘);
LCD1602_write_data(Weight_Shiwu/1000 + 0x30);
LCD1602_write_data(’.');
LCD1602_write_data(Weight_Shiwu%1000/100 + 0x30);
LCD1602_write_data(Weight_Shiwu%100/10 + 0x30);
LCD1602_write_data(Weight_Shiwu%10 + 0x30);

LCD1602_write_word("Kg");

}

//显示总价,单位为元,四位整数,两位小数
void Display_Money()
{
// unsigned int i,j;

LCD1602_write_com(0x98); //指针设置
LCD1602_write_word("总价: ");
LCD1602_write_com(0x9f); //指针设置
LCD1602_write_word(“元”);

if (money>=1000)
{
LCD1602_write_com(0x9c);
LCD1602_write_data(’ ‘);
LCD1602_write_data(money/1000 + 0x30);
LCD1602_write_data(money%1000/100 + 0x30);
LCD1602_write_data(money%100/10 + 0x30);
LCD1602_write_data(’.‘);
LCD1602_write_data(money%10 + 0x30);
}
else if (money>=100)
{
LCD1602_write_com(0x9c);
LCD1602_write_data(’ ‘);
LCD1602_write_data(0x20);
LCD1602_write_data(money%1000/100 + 0x30);
LCD1602_write_data(money%100/10 + 0x30);
LCD1602_write_data(’.‘);
LCD1602_write_data(money%10 + 0x30);
}
else if(money>=10)
{
LCD1602_write_com(0x9c);
LCD1602_write_data(’ ');
LCD1602_write_data(0x20);

   LCD1602_write_data(0x20);
   LCD1602_write_data(money%100/10 + 0x30);
   LCD1602_write_data('.');
   LCD1602_write_data(money%10+ 0x30);

}
else
{
LCD1602_write_com(0x9c);
LCD1602_write_data(’ ');
LCD1602_write_data(0x20);

   LCD1602_write_data(0x20);
    
   LCD1602_write_data(0 + 0x30);
   LCD1602_write_data('.');
   LCD1602_write_data(money%10 + 0x30);

}
}

//数据初始化
void Data_Init()
{
price = 0;
DotPos = 0;
}
//定时器0初始化
void Timer0_Init()
{
ET0 = 1; //允许定时器0中断
TMOD = 1; //定时器工作方式选择
TL0 = 0xb0;
TH0 = 0x3c; //定时器赋予初值
TR0 = 1; //启动定时器
}

//定时器0中断
void Timer0_ISR (void) interrupt 1 using 0
{
uchar Counter;
TL0 = 0xb0;
TH0 = 0x3c; //定时器赋予初值

//每0.5秒钟刷新重量
Counter ++;
if (Counter >= 10)
{
   FlagTest = 1;
   Counter = 0;
}

}

//按键响应程序,参数是键值
//返回键值:

void KeyPress(uchar keycode)
{
switch (keycode)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9: //目前在设置整数位,要注意price是整型,存储单位为分
if (DotPos == 0)
{ //最多只能设置到千位
if (price<100)
{
price=price10+keycode10;
}
}//目前在设置小数位
else if (DotPos1) //小数点后第一位
{
price=price+keycode;
DotPos=2;
}
Display_Price();
break;
case 10: //清零键
// speak(41);
if(qupi
0)
qupi=Weight_Shiwu;
else
qupi=0;
Display_Price();
// FlagSetPrice = 0;
DotPos = 0;
break;
case 11: //删除键,按一次删除最右一个数字
price=0;
DotPos=0;
Display_Price();
break;
case 12: //加
if(GapValue<10000)
GapValue++;
// Get_Weight();
break;
case 13: //减
if(GapValue>1)
GapValue–;
// Get_Weight();
break;
case 14: count_danjia++;
if(count_danjia>7)
count_danjia=0;
price = danjia[count_danjia];
Display_Price();
break;
case 15: //小数点按下
DotPos = 1; //小数点后第一位
break;

}
}
//****************************************************
//主函数
//****************************************************
void main()
{

// yyxp_rest=1;
// yyxp_data=1;
init_eeprom(); //开始初始化保存的数据
Init_LCD1602(); //初始化LCD1602
EA = 0;
Data_Init();
Timer0_Init();
//初中始化完成,开断
EA = 1;
// Ds1302Init();
// Get_Maopi();
LCD1602_write_com(0x80); //指针设置
LCD1602_write_word(“欢迎使用电子称 “); //
LCD1602_write_com(0x90); //指针设置
LCD1602_write_word(” 初始化中 “);
LCD1602_write_com(0x88); //指针设置
LCD1602_write_word(” 请稍候。。。”);
Delay_ms(2000);
Get_Maopi();

// Get_Maopi(); //称毛皮重量
// Weight_Shiwu = 9000;
while(1)
{
//每0.5秒称重一次
if (FlagTest1/*&&keynum0*/)
{
Get_Weight();
}
keycode = Getkeyboard();

  //有效键值0-15
  if (keycode<16)
  {
	 KeyPress(keycode);	
	 Buzzer=0;
	 Delay_ms(100);
	 Buzzer=1;
	 while(keycode<16)
	 {
		if(keycode==12||keycode==13)
		{
			Buzzer=0;
			 Delay_ms(10);
			 Buzzer=1;
			 KeyPress(keycode);
			 Get_Weight();
			 flag_key=1;
		}
		keycode = Getkeyboard();
	 }
	 write_eeprom();			   //保存数据
  }
}

}
//****************************************************
//称重
//****************************************************
void Get_Weight()
{
Weight_Shiwu = HX711_Read();
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重
if((int)((float)Weight_Shiwu10/GapValue)<qupi)
qupi=0;
Weight_Shiwu = (int)((float)Weight_Shiwu
10/GapValue)-qupi; //计算实物的实际重量

// Weight_Shiwu = (unsigned int)((float)Weight_Shiwu)-qupi;
if(Weight_Shiwu > 10000||Weight_Shiwu <0) //超重报警
{
Buzzer = !Buzzer;
LED=!LED;
// if(yyxp_busy==1)
// speak(40);
LCD1602_write_com(0x94);
LCD1602_write_word(" -.—");
}
else
{
if(Weight_Shiwu<10000)
LED=0;
else if(Weight_Shiwu>10000)
LED=1;
Buzzer = 1;
// if(Weight_Shiwu>10)
{
Display_Weight();
money = Weight_Shiwu*price/1000; //money单位为分
//显示总金额
Display_Money(); Display_Price();
}
}
}

//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
unsigned char clear;
mm: Weight_Maopi_0 = HX711_Read();
for(clear=0;clear<10;clear++)
{
// Buzzer=1;
LED=1;
Delay_ms(100);
LED=0;
Delay_ms(100);
}
Weight_Maopi = HX711_Read();
if(Weight_Maopi/GapValue!=Weight_Maopi_0/GapValue)
goto mm;
Buzzer=0;
Delay_ms(500);
Buzzer=1;
}

//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
键盘程序:
#include “keyboard.h”
extern bit bdata flag_key;
//按键扫描函数 :
//功能;只扫描一个按键,按键为号小优先
//返回键值:
// 1 2 3 10 //10:清零重量,兼去皮功能
// 4 5 6 11 //11:清除单价
// 7 8 9 12 //12:显示数值偏大调节按键
// 14 0 15 13 //14:无功能(用于扩展)15:小数点 13:显示数值偏小调节按键

unsigned char Getkeyboard(void)
{
unsigned char number = 0;
unsigned char i;
//行输入低电平
ROW1=ROW2=ROW3=ROW4=0;
//如果列输出不全为高,则说明有键按下
if (((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1))&&flag_key1)
{
//输入0111
flag_key=0;
ROW1=0;
ROW2=ROW3=ROW4=1;
for (i=0;i<20;i++);
if (COL1
0) return 1; // 7
else if (COL20) return 2; // 8
else if (COL3
0) return 3; // 9
else if (COL40) return 10; // 10
//输入1011
ROW2=0;
ROW1=ROW3=ROW4=1;
for (i=0;i<20;i++);
if (COL1
0) return 4; //4
else if (COL20) return 5; // 5
else if (COL3
0) return 6; // 6
else if (COL40) return 11; // 11
//输入1101
ROW3=0;
ROW1=ROW2=ROW4=1;
for (i=0;i<20;i++);
if (COL1
0) return 7; //1
else if (COL20) return 8; // 2
else if (COL3
0) return 9; // 3
else if (COL40) return 12; // 12
//输入0111
ROW4=0;
ROW1=ROW2=ROW3=1;
for (i=0;i<20;i++);
if (COL1
0) return 14;
else if (COL20) return 0;
else if (COL3
0) return 15;
else if (COL40) return 13;
//没有检测到列低电平
return 99;
}
else if(COL1
1&&COL21&&COL31&&COL4==1)
flag_key=1;
return 99;
}
显示器程序:
#include “LCD1602.h”

//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void LCD1602_delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
unsigned char Convert(unsigned char In_Date)
{
unsigned char i, Out_Date = 0, temp = 0;
for(i=0; i<8; i++)
{
temp = (In_Date >> i) & 0x01;
Out_Date |= (temp << (7 - i));
}

return Out_Date;

}
//****************************************************
//写指令
//****************************************************
void LCD1602_write_com(unsigned char com)
{
LCD1602_RS = 0;
LCD1602_delay_ms(1);
LCD1602_EN = 1;
LCD1602_PORT = Convert(com);
LCD1602_delay_ms(1);
LCD1602_EN = 0;
}

//****************************************************
//写数据
//****************************************************
void LCD1602_write_data(unsigned char dat)
{
LCD1602_RS = 1;
LCD1602_delay_ms(1);
LCD1602_PORT = Convert(dat);
LCD1602_EN = 1;
LCD1602_delay_ms(1);
LCD1602_EN = 0;
}

//****************************************************
//连续写字符
//****************************************************
void LCD1602_write_word(unsigned char *s)
{
while(*s>0)
{
LCD1602_write_data(*s);
s++;
}
}

void Init_LCD1602()
{
LCD1602_EN = 0;
LCD1602_RW = 0; //设置为写状态
LCD1602_write_com(0x38); //显示模式设定
LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置
LCD1602_write_com(0x06); //写一个字符后指针加一
LCD1602_write_com(0x01); //清屏指令
}
A/D转换程序:

#include “HX711.h”

//****************************************************
//延时函数
//****************************************************
void Delay__hx711_us(void)
{
nop();
nop();
}

//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
while(HX711_DOUT);
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
Delay__hx711_us();
HX711_SCK=0;
return(count);
}

致 谢

在这次毕业设计中,本论文是在谢莹老师和冯雅丽老师的悉心指导下完成的,两位老师认真严谨、渊博负责,对我这次论文的完成起到了很大的帮助,谨此向我的指导老师谢莹老师和冯雅丽老师致以衷心的感谢和崇高的敬意!整个毕业设计的过程都是在两位老师的悉心指导下完成的,从项目建立、资料收集、方案论证、调试、都离不开两位老师的帮助,这些使我受益匪浅、收获颇多。
在四年的大学课程的学习和实践中,我学习了大量的理论与实践知识,专业能力也有了大幅度的提升,使我能够在工作中将所学的理论知识与实践联系到一起,更高的完成本职工作。这些都离不开大写四年间给我上过课的老师们,在此感谢所有智能工程学院的老师,感谢教会了我这么多知识,拓宽了我的知识面,培养了我的功底,对论文的完成功不可没。
最后,衷心地感谢在百忙之中评阅论文和参加答辩的各位老师。
衷心祝愿母校的明天更加美好!

  • 19
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值