基于单片机的智能电子秤设计_第1页
基于单片机的智能电子秤设计_第2页
基于单片机的智能电子秤设计_第3页
基于单片机的智能电子秤设计_第4页
基于单片机的智能电子秤设计_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

.引言1.1研究背景称重技术作为一种常用的计量手段,广泛地应用于工业、农业、科研、交通、贸易等领域,并且与人民的生活紧密相连。电子秤是国家法定的称重计量器具,是国计民生、内外贸易、科学研究中不可或缺的计量设备。衡器产品技术水平,将影响到国家各行各业的发展水平和社会经济效益。称重装置不仅提供测重数据,而且作为工业控制系统和商业管理系统的组成部分,提高了工业生产的自动化,同时缩短了作业时间、改善了操作条件、降低材料和能源的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的广泛应用到国民经济各领域,取得了显著的经济效益。各国都非常重视称重技术的研究和衡器工业的发展。50年代后电子技术推动了衡器制造业的发展。60年代后出现机电结合式电子衡器,经过50多年的不断改进,我国电子衡器从最初的机电结合型发展到电子型和数字智能型。现今电子衡器制造技术又得到了新发展。1.2研究目的与意义1.2.1国内研究状况我国的电子秤技术在改革开放后提供了良好的发展机遇。我国已可生产机械与设备等1000多个规格的电子秤装备,具有20世纪80年代以上国际水平的产品占据主导地位,部分产品具有国际先进水平,产品不但能满足6000余家中西药厂、2000多家动物药厂及保健品厂的需求,而且出口美、日、德、法等数十个国家和地区。现在我国电子秤的生产企业数、产品品种、产量均位居世界首位,成为了名副其实的电子秤装备大国。但在质量和技术上与国际水平的差距还很大,中国的核心技术和产品质量还需进一步的提高。1.2.2国外发展状况国外的衡器产品质量好、应用面广、种类繁多,从通用的电子秤到大型的电子称重系统,从单纯的称重、计价到生产过程检测系统的测量控制单元,其应用领域在不断地延伸。根据电子称重技术和电子衡器的发展情况及电子衡器市场的需求,电子衡器总的发展方向为:小型化、模块化、智能化、集成化,其应用性向综合性、组合性趋势发展。2.电子秤系统的总体介绍2.1电子秤系统的总体方案本设计是基于52单片机的智能电子秤的设计,分为压力传感模块、信号转换模块、人机交换模块和输出显示模块。设计电路中运用电阻应变式传感器、A/D转换器、键盘和LCD显示器等四大器件。工作原理是采用电阻式应变传感器采集被测物体质量的模拟量,再经放大电路输出到A/D转换器,转换成便于处理的数字信号输出到52单片机中进行处理后把数字信号输送到显示电路中,最后由显示电路显示测量结果。2.2电子秤系统的功能本系统的开发设计有以下功能:(1)采用电阻应变式压力传感器,测量量程为0-10kg,测量精度可达2g。(2)采用电子秤专用模拟/数字(A/D)转换器芯片HX711对信号进行处理转换,HX711芯片采用了集成电路专利技术,是一款专为高精度电子秤而设计的24位A/D转换器。(3)采用AT89C52单片机控制,实现称重、计价等功能。(4)采用12864液晶显示屏显示称重重量、单价及总价等信息。(5)采用4×4矩阵键盘作为人机交互界面,容量较大,操作方便快捷。(6)具有超重报警功能,通过蜂鸣器和LED灯报警。2.3电子秤系统的结构2.3.1设计结构电子秤是用来测量物体质量(重量)的仪器,也可用来确定与质量相关的其它量大小、参数特性。电子秤由以下三部分组成:(1)承重、传力复位系统,它是称重物体与转换元件之间的机构、传力复位系统,又称电子秤的秤体,一般包括被称物体载荷的承载器、秤桥结构、限位减振机构和吊挂连接部件等。(2)称重传感器,将非电量(质量或重量)转换成电量的转换元件,它是把支承力变换成电的或其它形式的适合于计量的信号所用的一种辅助手段,按照称重传感器的结构型式不同,分为直接位移传感器(电容式、电感式、电位计式、振弦式等)和应变式传感器(电阻应变式、声表面谐振式)或是利用磁弹性、压电式和压阻等物理效应的传感器.称重传感器的基本要求:输出电量与输入重量保持单值对应,并保持良好的线性关系;有较高的灵敏度;对被称物体的状态的影响小;能在较差的工作条件下工作;有较好的频响特性;稳定可靠。(3)数据输出和测量显示的载荷测量装置,处理称重传感器信号的电子线路(包括放大器、模数转换、电流源或电压源、调节器、保护线路等)和指示部件(如显示、数据传输等)。这部分习惯上称载荷测量装置。在数字式的测量电路中,通常包括前置放大、滤波、运算、变换、计数、控制和驱动显示等环节。2.3.2组成结构该系统结构图如图2.1所示。A/D转换器报警放大电路A/D转换器报警放大电路压力传感器压力传感器键盘AT89C52单片机键盘AT89C52单片机LCD显示器LCD显示器图2.1系统结构图3.电子秤系统硬件设计3.1电子秤系统主要芯片介绍3.1.1单片机芯片AT89C52单片机采用MCS-51系列单片机。ATMEL公司生产的AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K可编程Flash存储器,与工业80C51产品引脚和指令完全兼容。在芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,AT89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89C52具有以下标准功能:8k字节Flash,256字节RAM,32位I/O口线,2个数据指针,三个16位定时器/计数器,一个2级中断,全双工串行口,片内晶振及时钟电路。在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。在掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机将停止工作,直到下一个中断或硬件复位为止。它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制复位整个系统,还可以在程序陷入死循环的时候,让单片机复位而不至于整个系统断电,从而保护你的硬件电路。AT89C52有40个引脚和32个外部双向输入/输出(I/O)端口,同时内含2个外部中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程。通用的微处理器和Flash存储器结合在一起。AT89C52引脚图如图3.1所示。图3.1AT89C52引脚图3.1.2单片机管脚说明VCC:供电电压。GND:接地。P0口:P0口是一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚写1时,被定义为高阻输入。P0能用于外部程序数据存储器,可以被定义为数据/地址的第八位。P1口:P1口为一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1时,被内部上拉为高电平,可用作输入,P1口被外部下拉为低电平时,由于内部上拉的缘故,将输出电流。在编程和校验时,P1口作为第八位地址接收。P2口:P2口是一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口写入“1”时,其管脚被内部上拉电阻拉高作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口将输出特殊功能寄存器的内容。P2口在编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚为8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)。P3口也可作为AT89C52的一些特殊功能口,P3口特殊功能表如表3.1所示:表3.1P3口特殊功能表P3口引脚第二功能P3.0RXD(串行口输入)P3.1TXD(串行口输出)P3.2INT0(外部中断0输入)P3.3INT1(外部中断1输入)P3.4T0(定时器0外部脉冲输入)P3.5T1(定时器1外部脉冲输入)P3.6WR(外部数据存储器写脉冲输出)P3.7RD(外部数据存储器读脉冲输出)P3口同时可以为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平。才能复位。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在编程期间,此引脚用于输入编程脉冲。在平时,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:反向振荡器的输出。3.1.3AT89C52的最小系统电路构成AT89C52单片机的最小系统由时钟电路、复位电路、电源电路及单片机等构成。单片机的时钟信号用来提供单片机片内各种操作的时间基准,复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。当MCS-52系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。系统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。52单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,52单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。AT89C52单片机的最小系统电路图如图3.2所示。图3.2AT89C52单片机的最小系统电路图3.2电子秤的工作原理3.2.1电子秤原理框图电子秤原理图如图3.3所示。LCD显示AT89C52A/D转换器前端信号处理LCD显示AT89C52A/D转换器前端信号处理称重传感器图3.3电子秤原理图3.2.2电子秤的工作原理本系统采用单片机AT89C52单片机为控制核心,实现电子秤的基本控制功能。系统的硬件部分包括最小系统板,数据采集、软件电路设计三大部分。最小系统部分主要是数据存储器,数据采集部分由称重传感器、放大电路和A/D转换部分组成。软件电路设计主要由软件流程和运行程序组成。实现基本的称重功能和重量显示的功能。称重物体经装在机构上的重量感应器,将重力转换为电压和电流的信号,经放大及滤波后由A/D转换器转换为数字信号,数字信号由中央处理器(CPU)运算处理,而周期需要的功能及各种界面电路也和CPU连接应用,最后由显示器以数字形式显示出来。3.3电子秤的硬件设计3.3.1传感模块的设计传感器一般是利用物理、化学、生物等的某些效应或原理按照一定的制造工艺研制的。通常由敏感元件、传感元件(转换元件)、测量电路(信号调节与转换电路)和辅助电源几部分组成,传感器组成框图如图3.4所示。电量电量被测量辅助电源测量电路传感元件敏感元件图3.4传感器组成框图应变片压力传感器是最常用的传感器,在设计的过程中,使用的是电阻丝应变片。其工作原理是当应变片受到拉伸时,电阻丝直径变细,电阻值增大(R+ΔR),当应变片受压缩变形时,电阻丝直径变粗,电阻值变小(R-ΔR),从而输出正比例电信号。实验得知,由于电阻应变片的电阻变化很小,所以必须将信号放大到0—5V后才能输入单片机控制系统进行相应的处理。电阻应变片所组成的电桥R1、R2、R3、R4分别为四个电桥桥臂的电阻。当加以一定的电压U时则两端的输出电压U可由下式(3.1)求得:(3.1)根据式(3.1)可知,当R1R3=R2R4时,电桥输出电压ΔU=0,即电桥处于平衡,这就是在进行切削力测量前必须进行电桥平衡的调节工作。在力的作用下,应变片的电阻发生变化,破坏了电桥的平衡。若R1、R2、R3、R4分别产生ΔR1、ΔR2、ΔR3、ΔR4的电阻变化,则由式(3.1)电桥的输出电压为:(3.2)由式(3.2)可以看出,当电桥相邻两臂,有符号相同的电阻变化时,电桥输出电压为两桥电阻变化相减的结果。因此为使电桥有较大的输出,则应使电桥相邻两臂,有符号相反的电阻变化;而相对两臂,有符号相同的变化。常用的电桥电路有等臂全桥电路(电桥由四个臂组成,R1=R2=R3=R4)及半桥电路(电桥由两个臂加上两个固定电阻组成,R1=R2=R),由式(3.2)得出两种电桥的输出电压。全桥输出电压为:(3.3)半桥输出电压为:(3.4)比较式(3.3)和式(3.4)可知,当ΔR1=ΔR3=ΔR;ΔR2=ΔR4=ΔR时,全桥的输出为半桥的两倍,也即全桥的灵敏度为半桥的两倍。因此,为提高测量的灵敏度,即电桥有较大的输出,我们在设计时采用了等臂全桥的测量电路。题目要求称重范围10Kg,重量误差不大于±0.002Kg,为避免超重损坏传感器,传感器量程必须大于额定称重9.999Kg。选择L-PSIII型传感器,量程10Kg,精度为0.01%,满量程时误差0.001Kg。可以满足本系统的精度要求。称重传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式给出:(3.5)3.3.2放大及A/D转换模块的设计HX711采用了集成电路专利技术,是一款专为高精度电子秤而设计的24位A/D转换器芯片。该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需的外围电路,具有响应速度快、抗干扰能力强等特点。提高了集成模块模块的性能和可靠性。该芯片接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,对应的满额度差分输入信号幅值为±20mV或±40mV。通道B则为固定的32增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需再加模拟电源。片内的时钟振荡器不需外接器件。HX711集成模块的工作原理是采集称重传感器的电压信号,将模拟信号从A通道输入到芯片中转换成数字信号,再把数字信号输送到单片机进行处理。AT89C52单片机与HX711的连接图如图3.5所示。图3.5AT89C52单片机与HX711的连接图3.3.3显示模块的设计本设计选用HDG12864液晶显示器,采用的是128×4点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM。该液晶显示器的工作原理是将单片机的数据写入液晶显示器的驱动IC中,从含有JLX-GB2312字库IC中读取内置的点阵数据写入到LCD的驱动IC中,从而达到液晶屏上显示汉字或字符的目的。AT89C52单片机与液晶显示器的连接图如图3.6所示。图3.6AT89C52单片机与液晶显示器的连接图3.3.4键盘模块的设计由于电子秤需要设置单价(十个数字键),还具有确认、删除等功能。采用矩阵式键盘:矩阵式键盘的特点是把检测线分成两组,一组为行线,一组列线,4×4矩阵式键盘共可以安装16个键,但只需要8条测试线。4×4矩阵键盘定义如表3.2所示:表3.24×4矩阵键盘78910(清零)45611(删除)12312(未定义)14015(.)13(确定)4×4矩阵键盘可以显示0-9数字、小数点和五个功能键。其工作过程是键盘行扫描信号和列扫描信号。行信号为输入信号,低电平有效;列信号为输出信号。当没有键按下时,即使行扫描输入低电平信号,列信号仍为高电平;当行扫描为低电平并且有键按下时,相应的列输出低电平。该低电平信号可以定位至按下键的位置,将指令输入到单片机中。AT89C52单片机与矩阵键盘的连接图如图3.7所示。图3.7AT89C52单片机与矩阵键盘的连接图3.3.5超量程报警部分设计超限报警电路是由单片机的I/O口来控制的,当称重物体重量超过系统设计所允许的重量,使单片机的I/O值为低电平,驱动蜂鸣器鸣响,使报警灯亮。当电路检测到称重的物体超过仪器的测量限制时,将产生一个信号给报警电路。使报警电路报警从而提醒工作人员,AT89C52单片机与报警电路的接线图如图3.8所示。图3.8AT89C52单片机与报警电路的接线图4.系统软件设计4.1主程序设计系统主程序流程图如图4.1所示。开始开始数据初始化数据初始化端口初始化端口初始化显示初始化显示初始化定时器初始化定时器初始化键盘扫描键盘扫描有称重标志吗?有称重标志吗?无称重计算总价有称重计算总价显示重量总价显示重量总价结束结束图4.1系统主程序流程图4.2子程序设计4.2.1数据处理子程序的设计数据处理子程序是整个程序的核心。主要用作调整输入值系数,使输出量满足量的要求。另外完成A/D的采样结果从十六进制数向十进制数形式转化。数据处理流程图如图4.2所示。开始开始R7=n,R7存采样结果的16进制数位数,R3存16位二进制的低8位,R2存高八位,R6存调整后的低两位,R5存中间两位,R4存高两位R7=n,R7存采样结果的16进制数位数,R3存16位二进制的低8位,R2存高八位,R6存调整后的低两位,R5存中间两位,R4存高两位R7=R7-11R3左移1位,R2右移1位R7=R7-11R3左移1位,R2右移1位R6、R5、R4保存移入值,并进行调整R6、R5、R4保存移入值,并进行调整R7=0?R7=0?NR4的低位存入30H作百位信息,R5高位存入作十位,低位存入32H作个位,R6高位作小数点YR4的低位存入30H作百位信息,R5高位存入作十位,低位存入32H作个位,R6高位作小数点返回返回图4.2数据处理流程图4.2.2数据采集子程序的设计数据采集用A/D转换器来完成,主要分为启动、读取数据、延时等待转换结束、读出转换结果、存入指定内存单元、继续转换(退出)几个步骤。HX711初始化后,就具有了将某一通道输入的0~5模拟信号转换成对应的数字量00H—FFH,然后再存入8031内部RAM的指定单元中。在控制方面有所区别。可以采用程序查询方式,延时等待方式和中断方式。4.2.3显示子程序的设计设计显示子程序,首先调用初始化命令,再调用事先编好的键盘显示子程序,然后输出显示命令。同时在显示过程中调用延时子程序。当输入通道采集了一个新的过程参数,或用户键入一个参数时显示管理软件应及时调用显示驱动程序模块,更新当前显示数据。显示模块流程图如图4.3所示。开始开始设定单价设定单价有无按键?有无按键?N键盘输入Y键盘输入是否为D?是否为D?N显示Y显示返回返回图4.3显示模块流程图4.2.4键盘扫描子程序的设计键盘电路设计为4×4矩阵键盘,编码方式为:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F按键对应的值为:0D8H,0D0H,0D1H,0D2H,0C8H,0C9H,0CAH,0C0H,0C1H,0C2H,0C3H,0CBH,0D3H,0DBH,0DAH,0D9H。在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。4.2.5超重报警子程序设计由于设计要求设定阈值,所以要求有报警电路,报警电路可以有声报警也可有光报警,将设定的阈值与实时显示的值进行比较,如果设定值小于实时显示的值,测量值大于量程时,使发光二极管亮,或使蜂鸣器鸣响。这就需要一段比较程序以及一小段置1清0程序。报警流程图如图4.4所示。A/D高位大?开始A/D高位大?开始Y与阀值相等?N与阀值相等?NA/D低位大?YA/D低位大?Y与阀值相等?N与阀值相等?N报警Y报警返回返回图4.4报警流程图5.电子秤系统的调试5.1软件调试打开C程序调试软件keiluVision4,新建一个工程,接着新建文件,编写相应的程序,编写好的各个程序进行编译与连接。但若在该过程中,看见编好的程序有错误,那么就根据它相应的提示来修改错误,直到该程序能够正确编译为止。能够正常编译的程序说明没什么问题了,此时我们在点击相关栏目,让它生成在硬件仿真时所需要的.HEX文件。此步,我们的软件调试就完成了。由于传感器和其他器件本身并非理想线性,程序中对实际测量数据进行了线性补偿。误差分析:经校准,非线性补偿后,误差已基本达到要求。所用测量仪器:总重量是10Kg的砝码,万用表。在测量过程中由于导线太长引起的误差,我们在实际的硬件电路中,不能够做到使误差减轻,只是利用电位器,尽量将所产生的不必要误差,人为误差等可以避免的误差降到最低。在测量过程中,遇到了很多的问题,但经过老师和同学的努力都将其解决。比方说,在硬件电路的焊接过程中,能尽量不使用导线的就不用,能直接连接的,就直接连接,目的只有一个,就是将设计的实用电子秤的在重量显示部分做到精确,通过砝码加重,利用单片机程序,在LCD上精确显示所测量的数据。5.2硬件调试按照方案所选的电路元件来设计整体电路,先把各个芯片按一定位置安放好,然后对相应的对象进行布线连接,连线时要仔细,以免调试时发生错误。做好之后把编程所生成的.HEX文件加载到AT89C52中,进行多次调试,查看运行效果。6.结语电子技术和单片机技术的迅速发展,使电子仪器的整体水平发生了巨大的变化,传统的仪器逐步的被智能仪器所取代。智能仪器的核心部件是单片机,因其极高的性价比得到广泛的应用与发展,从而加快了智能仪器的发展。传感器是一种能将特定的被测量信息按一定规律转换成某种可用信号输出的器件或装置,作为测控系统中对象信息的入口,越来越受到人们的关注。本次设计中的电子秤就是在以上仪器的基础上设计而成的。因此,只有充分了解有关智能仪器、单片机、传感器以及各部分之间的关系才能达到设计要求。首先考虑传感器的精度,它将直接影响电子秤的称重准确度。由于传感器发出的信号不是很稳定,所以称重时误差很大,所以使用精密度较高的传感器,效果会好的多。其次是数据采集处理阶段,此阶段是对传感器发出的信号进行量化、采集,主要包括信号放大、数据采集,然后进行A/D转换。注意对传感器输出的信号进行放大时,应选取合适的运算放大电路。最好先计算好应放大的倍数,以便选取。还有就是处理数据时,应选取适当的数据转换系数,使输出量满足量程要求。

参考文献[1]常健生.检测与转换技术[M].北京:机械工业出版社,1997:79-125.[2]张毅刚.单片机原理与应用设计[M].北京:电子工业出版社,1993:182-247.[3]杨素行.模拟电子技术基础简明教程[M].3版.北京:高等教育出版社,2005:135-176.[4]陈士英,郭炯杰.电路与模拟电子技术[M].北京:机械工业出版社,2004:36-50.[5]余孟尝.数字电子技术基础简明教程[M].3版.北京:高等教育出版社,2006:63-72.[6]曾建唐.电工电子基础实践教程[M].北京:机械工业出版社,2007:78-85.[7]刘建清.轻松玩转51单片机[M].北京:北京航空航天大学出版社,2011:13-39.[8]杨欣,张延强,张铠麟.案例解读51单片机[M].北京:电子工业出版社,2011:38-72.[9]李华.MCS-51系列单片机实用接口技术[M].北京:北京航空航天大学出版社,1999:23-67.[10]房小翠.单片机实用系统设计技术[M].北京:国防工业出版社,1999:6-28.[11]李广弟.单片机基础[M].北京:北京航空航天大学出版社,2001:18-27.[12]周培森.自动检测与仪表[M].北京:清华大学出版社,1986:13-34.[13]何立民.MCS-51单片机应用系统设计[M].北京:北京航空航天大学出版社,1990:9-53.[14]王守中.51单片机开发入门与典型实例[M].北京:人民邮电出版社,2008:5-42.[15]曹迂邦,罗绪荆.电子计价台秤的设计[J].计量技术.1992:65-70.[16]赵广平,孙雯萍,孙建军.电子称重技术现状及发展趋势[J].仪表技术与传感器.2007:75-88.[17]秦伟.基于STC89C51RC电子称设计[J].电脑知识与技术.2009:120-135.[18]8-bitMicrocontrollerWith8KBytesFlashAT89C52.ATMEL[M],1999.[19]EAGard,JSBryan.Electroniccountingscale[J].USPatent4089,1980.[20]Arifin,Sumardi,Setiawan.ModelTimbanganDigitalMenggunakanLoadCellBerbasisMikrokontrolerAT89S51[J].undip.ac.id,2011.致谢通过几个月的忙碌和工作,本次毕业设计已经基本完成,由于匮乏经验,设计中有许多考虑不周全的地方,但在指导老师的督促以及同学们的支持下,顺利的完成了本次设计。从这次的设计中,使我更深入的了解电子秤的工作原理,并通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在这次设计中,我学会了很多设计的方法。而这是日后最实用的,真是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。在这里要感谢我的指导老师。他平日里工作繁忙,但在我做毕业设计的每个阶段,从查阅资料到设计初稿的确定和修改,中期检查,后期详细设计等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,但是指导老师仍然细心地纠正其中的错误。除了敬佩指导老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。最后还要感谢大学四年来所有的老师,为我打下专业知识的基础;同时还要感谢所有的同学们,正是因为有了你们的支持和帮助,此次毕业设计才会顺利完成。附录附录A电路原理图电路原理图如图A1所示。图A1电路原理图附录B源程序#include<reg52.h>#include<intrins.h>#include<string.h>#include"lcd.h"#include"hx711.h"#include"keyboard.h"volatilebitFlagTest=0;//定时测试标志使每0.5秒置位后测完清0volatilebitFlagKeyPress=0;//有键按下标志处理完毕清0volatilebitFlagSetPrice=0;//价格设置状态标志设置好为1sbitLedA=P2^2;sbitbeep=P1^0;sbitalert=P1^1;//管脚定义//unsignedlongRATIO=1572;#defineRATIO422/1000//定义量程系数intCounter;//显示用变量ucharidatastr1[6]="000000";inti,iTemp;//称重用变量unsignedlongidataZero;//AD的零点输出值unsignedlongAdVal;//AD采样值unsignedlongweight;//重量值单位gunsignedlongidataprice;//单价unsignedlongidatamoney;//总价ucharkeycode;//键盘处理变量ucharDotPos; //小数点标志及位置voidInitUart(void);voidComOutChar(unsignedcharOutData);voidComOutEnter(void);unsignedcharComInChar(void);voidint2str(int,char*);voidData_Init();voidPort_Init();voidTimer0_Init();voidTimer0_ISR();voidINT1_Init();voidKeyPress(uchar);voidTo_Zero();voidDisplay_Price();voidDisplay_Weight();voidDisplay_Money();voidCelebrate(unsignedlong);voidint2str(intx,char*str)//整型转字符串的函数转换范围0-65536{inti=1;inttmp=10;while(x/tmp!=0){i++;tmp*=10;}tmp=x;str[i]='\0';while(i>1){str[--i]='0'+(tmp%10);tmp/=10;}str[0]=tmp+'0';}voidTo_Zero()//重新找回零点并每次测量前调用{Zero=ReadCount();price=0;}voidCelebrate(unsignedlongFama)//校准RATIO系数的函数Fama为砝码值单位为g{AdVal=ReadCount();weight=AdVal-Zero;RATIO=Fama*1000/weight;}voidDisplay_Price()//显示单价(单位为元){unsignedinti,j;display_GB2312_string(5,44,"");i=price/100;//得到整数部分j=price-i*100;//得到小数部分int2str(i,str1);//显示整数部分if(i>=1000){display_GB2312_string(5,44,str1);}elseif(i>=100){display_GB2312_string(5,52,str1);}elseif(i>=10){display_GB2312_string(5,60,str1);}else{display_GB2312_string(5,68,str1);}//显示小数点display_GB2312_string(5,76,".");//显示小数部分int2str(j,str1);if(j<10){display_GB2312_string(5,84,"0");display_GB2312_string(5,92,str1);}else{display_GB2312_string(5,84,str1);}}voidDisplay_Weight()//显示重量(单位kg){unsignedinti,j;display_GB2312_string(3,60,"");//weight单位是gi=weight/1000;//得到整数部分j=weight-i*1000;//得到小数部分int2str(i,str1);if(i>=10){display_GB2312_string(3,60,str1);}else{display_GB2312_string(3,68,str1);}display_GB2312_string(3,76,".");int2str(j,str1);if(j<10){display_GB2312_string(3,84,"00"); display_GB2312_string(3,100,str1);}elseif(j<100){display_GB2312_string(3,84,"0"); display_GB2312_string(3,92,str1);}else{display_GB2312_string(3,84,str1);}}voidDisplay_Money()//显示总价(单位为元){unsignedinti,j;display_GB2312_string(7,44,"");if(money>999999) //超出显示量程{display_GB2312_string(7,44,"");return;}i=money/100;//得到整数部分j=money-i*100;//得到小数部分int2str(i,str1);//显示整数部分if(i>=1000){display_GB2312_string(7,44,str1);}elseif(i>=100){display_GB2312_string(7,52,str1);}elseif(i>=10){display_GB2312_string(7,60,str1);}else{display_GB2312_string(7,68,str1);}//显示小数点display_GB2312_string(7,76,".");//显示小数部分int2str(j,str1);if(j<10){display_GB2312_string(7,84,"0");display_GB2312_string(7,92,str1);}else{display_GB2312_string(7,84,str1);}}voidData_Init()//数据初始化{price=0;DotPos=0;beep=1;alert=1;}//管脚配置voidPort_Init(){}voidTimer0_Init()//定时器0初始化{ ET0=1;//允许定时器0中断 TMOD=0x21;//定时器工作方式选择 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;}}voidKeyPress(ucharkeycode)//按键响应程序和参数是键值{switch(keycode){case0:case1:case2:case3:case4:case5:case6:case7:case8:case9://目前设置整数位并要注意price是整型而存储单位为分 if(DotPos==0) { if(price<100000)//最多只能设置到千位 { price=price*10+keycode*100; } }//目前在设置小数位 elseif(DotPos==1)//小数点后第一位 { price=price+keycode*10; DotPos++; } elseif(DotPos==2) { price=price+keycode; DotPos++; } 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*100; DotPos--; } elseif(DotPos==0) { price=price/1000; price=price*100; } Display_Price();break;case13://确认键 FlagSetPrice=1; DotPos=0; break; case14://校准确认键Celebrate(1000); //以1千克砝码校准 break; case15://小数点按下 if(DotPos==0) { DotPos=1;//小数点后第一位 } break;}}voidInitUart(void){SCON=0x50;//串口方式1允许接收TMOD=0x21;//定时器1定时方式2波特率发生器TH1=0xFD;TL1=TH1;PCON=0x00;//波特率不控制SMOD位RI=0;//清收发标志TI=0;TR1=1;//启动定时器}//向串口输出一个字符(非中断方式)voidComOutChar(unsignedcharOutData){SBUF=OutData;//输出字符while(!TI);//空语句判断字符是否发完TI=0;//清TI}//向串口输出一个字符串(非中断方式)voidComOutStr(unsignedchar*Str){while(*Str!=0x00)//判断是否到了字符串的尾部{SBUF=*Str;//输出字符while(!TI);//空语句判断字符是否发完TI=0;//清TIStr++;//字符串指针加1}}//从串口接收一个字符(非中断方式)unsignedcharComInChar(){unsignedcharInData;while(!RI);//空语句判断字符是否收完InData=SBUF;//保存COM缓冲字符RI=0;//清RIreturn(InData);//返回收到的字符}//从串口接收一个定长字符串unsignedchar*Str;unsignedchari[]="abcd";InHandStr=&i;voidComInStr(unsignedchar*Str){while(*Str!=0x00)//判断是否到了字符串的尾部{while(!RI);//空语句判断字符是否收完*Str=SBUF;//保存字符RI=0;//清RIStr++;//字符串指针加1}}voidUATR0_ISR(void)interrupt4//UART0中断由发送中断TI0=1和接收中断RI0=1引起{unsignedchartemp;unsignedlongAddata;unsignedcharutemp;if(!TI)//如果不是发送中断即接收中断就接收一个字符{temp=ComInChar(); if(temp=='R') { ComOutStr("HX711读到的数据\n"); for(i=0;i<10;i++) { Addata=ReadCount(); int2str(Addata,str1); ComOutChar(str1[5]); ComOutChar(str1[4]);

温馨提示

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

最新文档

评论

0/150

提交评论