电子秤毕业论文
电子称毕业论文
题 目:
专 业:
班 级:
学 号:
学生姓名:
指导教师:
起迄日期:
设计地点: 基于51单片机的电子秤设计
摘 要
该设计以51系列单片机AT89S52为控制核心,实现电子秤的基本控制功能。在设计系统时,为了更好地采用模块化设计法,分步的设计各个单元功能模块,系统的硬件部分可以分为最小系统、数据采集、人机交互界面和系统电源四大部分。最小系统部分主要包括AT89S52以及外围电路组成;数据采集部分由压力传感器、信号的前级处理和A/D转换部分组成,包括24位A/D转换器HX711;人机交互界面为键盘输入和点阵式液晶显示,主要使用LCD1602液晶显示器,可以方便的输入数据和直观的显示中文。系统电源直接通过USB线与电脑的USB口连接供电。软件部分应用单片机C语言进行编程,实现了该设计的全部控制功能。该电子秤可以实现基本的称重功能(称重范围为0~10Kg,重量误差不大于±0.005Kg)可以设定商品的单价。整个系统结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。
关键词:单片机;压力传感器;HX711;液晶显示
Abstract
The design of 51 series single-chip microcomputer AT89S52 as the control core, realizes the basic control function of electronic scale. In the design of the system, in order to make better use of the modular design method, the design of each unit step function module, the hardware of the system can be divided into the smallest system, data acquisition, man-machine interface and power supply system four parts.
Minimum system consists of AT89S52 and peripheral circuits; data acquisition part consists of pressure sensor, signal pre-processing and A / D conversion part, including the 24 bit A / D converter HX711; man-machine interface for keyboard input and liquid crystal display, mainly using the Nokia 5110 LCD display, can easily input data and intuitive display of chinese. System power directly through the USB line and the computer USB port is connected with the power supply. Software application of single-chip C programming language, to achieve the design of the whole control function. The electronic scale can realize the basic function of weighing ( weighing range of 0 ~ 9.999Kg, weight error not greater than + / - 0.005Kg ) can be set to the price of goods, but also has the ultra range and less range of alarm function. The whole system has the advantages of simple structure, convenient use, complete function, high precision, has the certain development value.
Key words: single chip microcomputer; pressure sensor; HX711; liquid crystal display
第1章绪论
1.1引言
在我们生活中经常都需要测量物体的重量,于是就用到秤,但是随着社会的进步、科学的发展,我们对其要求操作方便、易于识别。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。电子秤向提高精度和降低成本方向发展的趋势引起了对低成本、高性能模拟信号处理器件需求的增加。通过分析近年来电子衡器产品的发展情况及国内外市场的需求,电子衡器总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。
1.2 选题背景和意义
称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。称重装置的应用已遍及到国民经济各领域,取得了显著的经济效益。电子秤是称重技术中的一种新型仪表,广泛应用于各种场合。电子秤与机械秤比较有体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。例如标签秤在超市中的应用已经是耳闻目睹的了。一张小小的标签包含着:品名、价格、重量等,一一列表在这小小的电子标签上。标签机的使用大大加快了销售速度,也方便了顾客。顶尖条码标签称有着许多卓越的特点,以太网功能使管理更加方便。因此,称重技术的研究和衡器工业的发展各国都非
常重视。50年代中期电子技术的渗入推动了衡器制造业的发展。60年代初期出现机电结合式电子衡器以来,随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。经过40多年的不断改进与完善,衡器技术也在不断进步和提高。从世界水平看,衡器技术已经经历了四个阶段,从传统的全部由机械元器件组成的机械称到用电子线路代替部分机械元器件的机电结合秤,再从集成电路式到目前的单片机系统设计的电子计价秤。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。
1.3 国内外电子称发展及成果
随着第二次世界大战后的经济繁荣,为了把称重技术引入到生产工艺过程中去,对称重技术提出了心动要求,希望称重过程自动化,为此电子技术渗入衡器制造业。在1954年使用了带新式打印机的倾斜式秤,其输出信号能控制商用结算器,并且用电磁铁机构与人工操作的按键与办公机器联用。在1960年开发出了与衡器相联的专门称重值打印机。当时带电子装置的衡器其称量工作是机械式的,但与称量有关的显示、记录、远传式控制器等功能是电子方式的。电子称的发展过程与其他事物一样,也经历了由简单到复杂、又粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程。特别是近30年以来,工艺流程中的现场称重、配料定量称重、以及产品质量的监测等工作,都离不开能输出信号的电子衡器。这是由于电子衡器不仅给出质量或重量信号,而且也能作为总系统中的一个单元承担着控制和检验功能,从而推进工业生产和贸易交往的自动化和合理化。近年来电子称已愈来愈多地参与到数据的处理和控制过程中。现代称重技术和数据系统已经成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可或缺的组成部分。随着称重传感器各项性能的不断突破,为电子称的发展奠定了基础,国外如美国、西欧等一些国家在20世纪60年代就出现了0.1%称量准确度的电子称,并在70年代中期约对75%的机械称进行了机电
结合式改造。
我国的衡器在20世纪40年代以前还全是机械式的,40年代开始发展了机电结合式的衡器。50年代开始出现了以称重传感器为主的电子衡器。80年代以来,我国通过自行研究引进消化吸收和技术改造。已由传统的机械式衡器步入集传感器、微电子技术、计算机技术与一体化的电子衡器发展阶段。目前,由于电子衡器具有称量快、读数方便、能在恶劣条件下工作、便于与计算机技术相结合而实现称重技术和过程控制的自动化特点,已被广泛应用于工矿企业、能源交通、商业贸易和科学技术等各个部门、随着称重传感器技术以及超大规模集成电路和微处理器的进一步发展,电子称重技术及其应用范围将更进一步的发展,并被人们越来越重视。电子衡器产品量大面广、种类繁多,从通用的各种规格的电子称到大型的电子称重系统,从单纯的称重、计价到生产过程检测系统的一个测量控制单元,其应用领域不断地扩大。根据近些年来电子称重技术和电子衡器的发展情况及电子衡器市场的需求,电子称的发展动向为:小型化、模块化、智能化、集成化;其技术性能趋向于速率高、准确度高、可靠性高;其应用性趋向综合性、组合性。
1.4 本论文的研究内容及结构安排
首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经V/F转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。按照设计的基本要求,系统可分为三大模块,数据采集模块、控制器模块、人机交互界面模块。其中数据采集模块由压力传感器、信号的前级处理和V/F转换部分组成。转换后的数字信号送给控制器处理,由控制器完成对该数字量的处理,驱动显示模块完成人机间的信息交换。此部分对软件的设计要求比较高,系统的大部分功能都需要软件来控制。在扩展功能上,本设计增加了一个过载报警提示。
本文的结构安排如下:
第1章绪论,简单介绍了本课题电子称的研究背景、研究目的、意义及国内外的研究状况。
第2章系统方案设计,本章主要内容是电子称的方案设计,首先是对整体的方案进行选择与设计,再针对各个模块(传感器、放大模块、信号转换模块、电
结合式改造。
我国的衡器在20世纪40年代以前还全是机械式的,40年代开始发展了机电结合式的衡器。50年代开始出现了以称重传感器为主的电子衡器。80年代以来,我国通过自行研究引进消化吸收和技术改造。已由传统的机械式衡器步入集传感器、微电子技术、计算机技术与一体化的电子衡器发展阶段。目前,由于电子衡器具有称量快、读数方便、能在恶劣条件下工作、便于与计算机技术相结合而实现称重技术和过程控制的自动化特点,已被广泛应用于工矿企业、能源交通、商业贸易和科学技术等各个部门、随着称重传感器技术以及超大规模集成电路和微处理器的进一步发展,电子称重技术及其应用范围将更进一步的发展,并被人们越来越重视。电子衡器产品量大面广、种类繁多,从通用的各种规格的电子称到大型的电子称重系统,从单纯的称重、计价到生产过程检测系统的一个测量控制单元,其应用领域不断地扩大。根据近些年来电子称重技术和电子衡器的发展情况及电子衡器市场的需求,电子称的发展动向为:小型化、模块化、智能化、集成化;其技术性能趋向于速率高、准确度高、可靠性高;其应用性趋向综合性、组合性。
1.4 本论文的研究内容及结构安排
首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经V/F转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。按照设计的基本要求,系统可分为三大模块,数据采集模块、控制器模块、人机交互界面模块。其中数据采集模块由压力传感器、信号的前级处理和V/F转换部分组成。转换后的数字信号送给控制器处理,由控制器完成对该数字量的处理,驱动显示模块完成人机间的信息交换。此部分对软件的设计要求比较高,系统的大部分功能都需要软件来控制。在扩展功能上,本设计增加了一个过载报警提示。
本文的结构安排如下:
第1章绪论,简单介绍了本课题电子称的研究背景、研究目的、意义及国内外的研究状况。
第2章系统方案设计,本章主要内容是电子称的方案设计,首先是对整体的方案进行选择与设计,再针对各个模块(传感器、放大模块、信号转换模块、电
源模块、人机交界模块)进行具体的方案论证及设计。
第3章系统硬件设计,在选定各个模块的方案中,对各方案的用到的主要芯片进行简单功能介绍及应用,并且给出了本次电路设计的具体电路图。
第4章系统软件设计,本章主要是介绍电子称的软件设计,给出了本次设计的主程序流程图及一些模块的子程序图。
最后,对本次的研究课题的主要工作及结果做出了总结与讨论,并且指出了本次研究工作中存在的不足和发现的一些问题。
第2章系统方案设计
2.1 硬件方案
单片机电子秤硬件方案如图1所示:
图1 单片机电子秤硬件方案
称重传感器感应被测重力,输出微弱的毫伏级电压信号。该电压信号经过电子秤专用模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换。HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片,内置增益控制,精度高,性能稳定。HX711芯片通过2线串行方式与单片机通信。单片机读取被测数据,进行计算转换,再液晶屏上显示出来。
矩阵键盘主要用于计算金额。当被测物体重量得到后,用户可以通过矩阵键盘输入单价,电子秤自动计算总金额并在液晶屏显示。电源系统给单片机、HX711电路及传感器供电。
2.2 称重传感器
传感器是测量机构最重要的部件。称重传感器本身具有单调性,其主要参数指标是灵敏度、总误差和温度漂移。
(1) 灵敏度
称重传感器的电灵敏度为满负荷输出电压与激励电压的比值,典型值是
2mV/V。当使用2 mV/V灵敏度和5 V激励电压的传感器时,其满度输出电压为10 mV。通常,为了使用称重传感器线性度最好的一段称重范围,应当仅使用满度范围的三分之二。因此满度输出电压应当大约为6mV。当电子秤应用于工业环境时,在6mV满度范围内测量微小的信号变化并非易事。
(2) 总误差
总误差是指输出误差和额定误差的比值。典型电子秤的总误差指标大约是0.02%,这一技术指标相当重要,它限制了使用理想信号调节电路所能达到的精确度,决定了ADC分辨率的选择以及放大电路和滤波器的设计。
(3) 漂移
称重传感器也产生与时间相关的漂移。
目前常用的称重传感器有电阻应变式压力传感器、电容压力传感器、压电式压力传感器。选用时应按稳定行、精度登记、寿命和安装环境要求考虑,其主要特点如下:
(1) 电容式压力传感器稳定性较差,精度和灵敏度较高,寿命较短,对环境要求苛刻,不易长距离传输。
(2) 压电式压力传感器稳定性好,精度和灵敏度高,寿命长,但大量程的压力传感器尚待进一步研究。
(3) 电阻应变式压力传感器稳定性较好,精度和灵敏度较高,寿命较长,对测量环境要求不太严格。
综上所述,选用电阻应变式压力传感器作为电子秤称重传感器是最为合适的。电阻应变式压力传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片(转换元件)受到拉伸或压缩应变片变形后,它的阻值将发生变化(增大或减小),从而使电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。电阻应变式传感器测量原理如图2所示。
图2 电阻应变式传感器测量原理
当垂直正压力P作用于梁上时,梁产生形变,电阻应变片R1、R3受压弯拉伸,阻值增加;R2、R4受压缩,阻值减小。电桥失去平衡,产生不平衡电压,不平衡电压与作用在传感器上的载菏P成正比,从而将非电量转化成电量输出。
R1、R2、R3和R4组成惠更斯电桥,将2对电阻应变片的阻值变化转变成输出电压,其工作原理如图3所示。
HX711模块全局图如下所示:
2.3 电子秤专用24位AD转换芯片HX711及其电路
HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。
该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道B,与其内部的低噪声可编程放大器相连。通道A 的可编程增益为128 或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B 则为固定的32 增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。 HX711内部方框图如图4所示。其外部管脚如图5所示。
图4 HX711内部方框图
图5 HX711外部管脚图
图5为HX711芯片应用于计价秤的一个参考电路图。该方案使用内部时钟振荡器(XI=0),10Hz的输出数据速率(RATE=0)。电源(2.7~5.5V)直接取用与MCU 芯片相同的供电电源。通道A与传感器相连,通道B通过片外分压电阻与电池相连,用于检测电池电压。
图6 HX711计价秤应用参考电路图
本课题设计的HX711电路如图7所示:
图7 HX711电路
第3章系统硬件设计
3.1 单片机AT89S52及其电路
(1) AT89S52 单片机概述
AT89S52系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。
(2) AT89S52 单片机特点
增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051; 工作电压: 5.5V - 3.5V(5V单片机);
工作频率范围:0~40MHz,相当于普通8051的 0~80MHz; 用户应用程序空间4K//8K/16k/32K/64K字节;
片上集成1280字节 RAM;
通用I/O口(32/36个),复位后为准双向口/弱上拉(普通8051传统I/O口);
ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器。 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA; 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片; 有EEPROM功能;
看门狗;
内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接1K电阻到地);
时钟源:外部高精度晶体/时钟,内部R/C振荡器;
用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟;
常温下内部R/C 振荡器频率为:5.0V 单片机为: 11MHz ~ 17MHz;
共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时
器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器;
外部中断I/O口4路,传统的下降沿中断或低电平触发中断,并新增支持
上升沿中断的PCA模块,Power Down模式可由外部中断唤醒; 通用全双工异步串行口(UART) ;
工作温度范围:-40 ~ +85℃(工业级) / 0 ~ 75℃(商业级); 封装:PDIP-40, PLCC-44。
(3) AT89S52 单片机管脚及封装
AT89S52单片机有多种封装形式,本设计中选用40DIP封装,其管脚定义如图8所示。
图8 AT89S52 管脚图
引脚功能说明:
VCC/GND: 电源/接地引脚;
Port 0:
P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端;P0还可以用作总线方式下的地址数据复用管脚,
用来操作外部存储器。
在这种工作模式下,P0口具有内部上拉作用。对内部Flash程序存储器编程时,接收指令字节、校验程序、输出指令字节时,要求外接上拉电阻;
Port 1:
P1是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用; 另外,P1.0、P1.1可以分别被用作定时器/计数器2的外部计数输入(P1.0/T2)和触发输入(P1.1/T2EX);对内部Flash程序存储器编程时,接收低8位地址信息;
Port 2:
P2是一个带有内部上拉电阻的8位双向I/0端口;输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用; P2口在存取外部存储器时,可作为高位地址输出;内部Flash程序存储器编程时,接收高8位地址和控制信息;
Port 3:
P3是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
P3引脚功能复用见下表:
表3.2 P3引脚功能复用
RST:
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此管脚时,将使单片机复位。只要这个管脚保持高电平,51芯片便循环复位。复位后P0—P3口均置1,管脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序;
XTAL1、XTAL2 :
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部
振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz至24MHz内选择,电容取30PF左右。
ALE/PROG:
访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节,即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6),在访问外部数据存储器时,出现一个ALE脉冲;
PSEN:
该引脚是外部程序存储器的选通信号输出端。当AT89S52由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲,即两次有效。但访问外部数据存储器时,将不会有脉冲输出;
EA/Vpp:
外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89S52只访问外部程序存储器(地址为0000H-FFFFH), 这时该引脚必须保持低电平;
本课题设计的电子秤的单片机应用电路如图9所示:
图9 AT89S52单片机电路
3.2 液晶屏电路
该液晶为LCD1602显示信息。该显示模块既可以当成普通的图像型液晶显示模块使用(即显示普通图像型的单色图片功能),可以从字库IC 中读出内置的字库的点阵数据写入到LCD 驱动IC 中,以达到显示汉字的目的。其接口引脚功能介绍:
LCD1602液晶显示器如下所示:
3.3 电源电路
本设计采用USB接口供电,电源电压5V。同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。其电路原理如图所示。
系统电路原理图如下所示:
第4章系统软件设计
在单片机应用系统的开发中,软件的设计是最复杂和困难的,大部分情况下工作量都较大,特别是对那些控制系统比较复杂的情况。如果是机电一体化的设计人员,往往需要同时考虑单片机的软硬件资源分配。本系统的软件设计主要分为系统初始化、按键、显示处理及信号频率输入处理。
程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。其步骤可概括为以下三点:
⑴分析系统控制要求,确定算法:对复杂的问题进行具体的分析,找出合理的计算方法及适当的数据结构,从而确定编写程序的步骤。这是能否编制出高质量程序的关键。
⑵根据算法画流程图:画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。
⑶编写程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。
程序数据的一种理想方法是结构化程序设计方法。结构化程序设计是对利用到的控制结构类程序做适当的限制,特别是限制转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。根据系统的控制任务,本系统的软件设计主要由主程序、初始化程序、显示子程序、数据采集子程序和延时程序等组成。
4.1 C语言在单片机中的应用
C语言是一种通用的计算机程序设计语言,在国际上非常流行。它既可以用来编写计算机的系统程序,也可以用来编写一般的应用程序。以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此。C语言是当前最流行的程序设计语言,它像其它高级语言一样,面向用户,面向解题的过程,编程者不必熟悉具体的计算机内部结构和指令;C语言又像汇编语言一样,可以对机器硬件进行操作。如进行端口I,0操作、位操作、地址操作,并可内嵌汇编指令,将汇编指令当作它的语句一样。我们知道,汇编语言将涉及计算机硬件,所以C语言又像低级语言一样,可以对计算机硬件进行控制,因此人们把它称为介于高级语言与低级语言之间的一种中级语言。正是因为C语言具有这样的特性,所以很适合编写要对硬件进行操作的软件程序。本文采用C语言进行编写.因为此系统软件比较,其存储量较大,因此必须应用C语言编程了[9]。
4.2 电子称的软件设计与实现
电子称软件设计均采用模块化设计,整个程序包括主程序、定时中断程序、INTO中断程序按键程序、数据处理子程序(双字节乘法、二一十进制转换程序及逆转换程序)、LCD十六位液晶静态显示子程序等模块。所有程序均采用C汇编语言编写。电子计价秤的软件设计思路说明如下:主程序的作用为程序初始化,计算单价木单重(单价和单重分别在定时中断程序和INT0外部中断程序中获得),并时时显示十进制的单重,单价,总价。设定T0为计数工作方式,T1为定时工作方式。其中R0为标志位寄存器当为OOH时为正常显示方式。当为01H时为累计显示方式,在T1定时中断程序中。一秒钟采样物料重量(已转成脉冲频率),并赋值重量计算RAM区和显示RAM区。在INTO外部中断程序中,采样单价并赋值单价计算。
4.3主程序流程图
主程序流程图给出了系统工作的基本过程,描述了信号的基本流向,起到一个向导的作用。
4.4 源代码
#include "config.h"
void main(void)
{
LCD_Initial(); 图4.1主程序流程图
init_sys();
beep=1;
zero=ReadCount()/1000;
for(;;)
{
function();
Display();
}
}
sbitLcdRs = P1^0;
sbitLcdEn = P1^1;
sfrDBPort = 0x80;
voidLCD_delay(unsigned char t)
{
unsigned char i=0;
for(;i
for(;t;t--);
}
voidLCD_Write(bit style, unsigned char input)
{
LcdRs=style;
DBPort=input;
LcdEn=1;
LCD_delay(10);
LcdEn=0;
}
voidLCD_Initial(void)
{
LCD_Write(0,0x38);
LCD_Write(0,0x0c);
LCD_Write(0,0x01);
LCD_Write(0,0x06);
}
voidGotoXY(unsigned char x, unsigned char y)
{
if(y==1) LCD_Write(0,0x80|x);
if(y==2) LCD_Write(0,0xc0|x);
}
void Print(unsigned char x,unsigned char y,unsigned char *str)
{
GotoXY(x,y);
while(*str!='\0')
LCD_Write(1,*str++);
}
unsigned char keyscan(void)
{
P3=0x0f;
if((P3&0x0f)!=0x0f)
{
flag=1;
P3=0xef;
switch(P3&0x0f)
{
case 0x0e:while((P3&0x0f)!=0x0f);return(7);
case 0x0d:while((P3&0x0f)!=0x0f);return(8);
case 0x0b:while((P3&0x0f)!=0x0f);return(9);
case 0x07:while((P3&0x0f)!=0x0f);return(10);
default: break;
}
P3=0xdf;
switch(P3&0x0f)
{
case 0x0e:while((P3&0x0f)!=0x0f);return(4);
case 0x0d:while((P3&0x0f)!=0x0f);return(5);
case 0x0b:while((P3&0x0f)!=0x0f);return(6);
case 0x07:while((P3&0x0f)!=0x0f);return(11);
default: break;
}
P3=0xbf;
switch(P3&0x0f)
{
case 0x0e:while((P3&0x0f)!=0x0f);return(1);
case 0x0d:while((P3&0x0f)!=0x0f);return(2);
case 0x0b:while((P3&0x0f)!=0x0f);return(3);
case 0x07:while((P3&0x0f)!=0x0f);return(12);
default: break;
}
P3=0x7f;
switch(P3&0x0f)
{
case 0x0e:while((P3&0x0f)!=0x0f);return(15);
case 0x0d:while((P3&0x0f)!=0x0f);return(0);
case 0x0b:while((P3&0x0f)!=0x0f);return(14);
case 0x07:while((P3&0x0f)!=0x0f);return(13);
default: break;
}
}
else return(key);
}
sbit ADDO = P3^7;
sbit ADSK = P3^6;
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for(i=0;i
{
ADSK=1;
Count=Count
ADSK=0;
if(ADDO)
Count++;
}
ADSK=1;
Count=Count^0x800000;
ADSK=0;
return(Count);
}
sbit K1=P1^5;
sbit K2=P1^6;
bit K1flag,K2flag,K3flag,cflag;
voidinit_sys(void)
{
TMOD=0x01;
TH0=(65536-5000)/256; //50ms
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0(void) interrupt 1 //定时器0方式1,50ms中断一次 {
TH0=(65536-5000)/256; //50ms
TL0=(65536-5000)%256;
t++;
if(t==250)
{
t=0;
AdVal=ReadCount();
weight=AdVal/1000-zero;
weight=weight*2328/1000;
// if(weight>40000)
// {
// weight=40000;
// }
}
}
void Delay(unsigned int t)
{
unsignedinti,j;
for(i=t;i--;i>0)
for(j=110;j--;j>0);
}
void Display(void)
{
GotoXY(0,1);
LCD_Write(1,0x30+weight/10000%10);
LCD_Write(1,0x30+weight/1000%10);
Print(2,1,".");
LCD_Write(1,0x30+weight/100%10);
LCD_Write(1,0x30+weight%100/10);
LCD_Write(1,0x30+weight%10);
Print(6,1,"KG"); //KG显示
Print(10,1,"MAX:");
LCD_Write(1,0x30+Max/10);
LCD_Write(1,0x30+Max%10);
// //重量显示
// Print(10,2,"MIN:");
// LCD_Write(1,0x30+Min/10);
// LCD_Write(1,0x30+Min%10);
}
void function(void)
{
// unsigned char temp;
// temp=keyscan();
// GotoXY(0,1);
// LCD_Write(1,0x30+temp/10);
// LCD_Write(1,0x30+temp%10);
if(K1==0) K1flag=1;
if(K1 && K1flag)
{
K1flag=0;
Max++;
if(Max>10)
{
Max=10;
}
}
if(K2==0) K2flag=1;
if(K2 && K2flag)
{
K2flag=0;
Max--;
if(Max
{
Max=1;
}
}
if(weight>=Max*1000*1.2)
{
beep=0;
Led=0;
Print(0,2,"Warm:Pass 20%!
}
else if(weight>=Max*1000*1.1)
{
beep=0; ");
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
}
Led=0; Print(0,2,"Warm:Pass 10%! "); } else if(weight>=Max*1000*1.05) { beep=0; Led=0; Print(0,2,"Warm:Pass 5%! "); } else if(weight>=Max*1000*9/10) { beep=0; Print(0,2,"Warm:Reach 90%!"); } else { beep=1; Led=1; Print(0,2," "); } if(K3==0) K3flag=1; if(K3 && K3flag) { K3flag=0; zero=ReadCount()/1000; } if(weight>Max*1000 || weight
总结
经过几个月的努力,终于按照毕业设计进度要求如期完成了实用电子秤控制系统的硬件设计任务。在做毕业设计的过程中,虽然碰到了不少的困难,但是在老师的指导以及自己的努力下,终于取得了一定成果。
一、主要工作及结论
1、熟悉AT89S52单片机功能及工作特性,掌握其接口扩展方法。
2、通过对数据采集的分析,了解了各种传感器及A/D转换器对信号的转换、传输有了更深的认识。
3、对键盘和显示器进行选型比较,得出各种型号优劣比。
4、采用面向对象的思想,分层次、分模块构建设计的总体框架。
二、功能描述
1、采用高精度电阻应变式压力传感器,测量量程0-10kg,测量精度可达0.001kg。
2、采用电子秤专用模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换,HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片。
3、采用AT89S52单片机作为主控芯片,实现称重、计算价格等主控功能。
4、采用LCD1602液晶屏显示称重重量、单价、总价等信息。
5、采用2矩阵键盘进行人机交互,键盘容量大,操作便捷。
6、系统通过USB电源供电,单片机程序也可通过USB线串行下载。