![毕业设计-基于51单片机的电子秤设计_第1页](http://file4.renrendoc.com/view/4d74509cfab833173ca07b6f6d681668/4d74509cfab833173ca07b6f6d6816681.gif)
![毕业设计-基于51单片机的电子秤设计_第2页](http://file4.renrendoc.com/view/4d74509cfab833173ca07b6f6d681668/4d74509cfab833173ca07b6f6d6816682.gif)
![毕业设计-基于51单片机的电子秤设计_第3页](http://file4.renrendoc.com/view/4d74509cfab833173ca07b6f6d681668/4d74509cfab833173ca07b6f6d6816683.gif)
![毕业设计-基于51单片机的电子秤设计_第4页](http://file4.renrendoc.com/view/4d74509cfab833173ca07b6f6d681668/4d74509cfab833173ca07b6f6d6816684.gif)
![毕业设计-基于51单片机的电子秤设计_第5页](http://file4.renrendoc.com/view/4d74509cfab833173ca07b6f6d681668/4d74509cfab833173ca07b6f6d6816685.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论1.1课题研究的背景和意义1.1.1研究的背景随着新的计量科学技术在近几年不断的出现,传统机械结构的秤已经逐渐不能满足人们的生活要求而被慢慢淘汰了,比如十几年前常见的磅秤、杆秤,现在已经很少再能见到了。取而代之的则是有着各种形状、操作更加方便,更加人性化,称重更加快速,精准的电子秤。目前电子秤正向着高精度、高稳定性、易于携带的方向发展着,这使得国内外对于高精度,高性能的模拟信号处理器的需求与日俱增。如今,国内外对于电子秤的需求向着小型化、智能化、模块集成化方向发展[1]。如今,电子衡器的技术性能的趋向是高速率、高可靠性、高准确度、高稳定性[2];电子衡器的功能趋向是智能性,对于信息的可控性方向增强;电子衡器的使用性能则是朝着人性化方向发展[3]。1.1.2研究的意义称重技术作为一种重要的测量手段,从古至今一直被人们所重视着,称重技术被普遍应用于社会的各个角落,与我们的日常生活密不可分[4]。目前电子衡器中最常见和常用的一种是电子秤,电子秤由于其结构和使用地点的不同可以分为很多种,电子衡器的技术水平高低直接影响着社会的经济效益。电子秤与传统的机械秤相比。主要有以下优点:(1)电子秤的结构比机械秤简单,体积更小,而且几乎不受安装地点的限制[5]。(2)称重传感器可以做成密封型的,是电子秤不易受到腐蚀,能在更加恶劣的环境下工作。(3)电子秤的称重信号不但可以进行远距离传送,而且可以对数据进行处理,实现自动化称重。(4)传感器对数据的反应速度更快,提高了电子秤的称重速度。(5)由于电子秤没有刀口和刀垫做为支点,所以电子秤的稳定性更加好,减少了使用过程中的磨损,提高了使用寿命。(6)精度比机械秤更高。由于电子秤存在着上述的种种优点,所以电子秤已经成为了当今衡器发展的主流。在许多欧美的先进工业国家里,电子秤已经被普遍的应用在各种领域中,并几乎取代了机械秤。我国在近20年中,电子秤在自动化系统中的运用也编的越来越普遍了,各种电子秤也已经广泛的应用于食品、交通运输、矿山、石油等领域,用于实现自动化的生产(连续称重、自动配料、定值控制),这对产品质量的提高和生产率的提高有着非常重大的帮助[7]。1.2国内外电子秤发展及成果随着新技术的不断发展,电子衡器的技术也在不断的进步着[6]。从80年代以来,电子衡器的技术更新越来越快,几乎每年都有新电子称重技术和新的称重产品出现。平均每5年旧一代的称重设备就要被新的所淘汰,新的功能、新的种类都使电子衡器在各种领域不断的发展,变得越来越重要。尤其是在动态称重领域中,出现了许多新的理论和技术,比如迷糊理论应用、动态系统理论分析法等。近几年新的称重传感器也不断的出现,电子秤不再是全部使用电阻应变式传感器了,大量程的电子秤更多的开始使用电容式的称重传感器,而小量程高精度的电子秤则开始使用了音叉振弦式的传感器,电磁力传感器也开始广泛的使用于电子天平中了。日本的新光电子株式会社和大和制衡公司已经开始大规模在电子秤生产中使用振弦式的传感器。但是,由于电阻应变式传感器的技术比较成熟,所以电阻应变式的传感器仍然是当前电子秤的主流传感器。电阻应变式传感器在近几年也有着不小的发展,美国托利都公司推出的新一代电阻应变式传感器已经具有自动补偿和数据传输等功能[7]。我国在自动衡器方面的技术水平已经和国际相差不大,但在产品的工业设计、工艺水平和标准化方面和国际的差距还是较大。我们应该对于如何面对世贸组织的要求与国际接轨方面引起足够的重视。我国的传感器制造发展较快,但是在制造用的辅助材料方面国产化较差,电子衡器的发展很受这些因素的影响,所以应该加快材料的国产化。同时,由于使用于复杂环境中(易燃易爆、超低温、超高温)的电子衡器用户量大量增长,我国在这方面也应该加快发展[8]。电子衡器有以下几个方面的发展趋势:(1)普遍采用微处理器和专用集成器件,小体积,低功耗,低成本,易形成工业化规模化生产。(2)称重传感器自动贴片、溅射工艺应用,向电子化自动补偿方向发展。(3)带计量检定标记的电子衡器正在兴起,使电子衡器的可靠性越来越高。(4)自动衡器将成为衡器市场的重要组成部分。(5)在显示技术方面为用户提供数据和图像显示,CRT,LCD屏幕显示越来越普及。称重传感器的稳定性、准确度和环境适应性不断的增强而价格却在不断地下降[8]。微电子技术的不断发展使得电子秤的数据处理能力不断增强,同时具有自适应和自诊断功能的电子秤也已问世。在法制计量的管理上,由于新技术的不断进步使得制造商、立法者和用户之间越来越需要相互合作和配合。1.3本论文的研究内容及结构安排本设计实现的方法是利用应变式电阻压力传感器在受到外力作用时产生差动信号,然后把差动信号通过处理(放大、A/D转换)后,传入单片机对其进行控制,单片机把数字信号再转换回实际重量后控制液晶显示屏进行显示重量,如果有设置单价则计算出总价并显示,从而完成整个称重过程。按照电子秤设计的基本要求,本设计的电子秤系统结构可分为:数据采集、单片机控制、人机交互(显示和键盘)模块、模-数转换构成,模拟信号放大和电阻应变式压力传感器组成了数据采集模块。AT89C52单片机的电路及其外围电路组成控制模块。LCD1602显示和4X4键盘组成使用者与电子秤交互模块。单片机控制模块完成对传感器采集回来的信号处理,并且驱动LCD1602显示模块和4X4键盘模块实现人机交互功能。在拓展功能设计上,本电子秤设计增加了超过10KG报警和去皮、计价等功能。本论文各个章节分别介绍了研究意义、总体方案选型、系统硬件设计、系统软件设计和实际调试,并在最后对本次设计的过程和结果进行了总结,指出了设计过程中的不足和改进方向。2系统方案设计2.1系统总体设计方案比较与论证对于电子秤的硬件结构,我有三种设计方案,下面是三种方案的对比。方案一:使用LED数码管作为显示模块,显示物体的称重重量。配合称重模块和自带模数转换的单片机实现电子秤的功能。优点:硬件部分简单,电路上只有输入和输出关系,显示简洁。大大减少了编程量。缺点:只能简单的显示重量,用户不能输入信息,无法根据实际情况调整控制参数。而且LED数码管由于显示的位数限制,不能完整的显示单价,总价等。系统过于简单,限制了外部拓展。电子秤功能过于单一不能满足设计要求。方案二:使用LED数码管作为数据输出显示模块,增加4X4矩阵键盘用于设置单价。优点:增加了键盘输入人机交互,使得用户可以输入物品单价,从而实现计价的功能。缺点:由于数码管的显示位数的局限性,导致只能显示单价和总价。而且如果使用普通的四位数码管的话,显示物体重量的精度也会受到显示位数的限制,所以如果想要显示的精确就必须使用较多的数码管。在电路设计时就需要增加更多的I/O接口,使接线变得复杂不美观。方案三:使用信号放大和转换处理前端信号,同时配合使用LCD1602液晶屏作为显示模块和键盘输入模块。通过压力传感器产生电压信号,经放大电路把信号放大后输入A/D转换芯片进行数据转换,再将得到的数字信号送至单片机进行处理并送入液晶显示。优点:不仅满足了设计的要求,而且能够把单价,总价,重量显示在显示屏上,极大的增强了人机交互的能力。通过信号处理芯片把信号放大、转换后送入单片机,由单片机对测量的信号进行处理并根据相应的公式转换显示出被测物体的重量。采用单片机对采集的数据稍加处理,能通过软件在一定程度上弥补与调试硬件所无法避免的数据抖动,使最终所测得的数据更可靠、参考性更强,而且单片机的价钱也不算昂贵。缺点:电路较为复杂,给系统设计带来一定难度。图2.1LCD显示的方案鉴于本设计要求和成本计算,在设计时选择方案三。2.2硬件的方案设计与选型2.2.1传感器传感器(英文名称:transducer/sensor)是一种用于检测的装置,检测被测信息将其转换成电信号,或者根据一定的规则,将信息转换成别的形式的信息,以便进行远距离的传输、处理、存储、显示和控制。实现自动检测和自动控制的第一步是传感器。压力传感器是电子秤中最主要的一个元器件。因为它关乎着电子秤的量程、精度等性能。市场上使用和出售的电子秤主要使用的压力传感器有电容式、电阻应变式和压电式压力传感器等。在称重传感器的选型时应该充分考虑其精度、灵敏度、稳定性、安全等级、安装环境是不是满足设计的要求。再在其中选择最适合设计要求的型号。以下是三种称重传感器的比较:(1)电容式压力传感器是把金属薄膜和一个固定的电极形成一个类似电容的结构,当承受重量时,金属弹性原件将发生微小的位移,从而引起电容内部的电容量的变化,用外部测量电路得到变化量从而求得重量。这种传感器的精度和灵敏度高但其寿命一般只有几年,而且不稳定,容易受到外界非人为因素的干扰。(2)压电式压力传感器是利用正压电效应制成的,当内部晶体受到压力的时候,内部将产生正、负电荷的相对位移,使晶体的两端生成不同极性(正级、负极)的电荷,其密集程度与测量的重量相对应,从而进行测量。这种传感器不但稳定性好而且精度和灵敏度都很高,但是它的缺点是量程较小,不能用于大吨位的测量,一般使用于医疗器械上。(3)电阻应变式压力传感器的原理是粘有电阻应变片的弹性元件(一般为金属)受到重物或者外力而发生微小形变时导致电阻值发生变化,从而用于测量重力。这种传感器的稳定性非常好,可以在比较差的条件中使用,而且其精度和准确度也不低[9-10]。基于精度、成本等要求,我最终选择了CZL-A10KG的电阻应变式压力传感器。表2.1传感器技术参数
额定载荷(kg)10kg
精度等级C2绝缘电阻(MΩ)
≥5000(100VDC)综合误差(%F.S)0.02激励电压(V)
4~12v(DC)
灵敏度(mv/v)
2±0.01温度补偿范围(℃
)
-10~+40
非线性(%F.S)
0.03使用温度范围(℃)-35~+65滞后(%F.S)
0.03零点温度影响(%F.S/10℃)
0.03重复性(%F.S)0.01灵敏度温度影响(%F.S/10℃)
0.02蠕变(%F.S/30min)
0.02安全过载范围(%F.S)
120零点输出(%F.S)
±2极限过载范围(%F.S)
150输入阻抗(Ω)
405±5防护等级IP65输出阻抗(Ω)350±5电缆线(屏蔽电缆线)φ3,0.42m根据上表得出CZL-A10KG电阻应变式传感器的精度为0.02%*10KG=2g。由于使用的是4.5V供电电压,所以满量程输出电压=4.5V*2mv/v=9mv。也就是当称重重量为0-10KG时,对应的输出电压为0-9mv,是一种线性的对应关系。电阻应变式压力传感器是由一块贴有电阻应变片的金属弹性块和电线构成,其内部使用的一般是惠更斯电桥[11]。当收到重物给予的压力时,金属弹性块就会带动电阻应变片发生微小形变,导致电阻的阻值发生变化,使电桥失去平衡,产生差动信号,供单片机控制电路处理[12]。当垂直于传感器的压力P把金属弹性元件向下压时,金属块将发生微小形变,使得贴在上面的电阻应变片R1、R3受到压力弯曲拉伸,阻值增加;R2、R4被压缩,阻值减小.从而使电桥失去平衡,产生差动电压信号,电压信号与作用于传感器上的P的大小成正比,将重物的压力转换成相应的电信号输出,供单片机进行处理。其工作原理图如下图所示:图2.2压力传感器工作原理2.2.2放大器和A/D转换由于传感器输出的电压很小一般只有几毫伏。即使使通过电桥电路转换后的信号还是不够被单片机控制。所以一般都需要放大模块来放大信号和对信号进行模-数转换,转换成数字信息送入运算器,在控制器的控制下,对数据进行基本运算和逻辑判断。方案一:使用差分比例运放电路使用三极管搭建一个差分比例运放电路,对微小的电压信号进行放大。并需要在后面加上一个A/D转换模块,把放大后的模拟信号转变成数字型号,送入单片机控制。一般的运放放大效果不是很好,而且电路设计较为复杂。图2.3差分比例运算电路方案二:使用HX711A/D转换模块对信号进行放大和转换HX711是一款24位的A/D转换器芯片。但是HX711比一般的A/D转换模块多了稳压电源和放大电路,集成度更高,抗外界干扰的能力更强,使得外围的电路减少了很多,在很大程度上提高了电路的稳定性,同时减轻了设计和焊接电路的难度,系统板上无需为传感器提供额外的电源,使整块电路板线路更加简洁,美观。HX711与AT89C52单片机的接线也比较简单,可以使用IO口驱动控制信号,不需要再对内部的寄存器进行编程,使得程序部分更加简洁易编写。HX711A/D转换模块特点:(1)芯片内置放大器,可选放大倍数为32倍,64倍和128倍(2)芯片内部提供4.5V稳压电源供外部模块使用(3)上电自动复位电路(4)简单的数字控制和串口通讯(5)可选择10Hz或80Hz的输出数据速率(6)同步抑制50Hz和60Hz的电源干扰(7)典型工作电流:<1.6mA,断电电流:<1µA(8)芯片工作电压范围:2.6~5.5V(9)芯片工作温度范围:-40~+85℃在程序中选用了128的放大倍数,当输出电压为满量程电压9MV时,放大后的电压为1152mv,经过AD转换后输出的24bit数字值最大为1152mv*2^24/4.5v≈4294966。2.2.3单片机的选型在选择单片机型号时,以下几个因素是选择的关键:(1)货源是否充足系统设计人员只能在市场上提供了的微控制器的选择,特别在大批量的生产中,所选择的单片机型号应该有着大量、稳定的货源。(2)单片性能是否符合设计应根据该系统和各种芯片功能要求,选择系统规范的最易实现的型号,并最可能的实现高性能。MCU的特性包括硬件资源,速度,可靠性,指令功能,尺寸和包装等。应该选择能满足设计要求的单片机型号。(3)研发时间在开发时间较为紧张,任务繁重的情况下。选单片机型号时,应该注意选择的单片机型号是否熟悉,是否能马上着手开发。同时,开发工具的好坏和熟悉程度也将在极大程度上决定研发时间的长短。(4)成本在开发经费不是很充足的情况下应该考虑单片机的价格。在能满足设计要求的基础上选择成本较低的型号。影响开发成本的除了微控制器的价格,同时还包括硬件和软件设计的工作量,以及开发工具的价格。目前单片机的主要产品有:Intel的8051系列、Motorola的M68HC系列、Philips的80C51系列、Atmel公司的AT90系列、台湾义隆公司EM78系列、美国Microchip公司的PIC系列、Ubicom公司的Scenix、日本爱普生科技公司的Epson、美国国家半导体公司的NSCOP8、台湾Winbond公司的W78系列等。由于MCS-51系列单片机具有体积小、可靠性强、功能齐全、性价比高、开发应用方便等特点,所以MCS-51系列单片机为目前主流产品[13-14]。在众多的单片机中。我选择了ATMEL公司开发的AT89C52单片机。首先是因为在大三上学期的时候我们学过MCS-51单片机这一门必修课。我对于51单片机的各I/O口的作用和C语言编程较为熟悉。而AT89C52单片机和51单片机的指令、管脚5完全兼容,更加容易上手,大大减少了开发时间。而且AT89C52单片机的市场货源充足,各种参考资料也很多。同时,AT89C52单片机完全满足电子秤设计的所需的性能要求。2.2.4显示模块选型在显示器的选择上我有2种选择方案。方案一LED显示LED是通过内部电路控制发光二极管,显示包括:数字、字母、图形在内的各种信息。LED显示器的结构:LED数码管内部是由发光二极管排列而成。可以显示数字0到9。市场上有2中LED,一种是共阳极,另一种是共阴极,这两种LED在发光上无区别,共阴极LED显示段的阴极都接GND,用阳极驱动;共阳极的正好相反,所有显示段的阳极都是连在一起的,接VCC,用阴极来驱动。在设计时可以使用多位的LED显示器。X位的LED显示器就是由X根位选线和8*X根段选线组成。根据设计要求选用不同位数的LED显示器。LED显示器有动态和静态显示两种显示的方式。电子秤需要使用动态的显示方式。在多位LED显示时,为了使电路更加简单同时降低成本,将所有位的段选线都由一个8位I/O口控制[16]。图2.4LED数码管接线方式方案二LCD显示 LCD液晶显示器(LiquidCrystalDisplay)。通过通电来控制晶体分子改变方向,将光线折射到玻璃片上产生图像。LCD的显示效果比LED要好,但价格较贵。在日常生活中,液晶显示屏已经应用与各种电器产品中。比如电视机,电子表,遥控器,电压表等等。主要显示的是数字,汉字和图形等。在单片机的人机交互中,一般使用的是发光二极管、数码管或者LCD。发光二极管和LED数码管由于其软硬件都比较简单,所以都是常用的显示模块。在电子秤设计中使用LCD显示器作为信息输出模块有以下如下优点:显示图像质量高:LCD显示器显示的图像不会闪烁。接线简单:LCD显示器是数字式的,只有8个I/O口,与单片机的接口更加简单。(3)体积小。(4)功耗低。由于电子秤设计的显示模块需要显示多位数字和字母,如果采用数码管显示的话将会占用多个单片机I/O口,使得电路变得更为复杂不美观。而且本次设计不需要显示汉字和图画,只需要显示字母和数字,所以选1602LCD符合全部条件,能够被使用。2.2.5键盘输入键盘输入是人机交互界面中重要的组成部分,按键电路的主要功能是想单片机输入数据、传送指令。在本次电子秤设计中,主要使用按键来对计价、去皮、清零等功能的设置。本次设计使用4X4矩阵薄膜键盘,这种键盘的价格低,性能稳定,可以使用程序消除其结构上的不稳定性,性价比高。图2.54X4键盘2.3具体实施方案简介根据上文的元器件选型,电子秤设计的硬件部分我采用了AT89C52单片机作为主控制芯片,由于程序量不是很大,所以52单片机能够完成计算工作。在选择传感器上,我考虑到任务要求的称重精度和量程,选用了CZL-A的10KG电阻应变式称重传感器。而信号放大和模-数转换部分我则选用了HX711A/D转换模块,它能同时完成把模拟信号放大和转换为数字信号的工作。人机交互模块我则选用了LCD1602的液晶屏用于数据的显示,因为本次设计的显示只需要显示字母和数字,所以LCD1602完全能够胜任。键盘部分则使用了4X4的薄膜键盘,用于用户对数据的输入。整体实现的方法是,由称重传感器接受重量产生形变,导致电桥失去平衡,从而产生微小的差动电压,差动电压通过HX711模块放大和A/D转换后输入52单片机,由52单片机对数据进行处理或者发送到显示屏进行显示,如果用户有设置单价则计算并显示出总价,从而完成电子秤称重并显示的整个过程。3系统硬件设计根据设计要求以及系统所需要实现的功能,在设计系统时可以分成以下几个部分:称重传感器,信号放大A/D转换,单片机主控制,稳压电源,4X4矩阵键盘,LCD1602液晶显示。3.1基于51单片机的主控电路3.1.1硬件框图图3.1硬件框图当压力传感器收到不同重量的压力后,会产生不同大小的微弱电压信号。这个电压信号经过HX711模块的放大128倍和转换为数字信号后被送入单片机,进行计算和处理后再在液晶屏上被显示。电源系统则是负责给各模块(51单片机,HX711、传感器)供电。4x4的矩阵薄膜键盘主要用来让用户输入单价,最后计算出总价和实现去皮等功能。3.1.2AT89C51简介芯片功能介绍及设计:AT89C51是一款最常用的8位微处理器,俗称单片机(MCU)[17]。它内部有4K字节的可编程存储器和32个I/O管脚供外部拓展使用。3.1.3引脚说明AT89C52芯片图如下:图3.2AT89C52的引脚图VCC:供电电压。
GND:接地。
P0口:P0口可以作为通用IO口使用或者作为低8位地址/数据复用总线使用。P1口:P1口除了能当做通用IO口使用外还可配置成定时器或者计数器的外部技术输入断。
P2口:P2口功能一是作为通用IO口使用,二是作为高8位的地址总线口使用,还可以用作对Flash内存进行编程和校验时接收高位地址。
P3口:P3口是一个有很多用途的口,也是一个准双向的口。除了作为IO口使用外,还有下面所列出来的功能[15]。P3.0
RXD(串行输入口)P3.1
TXD(串行输出口)P3.2
/INT0(外部中断0)P3.3
/INT1(外部中断1)P3.4
T0(记时器0外部输入)P3.5
T1(记时器1外部输入)P3.6
/WR(外部数据存储器写选通)P3.7
/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间
ALE/PROG:地址锁存信号,ALE在高电平期间,P0口上出现地址信息,在ALE低电平期间,P0口上发出指令和数据。/PSEN:片外程序存储器读选通。/PSEN为低电平的时候有效,51单片机读取片外程序储存器。
/EA/VPP:内部和外部程序存储器选择信号。XTAL1:芯片内部振荡电路(单机反向放大器)输入端XTAL2:芯片内部振荡电路(单机反向放大器)输出端[18]。3.2A/D转换,放大电路3.2.1HX711模块简介HX711是一款24位的A/D转换器芯片。但是HX711比一般的A/D转换模块多了稳压电源和放大电路,集成度更高,抗外界干扰的能力更强,使得外围的电路减少了很多,在很大程度上提高了电路的稳定性,同时减轻了设计和焊接电路的难度,系统板上无需为传感器提供额外的电源,使整块电路板线路更加简洁,美观。HX711与AT89C52单片机的接线也比较简单,可以使用IO口驱动控制信号,不需要再对内部的寄存器进行编程,使得程序部分更加简洁易编写。HX711A/D转换模块特点:(1)芯片内置放大器,可选放大倍数为32倍,64倍和128倍(2)芯片内部提供4.5V稳压电源供外部模块使用(3)上电自动复位电路(4)简单的数字控制和串口通讯(5)可选择10Hz或80Hz的输出数据速率(6)同步抑制50Hz和60Hz的电源干扰(7)典型工作电流:<1.6mA,断电电流:<1µA(8)芯片工作电压范围:2.6~5.5V(9)芯片工作温度范围:-40~+85℃3.3报警电路采用发光二极管和蜂鸣器进行报警。蜂鸣器和发光二极管的一端接在GND上,另一端接在三极管的C极上,单片机的P2.0管脚和三极管的B极通过一个与门来构成回路,当P2.0脚为低电平时,三极管导通,发光二极管和蜂鸣器通电,进行报警。图3.3报警电路3.4显示电路LCD1602液晶模块的引脚连线如图。其中,第1、2脚为液晶的驱动电源;液晶的控制口RS、RW和使能端EN分别接52单片机的P2.5、P2.6、P2.7,用于对状态的输入,数据口接在单片机的P0.0-P0.7口,用于传输数据。图3.4LCD1602接线图4系统软件设计4.1系统软件程序组成电子秤的软件设计是整个设计中至关重要的一部分,软件要实现的功能是配合硬件完成整个电子秤功能的实现。软件设计的步骤基本为以下三点:(1)分析电子秤系统设计的任务要求,确定所需算法。(2)根据算法画出系统流程图:画出程序的流程图可以把算法和程序具体化、形象化,使编写程序更加容易上手。(3)编写主程序和各个子程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。(4)软件调试:把编好的程序烧入单片机,运行整个系统。检测结果是不是符合任务要求。把程序结构化,减少复杂转移语句的使用,能使程序更加具有逻辑性且顺序与执行流程保持一致,减少逻辑错误,使程序易读易理解,易于调试修改。根据系统的控制任务,本系统的软件设计主要由主程序、初始化程序、键盘子程序、AD转换子程序、LCD1602子程序和时钟中断程序等组成。本设计使用的编程软件是keilUV4,Keil软件是一款专门为51系列的单片机的C语言编程而开发的软件,C语言在编程上比汇编更加容易并且更加有逻辑性。Keil软件有着非常丰富的函数库和功能强大的调试工具,非常的易学易用。当编完程序后能生成(.hex)格式的文件,之后只要使用单片机的烧录软件将HEX文件烧入单片机,便可以执行[19]。4.2主程序流程图主程序的功能是调用子程序和对系统进行初始化。本设计主程序中使用了定时器,并调用各种子程序来实现电子秤每半秒进行一次称重的功能,主程序流程图如下图所示:图4.1主程序流程图4.3子程序流程4.3.1时钟中断程序流程初始化定时器子程序选择工作方式为16位定时器,赋予初值后开始累加,到达0.5S后检测有无称重标志。图4.2时钟中断程序流程图时钟中断部分子程序://定时器0初始化voidTimer0_Init(){ ET0=1;//允许定时器0中断 TMOD=1;//定时器工作方式选择 TL0=0x06; TH0=0xf8;//定时器赋予初值 TR0=1;//启动定时器}//定时器0中断voidTimer0_ISR(void)interrupt1using0{ TL0=0x06; TH0=0xf8;//定时器赋予初值 //每0.5秒钟刷新重量Counter++;if(Counter>=200){FlagTest=1; Counter=0;}}4.3.2键盘扫描程序流程键盘扫描程序开始先把行全置0,扫描判断有没有列为低电平,如果有某列为低电平则进行列扫描,先把第一行全部置为低电平,其他行置为高电平,判断第一行有没有列为低电平,如果有则得到键值,没有则把第二行置低电平,其他行置高电平,直到取得键值或者扫描的没有任何一列为低电平并返回进行下一次扫描。图4.3键盘扫描流程图表4.14x4键盘各个键的功能图7(数字7)8(数字8)9(数字9)10(清除单价和重量)4(数字4)5(数字5)6(数字6)11(清除单价最后一位)1(数字4)2(数字2)3(数字3)12(去皮)14(无功能)0(数字0)15(小数点)13(确定)4.3.3LCD1602显示流程重物的转换后AD值传入单片机,单片机通过主程序检测是否超过设定的10kg量程,若超过则蜂鸣器响,红灯亮进行报警并返回。若没超过10kg设定量程则显示重量,并且进入下一段程序检测用户有无设置单价,若有则计算并在LCD1602显示总价,若无则返回主程序并等待下一次检测。图4.4LCD1602显示流程图5调试此次硬件的焊接是用万用板手工焊接,软件编程及调试是用keil软件进行的,硬件和程序调试步骤如下:5.1硬件调试硬件电路设计原理图完成以后,检查无误后,就可以根据原理图的布局来进行元器件的焊接工作了。在电路板上根据先前设计好的元器件位置将元器件插入,然后再仔细的完成焊接工作。完成电路板的焊接后,首先不要急着对电路板上电,而是应该检查电路焊接的好坏,用万用表检查焊接的电路是不是有短路或者断路。然后把检查稳定的电压源加入到电路板,先仔细观察下,有没有电容等出现爆炸的情况。若没有,检查AT89c52、HX711这几个主要芯片有没有出现过热的情况,若有则表明芯片被烧坏,应该及时断开电源。同时,还应该检查LCD1602显示器背景灯有没有亮的情况。用万用表的电压档检查各个电源线路电压是否在正常范围之内,比如5V供电处,HX711供电。完成以上步骤后,如果没有发现异常情况,则表明硬件部分是好的。接下来主要的是软件调试以及数据的检测工作。5.2软件调试在本次设计中,软件的修改以及调试的工作是很重要的一个环节。因本设计未使用仿真,所以所有的调试过程都由不断的烧录程序来完成,过程比较繁琐,但一步一个脚印,较为扎实可靠。对于单片机的程序编写,主要是利用KeiluVision4开发工具来实现的,可以使用该软件来编译C程序代码,汇编源程序,建立新项目工程newuVisionproject,使用C语言进行编程,完成后连接和重定位目标文件和库文件,创建HEX文件以及调试目标程序。首先要掌握对LCD1602显示屏的控制,然后从单片机中读取重量到屏幕上。利用KeiluVision4生成HEX文件后,将该文件烧录到单片机中,观察其是否显示我们所需要的时间信息。完成后,在程序中添加按键程序,去皮,清零,计价等功能。5.3实际测试精度测试:理论精度:因为CZL-A压力传感器的精度为0.02%,所以排除其他干扰后能达到的精度为10KG*0.02%=2g,实际精度:我采用了10g,50g,100g,200g,500g的砝码进行测试。表5.1精度测试砝码重量10g50g100g200g500g测试结果19g50g98g197g498g测试结果28g51g98g199g501g平均误差1.5g0.5g2g2g1.5g分析上表数据得出,当测试重量低于500g时,平均精度为1.5g。误差测试:当在称重传感器上放上1个100g砝码时。LCD1602显示屏显示如下:图5.1100g误差测试当在称重传感器上放上1个5KG的砝码时。LCD1602显示屏显示如下:图5.25KG误差测试误差为2g左右,在可接受范围之内。量程测试:当在传感器上放上1个10KG的砝码时,LCD1602显示如下:图5.3量程测试测试可得电子秤能测10KG及以下的重量。报警功能测试:当在传感器上放上一个15KG的砝码时,LED发红色光,蜂鸣器响。图5.4报警测试计价功能测试:当在称重传感器上放上1个100g砝码,并设置单价为10时,LCD1602显示屏显示如下:图5.3计价功能测试总价为0.098*10=0.98≈0.9,显示正确说明按键部分和计价部分功能实现。6总结本次毕业设计做的电子秤,主要利用了AT89C52单片机、CZL-A10kg电阻应变式称重传感器以及HX711A/D转换模块,LCD1602显示屏模块,4x4矩阵键盘,通过C语言编程来实现了电子秤的显示与控制。本次设计完成了称重,显示重量、计价、超量程报警、去皮等功能,精度达到要求的2g,能通过按键控制来实现单价的设置和去皮,清零。通过上述的分析,对于本次设计,其主要的设计任务已经完成。本次设计的核心部分在于软件编程,虽然以前学C语言的时候感觉还好,也在实验室待过一段时间学习编程,可真要让自己通过C语言来实现农历的算法,还是蛮困难的。同时对于C语言的编程软件Keil以及其仿真功能接触不够,如果能够熟练运用其仿真功能,可以为本次设计减少很多工作量。通过本次设计,从电路原理图的设计到电路板的焊接,再到编程调试,让我仔细的回顾了大学四年学习过的这些知识,包括单片机、微机原理、模电数电、电子实习等重要的基础课程。相信在以后的学习工作中还会继续用到。同时,应该看到,对于本次设计的电子秤,还存在很多的不足之处。比如,电路板设计的不合理,成品元器件排布不紧凑,布局的不合理,都体现了个人在硬件设计过程中的不熟悉。而且软件部分只实现了以上所述的基本功能,未能将语音播报,这是想法上和人性化设计上的不足。对于电子秤的发展,应该朝着智能识别物体并选择计价模式,语音控制和播报等更加人性化,更加方便人们生活的方向发展。以满足人们日趋广泛的应用。参考文献[1]高勇.分析电子衡器技术的现状及未来发展趋势[J].科技与企业
,2012,11(2):2-30[2]贾耘涛.衡器的发展应用与管理[J].中国科技博览,2012,24(1):35-60[3]曾德坤.浅析电子量衡准确性提高的技巧[J].商情,2012,35(6):10-30[4]王争.带钢称重设备在宝钢1800冷轧厂的应用[J].中国高新技术企业,2012,3(7):10-65[5]李淳.电子衡器的特点及选用[J].黑龙江科技信息,2009,12(5):10-35[6]陈小龙.浅谈如何搞好衡器计量管理[J].黑龙江科技信息,2011,21(1):2-35[7]杨东海.国内外电子秤的发展趋向及几点看法[J].水利电力机械,2009,12(11):13-28.[8]刘九卿.动态和数字称重技术发展概况与研究课题[J].工业计量,2011,2(1):10-69[9]陶安利,郑娟娟,王力涵,历运周.NetworkingIntelligentPressureSensorUsingDigitalLock-inAmplificationTechnology[J].JournalofMeasurementScienceandInstrumentation.2011(01).21-60[10]Jiansuchangzhou.LongWen.DevelopingofHighAccuracyandLowCapacityStrainGugeBasedLoadCELLforElectronicScale[J].2009,15(3):91-99.[11]梁易.基于单片机的无线电子秤设计[J].企业导报,2012,4(5):25-51[12]李艳.应变式微型传感承压机构一体化电子测压器[M]广东:中山大学.2009.3-20[13]袁锡明.基于单片机控制的智能压力变送器设计与实现[J].化工自动化及仪表,2012,5(9):3-30[14]钟富昭等.8051单片机典型模块设计与应用[M].北京:人民邮电出版社,2010.36-50[15]王守中,聂元铭.51单片机开发入门与典型实例[M].北京:人民邮电出版社,2009.211-23[16]吴祖安,朱兆优.基于单片机的电子秤设计[J].湖南农机.2010,2(05):2-30[17]王飞跃.基TAT89C51便携式仪表的系统研究[J].数字技术与应用.2011,6(1):2-35[18]邵峰.MCS-51单片机地址指针及其应用[J].安徽科技,2009,5(11):10-36[19]王超.基于Multisim10和KeilC51的单片机仿真[J].高师理科学刊,2012,2(2):2-33附件A系统原理图附件B开发板实物图附件C元器件清单序号名称数量110KGCZL-A电阻应变式压力传感器+支架12称重转换AD模块Hx71113STC89C52144*4矩阵键盘151602液晶165V有源蜂鸣器17单排排针2.54mm18单排弯针2.54mm19单排母座2.5411040P单片机母座11112M晶振11220pf瓷片电容213自锁开关114微动开关115PNP三极管s8550116直流电源插座/火车头117USB电源线11810uf铝电解电容119直插电阻1k2个;4.7k4个20红色、绿色led各1个219*15万用板122导线和焊锡若干23MAX23212416PDIP底座125串口母头126Usb转串口线127杜邦线4附件D源程序主程序:#include<reg52.h>#include<intrins.h>#include<string.h>#include"LCD1602.h"#include"hx711.h"#include"keyboard.h#defineucharunsignedchar#defineuintunsignedint//定义量程系数#defineRATIO1690/1000//1574/1000//2114/1623//定义标识volatilebitFlagTest=0; //定时测试标志,每0.5秒置位,测完清0volatilebitFlagKeyPress=0;//有键按下标志,处理完毕清0volatilebitFlagSetPrice=0;//价格设置状态标志,设置好为1。volatilebitClearWeighFlag=0;//传感器调零标志位,清除0漂//管脚定义sbitLedA=P2^2;//sbitbeep=P1^0;sbitalert=P2^0;//sbitledandbeep=P2^0;//显示用变量intCounter;inti,iTemp;//称重用变量unsignedlongidataFullScale;//满量程AD值/1000unsignedlongAdVal;//AD采样值unsignedlongweight;//重量值,单位gunsignedlongidataprice;//单价,长整型值,单位为分unsignedlongidatamoney;//总价,长整型值,单位为分//键盘处理变量unsignedcharkeycode;unsignedcharDotPos; //小数点标志及位置voidData_Init();voidPort_Init();voidTimer0_Init();voidTimer0_ISR();voidINT1_Init();voidKeyPress(uchar);voidTo_Zero();voidDisplay_Price();voidDisplay_Weight();voidDisplay_Money();/*延时*/voiddelay(inti){intj,k;for(j=0;j<i;j++)for(k=0;k<500;k++);}//重新找回零点,每次测量前调用voidTo_Zero(){FullScale=ReadCount()/1000;price=0;}//显示单价,单位为元,四位整数,两位小数voidDisplay_Price(){LCD1602_write_com(0x8c); LCD1602_write_data(price/100+0x30); LCD1602_write_data(price%100/10+0x30); LCD1602_write_data('.'); LCD1602_write_data(price%10+0x30);}//显示重量,单位kg,两位整数,三位小数voidDisplay_Weight(){LCD1602_write_com(0x83); LCD1602_write_data(weight/1000+0x30); LCD1602_write_data('.'); LCD1602_write_data(weight%1000/100+0x30); LCD1602_write_data(weight%100/10+0x30); LCD1602_write_data(weight%10+0x30);}//显示总价,单位为元,四位整数,两位小数voidDisplay_Money(){//unsignedinti,j;if(money>9999) //超出显示量程{LCD1602_write_com(0x80+0x40+4);LCD1602_write_word(".-");return;}if(money>=1000){LCD1602_write_com(0x80+0x40+4); 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);}elseif(money>=100){LCD1602_write_com(0x80+0x40+4); 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);}elseif(money>=10){LCD1602_write_com(0x80+0x40+4); LCD1602_write_data(0x20); LCD1602_write_com(0x80+0x40+5); LCD1602_write_data(0x20); LCD1602_write_data(money%100/10+0x30); LCD1602_write_data('.'); LCD1602_write_data(money%10+0x30);}else{LCD1602_write_com(0x80+0x40+4); LCD1602_write_data(0x20); LCD1602_write_com(0x80+0x40+5); LCD1602_write_data(0x20); LCD1602_write_com(0x80+0x40+6); LCD1602_write_data(0+0x30); LCD1602_write_data('.'); LCD1602_write_data(money%10+0x30);}}//数据初始化voidData_Init(){price=0;DotPos=0;//beep=1;alert=1;}//管脚配置voidPort_Init(){ }//定时器0初始化voidTimer0_Init(){ ET0=1;//允许定时器0中断 TMOD=1;//定时器工作方式选择 TL0=0x06; TH0=0xf8;//定时器赋予初值 TR0=1;//启动定时器}//定时器0中断voidTimer0_ISR(void)interrupt1using0{ TL0=0x06; TH0=0xf8;//定时器赋予初值 //每0.5秒钟刷新重量Counter++;if(Counter>=200){FlagTest=1; Counter=0;}}//按键响应程序,参数是键值//返回键值://78910(清0)//45611(删除)//12312(未定义)//14(未定义)015(.)13(确定价格)voidKeyPress(ucharkeycode){switch(keycode){case0:case1:case2:case3:case4:case5:case6:case7:case8:case9: //目前在设置整数位,要注意price是整型,存储单位为分 if(DotPos==0) { //最多只能设置到千位 if(price<100) { price=price*10+keycode*10; } } //目前在设置小数位 elseif(DotPos==1)//小数点后第一位 { price=price+keycode; DotPos=2; } Display_Price(); break;case10://清零键 To_Zero(); Display_Price(); FlagSetPrice=0; DotPos=0; break; case11: //删除键,按一次删除最右一个数字 if(DotPos==2) { price=price/10; price=price*10; DotPos--; } elseif(DotPos==1) { price=price/100; price=price*10; DotPos--; } elseif(DotPos==0) { price=price/100; price=price*100; } Display_Price();break; //////////////////////////////////// case12: ClearWeighFlag=1; break; //////////////////////////////////////case13://确认键 FlagSetPrice=1; DotPos=0; break; case15://小数点按下 DotPos=1;//小数点后第一位 break;}}//===============mainprogram===================//voidmain(void){Init_LCD1602();EA=0;Data_Init();Port_Init();Timer0_Init();//初中始化完成,开断EA=1;//背光LedA=1;LCD1602_write_com(0x80); //指针设置LCD1602_write_word("Welcometouse!"); To_Zero();LCD1602_write_com(0x80); //指针设置LCD1602_write_word("WE:.PR:.");LCD1602_write_com(0x80+0x40); //指针设置LCD1602_write_word("MON:.");Display_Price();while(1){//每0.5秒称重一次 if(FlagTest==1) { //ledandbeep=0; //称重,得到重量值weight,单位为g AdVal=ReadCount(); weight=FullScale-AdVal/1000; if(weight>0x8000)weight=0; weight=10000*weight/FullScale; weight=weight*RATIO; //如果超量程,则报警 if(weight>=10000) { //beep=0; alert=0; LCD1602_write_com(0x83); LCD1602_write_word("-."); } //如果不超量程 else { //beep=1; alert=1; //显示重量值 Display_Weight(); //如果单价设定好了,则计算价格if(FlagSetPrice==1) { money=weight*price/1000;//money单位为分 //显示总金额 Display_Money(); } else { LCD1602_write_com(0x80+0x40+4); LCD1602_write_word("."); } //清测试标志 FlagTest=0; } } //获取按键 if(ClearWeighFlag==1) { ClearWeighFlag=0; To_Zero(); } keycode=Getkeyboard(); //有效键值0-15 if((keycode<16)&&(FlagKeyPress==0)) { FlagKeyPress=1; KeyPress(keycode); FlagKeyPress=0; } delay(70);}}键盘子程序:#include"keyboard.h"//按键扫描函数://功能;只扫描一个按键,按键为号小优先//返回键值://78910 //10:清除单价并且清除重量 //45611 //11:清除单价最后一位//12312 //12:去皮//1401513 //14:无功能(用于扩展)15:小数点13:确定unsignedcharGetkeyboard(void){unsignedcharnumber=0;unsignedchari; //行输入低电平ROW1=ROW2=ROW3=ROW4=0; //如果列输出不全为高,则说明有键按下 if((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1)) { //输入0111 ROW1=0; ROW2=ROW3=ROW4=1; for(i=0;i<20;i++); if(COL1==0)return1; //7 elseif(COL2==0)return2; // 8 elseif(COL3==0)return3; // 9 elseif(COL4==0)return10; // 10 //输入1011 ROW2=0; ROW1=ROW3=ROW4=1; for(i=0;i<20;i++); if(COL1==0)return4; //4 elseif(COL2==0)return5;//5 elseif(COL3==0)return6; //6 elseif(COL4==0)return11; // 11 //输入1101 ROW3=0; ROW1=ROW2=ROW4=1; for(i=0;i<20;i++); if(COL1==0)return7;//1 elseif(COL2==0)return8; //2 elseif(COL3==0)return9; //3 elseif(COL4==0)return12; //12 //输入0111 ROW4=0; ROW1=ROW2=ROW3=1; for(i=0;i<20;i++); if(COL1==0)return14; elseif(COL2==0)return0; elseif(COL3==0)return15; elseif(COL4==0)return13; //没有检测到列低电平 return99; } return99;}LCD1602子程序:#include"LCD1602.h"//****************************************************//MS延时函数(12M晶振下测试)//****************************************************voidLCD1602_delay_ms(unsignedintn){ unsignedinti,j; for(i=0;i<n;i++) for(j=0;j<123;j++);}//****************************************************//写指令//****************************************************voidLCD1602_write_com(unsignedcharcom){ LCD1602_RS=0; LCD1602_delay_ms(1); LCD1602_EN=1; LCD1602_PORT=com; LCD1602_delay_ms(1); LCD1602_EN=0;}//****************************************************//写数据//****************************************************voidLCD1602_write_data(unsignedchardat){ LCD1602_RS=1; LCD1602_delay_ms(1); LCD1602_PORT=dat; LCD1602_EN=1; LCD1602_delay_ms(1); LCD1602_EN=0;}//****************************************************//连续写字符//****************************************************voidLCD1602_write_word(unsignedchar*s){ while(*s>0) { LCD1602_write_data(*s); s++; }}voidInit_LCD1602(){ LCD1602_EN=0; LCD1602_RW=0; //设置为写状态 LCD1602_write_com(0x38); //显示模式设定 LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置 LCD1602_write_com(0x06); //写一个字符后指针加一 LCD1602_write_com(0x01); //清屏指令}AD转换子程序:#include"hx711.h"unsignedlongReadCount(void){unsignedlongCount;unsignedchari;ADSK=0;Count=0;while(ADDO);for(i=0;i<24;i++){ADSK=1;Count=Count<<1;ADSK=0;if(ADDO)Count++;}ADSK=1;Count=Count^0x800000;ADSK=0;return(Count);}基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高三数学(理)一轮总复习:第九篇 统计与算法 含解析
- 离婚合同小说全文在线阅读下载
- 个人汽车租赁简单合同
- 路灯承包合同
- 软件开发签约合同
- pso算法读书笔记
- 屋顶翻修安全合同模板
- 医疗行业的市场拓展经验总结
- 2025年人教五四新版选修历史下册月考试卷含答案
- 2025年新世纪版九年级生物下册月考试卷含答案
- 五年级下册语文教案 学习双重否定句 部编版
- 南京地区幼儿园室内空气污染物与儿童健康的相关性研究
- 平安产险陕西省地方财政生猪价格保险条款
- 地震应急救援培训课件
- 初中物理光学难题难度含解析答案
- 《霍尔效应测量磁场》课件
- 《疯狂动物城》全本台词中英文对照
- 中专数学(基础模块)上册课件
- 高考作文复习任务驱动型作文的审题立意课件73张
- 品质部经理KRA KPI考核表
- 一个28岁的漂亮小媳妇在某公司打工-被老板看上之后
评论
0/150
提交评论