毕业设计(论文)
基于51单片机的双精度电子称设计
| 系 别 | 自动化工程系 |
| 专业名称 | 测控技术与仪器 |
| 班级学号 | 5080930 |
| 学生姓名 | 靳姗 |
| 指导教师 | 齐世清 |
基于51单片机的双精度电子称设计
摘 要
随着数字化技术的快速发展和应用,电子衡器称重技术同样也得到了广泛的发展和应用,各种数字化智能化的电子衡器逐渐问世,但商用电子称作为电子衡器的重要一部分,在中小型市场的智能化并没有得到普及,依然以杆秤、台秤和简易电子称为主的商用电子秤,存在着精度差、易损坏、难维修等缺陷,尤其是在进行轻微物体如茶叶、药材等的测量时误差更明显。
本文设计的双精度电子称主要以ATS52单片机为核心,通过Proteus软件和KEIL软件实现了对电子称的功能仿真设计。主要分为五个模块:双精度的物体重量采集模块、单片机处理模块、键盘控制模块、数据显示模块以及软件驱动模块。以不同压力传感器采集压力参数,经过信号处理和A/D转换送给单片机,单片机通过重量参数自动选择12位精度值或8位精度值进行运算处理,最终将键盘输入的单价值和总价值在LCD128液晶上进行实时显示。整个电子称系统能够智能化的实现双精度自动测量、自动报警、直观显示等功能,具有操作方便,双精度测量准确,成本低、稳定性可靠性高等特点,可以更好的应用于不同的应用场合,适应了中小型市场的需求。
关键词:双精度电子称,单片机 ATS52,称重传感器,A/D转换,液晶显示器
Said design based on 51 single-chip double-precision electronic
Author:Jin Shan
Tutor:Qi Shiqing
Abstract
With the rapid development and application of digital technology, electronic weighing technology has been developed and applied extensively .And a variety of intelligent digital electronic weighing is emerging progressively, but in small and middle market, the commercial electronics, which is an important part of the electronic weighing, is still limited to the simple electronics said such as steelyard, platform scales and simple electronics. All these are known as the main commercial electronic scales, but the existence of accuracy, easily damage, and difficult to repair defects also affect itself. Especially during weighing some minor objects such as tea, medicinal herbs, mistakes is easy to appearance through measuring.
This paper, the design of the double-precision electronic using microcontroller ATS52 as the core, achieve the simulation capabilities of electronic design by using Proteus Software and KEIL software. Now dividing this paper into five main modules: how to collect the weight of the object with this double-precision electronic said module, how to deal with the data through single-chip machine, how to control keyboard module, the display module and how to drive software module. Fristly, use different pressure sensor to acquire pressure parameters. Secondly the signal processor and A / D conversion work out the data, finally given to the MCU. Thridly according to the data above the MCU will automatically select whether the 12 precision values or 8 precision value computing processor. Ultimately the input through the keyboard will be showed on the LCD128 real-time display. The entire electronic system can intelligently accomplish double-precision measurement automatically, automatic alarm, visual display, at the same time, it’s easy to operate, accurate measurement, low cost, stability and high reliability. Based on the introduction above ,it can be used in different applications occasions, and it can adapt to the needs of small and medium-sized market.
Key Words: Double-precision electronic, ATS52, Load sensor, A/D converter, LCD display
1 绪论
1.1 课题研究背景
电子衡器称重技术是现代称重技术和控制系统工程的重要基础之一,自50年代中期电子技术渗入到衡器的辅助测量装置,60年代初期出现机电结合式电子衡器以来,经过40多年的不断改进和完善,从最初的机电结合型发展到现在全电子型和数字化智能型,电子衡器称重技术经历了长远的发展,其便于与电子计算机结合而实现称重计量与过程控制自动化的特点,在工商贸易、能源交通、冶金矿山、轻工食品、医药卫生、航天航空等部门得到了广泛的应用。而衡器作为国家法定计量器具,自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备。电子衡器作为工业控制系统和商业管理系统的一个组成部分,不仅是提供重量数据的单体仪表,而且推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。因此衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。
商用电子称作为电子衡器产品的一部分,随着电子衡器技术的发展,也同样在技术装备和检测试验手段上达到了国际90年代中期的水平,从机械称到机电称再到电子称在称重装置智能化的道路上取得长足的进步,但就总体而言,我国商用电子称产品的数量和质量与工业发达国家相比还有较大差距,其主要差距是技术与工艺不够先进、工艺装备与测试仪表老化、开发能力不足、产品的品种规格较少、功能不全、价格昂贵、稳定性和可靠性较差等。这些缺陷在中小市场上尤显不足,因此大部分产品还都是相对比较简易的杆秤或是操作简便的电子秤,这些称重仪器在进行粗精度测量时还可以满足要求,但要进行高精度的称量,比如药材、茶叶等微量商品时,往往无法满足要求,因此研发一种多精度简易的电子商用称将具有很大的研究意义和研究价值。
1.2电子衡器的研究现状
1.2.1 国内外发展情况
从国际上看,随着二十世纪战后的经济繁华,为了把称重技术引入到生产工艺过程中去,对称重技术提出了新的要求,希望称重过程自动化,为此电子技术渗入衡器制造业。在1954年使用了带新式打印机的倾斜式称,其输出信号能控制商用结算器,并且用电磁铁机构与人工操作的按键与办公机器联用。在1960年开发出了与衡器相联的专门称重值打印机。当时带电子装置的衡器其称重工作是机械式的,但与称重有关的显示、记录、远传式控制器等功能是电子方式的。电子称的发展过程与其他事物一样,也经历了由简单到复杂、由粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程。特别是近30年以来,工艺流程中的现场称重、配料定量称重以及产品质量的检测等工作,都离不开输出信号的电子衡器。这是由于电子衡器不仅给出质量或重量信号,而且也能作为总系统中的一个单元承担着控制盒检验功能,从而推进工业生产和贸易交往的自动化和合理化。近年来电子称已成为工艺技术、储运技术、顶包装技术、收货业务及商业销售领域中不可或缺的组成部分。随着称重传感器各项性能的不断突破,为电子称的发展奠定了基础,国外如美国、西欧等一些国家在20世纪60年代就出现了0.1%称量准确度的电子称,并在70年代中期约对75%的机械进行了机电结合式改造。
回首国内,我国的衡器在20世纪40年代以前还全是机械式的,40年代开始发展了机电结合式的衡器。50年代开始出现了以称重传感器为主的电子衡器。80年代以来,我国通过自行研究引进消化吸收和技术改造。已由传统机械式衡器步入集传感器、微电子技术、计算机技术与一体化的电子衡器发展阶段。目前,由于电子衡器具有称量快、读数方便、能在恶劣条件下工作、便于与计算机技术结合而实现称重技术和过程控制的自动化特点,已被广泛应用于工矿企业、能源交通、商业贸易和科学技术等各个部门,但商用电子称在国内的发展,并没有像其他功用的电子秤一样取得飞速的发展,只有在部分大型超市可以看到多功能电子称的运用,但其造价高操作复杂,无法在中小市场得到广泛的推广应用,中小市场仍然依赖于传统的杆秤和简易的低精度电子称,但随着电子技术的不断发展,以及衡器工艺技术的不断完善,更多品种的的电子称研发必然会推动中小市场电子秤的改进。
1.2.2电子称的发展方向
电子称的发展动向为:小型化、模块化、智能化、集成化;其技术性能趋向于速率高、准确度高、可靠性高;其应用性趋向于综合性、组合性;而且更需要向多种功能的方向发展。
目前电子称的附加功能主要有以下几种:
(1)具有皮重、净重显示、语音播报等功能呢。电子称部分已具备了动态称量模式,即通过进行算术平均、积分处理和自动调零等方法,消除上述的误差;
(2)电子称附加了计算机信息补偿处理装置,可以进行自诊断、自校正和多种补偿计算和处理;
(3)附加单价总额计算功能。目前的电子称有附加多种计算和数据额处理功能,以满足多种使用的要求。
1.3课题的研究意义
今后,随着电子高科技的快速发展,电子称重技术也定将日新月异。功能更加齐全的高精度的先进电子称将会不断问世,其应用范围也会更加广阔。从实际情况看来,目前中小型市场上使用的称量工具,主要还是以杆秤、台秤、小型简易电子称为主,操作简单但精度比较低,而且调整时间长,运行不可靠,易损件多,维修困难,能源消耗大,生产成本比较高。这些特点导致了中小型市场上电子称产品的整体水平偏低,产品质量在低水平徘徊。在这些中小型市场,称重仪器选择的局限性,已逐渐无法满足越来越走向现代化的需求,对电子称的要求不仅仅要简便而且要更公平更合理,对精度不仅有要求,对功能也有更多的期望,电子称不仅要称量较重物体,还能够更精确的称量较轻的物体,比如茶叶和药材等,要求精度更高,称量更准确。双精度电子称便是基于此而提出的研发课题,不仅能够自动切换精度进行测量不同物体,还能够克服上述诸多缺点,实现操作简易、维修容易、调整时间短、不易损坏等特点,还具有较大的实用价值。
1.4本文的设计思路
随着微控制器技术、传感器技术的发展和计算机技术的广泛应用,电子产品的更新速度达到了日新月异的地步。本系统在设计过程中,除了能实现系统的基本功能外,设计两个称重电路以对应不同精度、不同承重范围的物品,还增加了超重提示功能,在连接电路图时,选用尽量少的管脚来实现设计的全部功能,这样方便以后的功能拓展,比如可以实现和其他机器或设备(包括上位PC机和数据存储设备)交换数据。除此之外,系统的微控制器部分选择了兼容性比较好的AT系列单片机,在系统更新换代的时候,只需要增加很少的硬件电路,甚至仅仅删改系统控制程序就能够实现。
电子秤不仅要向高精度、高可靠方向发展,而且更需向多种功能的方向发展。据悉, 目前电子秤的附加功能主要有这些方面:电子秤附加了计算机信息补偿处理装置,可以进行自诊断、自校正和多种补偿计算和处理;具有皮重、净重显示等特种功能。电子秤有些已具备了动态称量模式, 即通过进行算术平均、积分处理和自动调零等方法, 消除上述的误差;附加特殊的数据处理功能。目前的电子秤有附加多种计算和数据处理功能, 以满足多种使用的要求。另外由于实际应用当中,称重器可以有一定量的过载,但不能超出要求的范围,系统自动零显示,提示出错。
综上所述,本课题的主要设计思路是:利用压力传感器采集因压力变化产生的电压信号,经过电压放大电路放大,然后再经过模数转换器转换为数字信号,最后把数字信号送入单片机。单片机经过相应的处理后,得出当前所称物品的重量及总额,然后再显示出来。此外,还可通过键盘设定所称物品的价格。本文主要主要以下几个方面的工作:
(1)详细讲解了称重器工作原理。
(2)对称重器系统进行总体方案的设计。
(3)对于称重器的硬件系统,重点介绍关于精度、转换速率的压力传感器和A/D转换模块器件的选取。
(4)对于称重器的软件系统,通过解说LCD液晶显示的使用及键盘的工作原理,对于主程序的编写与调试提供重要的依据。
(5)依据称重系统的总电路,通过Keil软件C语言编程和Proteus仿真,实现模拟的称重显示。
(6)对称重系统的测量值与显示值的差值,进行系统的调试与误差校正。
主要技术指标为:称量范围0~10Kg;分度值0.01kg;精度等级Ⅲ级;电源DC1.5V(一节5号电池供电)。
这种高精度智能电子秤体积小、计量准确、携带方便,集重量称量功能与价格计算功能于一体,能够满足商业贸易和居民家庭的使用需求。
图1.1 设计思路框图
2 系统方案论证与硬件选型
2.1系统总体设计方案的比较与论证
在设计系统时,针对各个模块实现的功能来设计电子秤的方案有以下几种:
方案一 数码管显示。结构如图2.1所示:
图2.1 数码管显示方案
此方案利用数码管显示物体重量,简单可行,可以采用内部带有模数转换功能的单片机。此设计的硬件部分简单,接口电路易于实现,并且在编程时大大减少程序量,在电路结构上只有简单的输出输入关系。缺点是:硬件部分简单,虽然可以实现电子称基本的称重功能,但是不能实现外部数据的输入,无法实时地设定各种控制参数。由于数码管只能实现简单的数字和英文字符的显示,不能显示汉字以及其他的复杂字符,不能达到显示购物清单的要求。又因为采用了具有模数转换功能的单片机,系统电路过于简单,系统硬件的扩展必受到,电子秤的功能过于单一,达不到设计的标准。
方案二 在前一种方案的基础上进行扩展,增加一键盘输入装置,增加外界对单片机内部的数据设定,使电子称实现称重计价的功能。结构简图如图2.2所示:
图2.2 带有键盘输入的结构简图
此方案设计的电子秤,可以实现称物计价功能,但是局限于数码管的功能,在显示时只能显示单价、购物总额以及简单的货物代码等。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到,所以此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O接口供数码管使用,比较麻烦。
方案三 前端信号处理时,选用放大、信号转换等措施,尤其在显示方面采用具有字符图文显示功能的LCD显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容。结构简图如图2.3所示:
图2.3 LCD显示的方案
目前单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入单片机,由单片机对测量信号进行处理并根据相应的数据关系译码显示出被测物体的重量。单片机控制适合于功能比较简单的控制系统,而且其具有成本低,功耗低,体积小算术运算功能强,技术成熟等优点。但其缺点是外围电路比较复杂,编程复杂。使用这种方案会给系统设计带来一定的难度。
方案四 采用以现场可编程门阵列(FPGA)为控制核心,利用EDA软件编程,下载烧制实现。系统集成于一片Xilinx公司的SpartanⅡ系列XC2S100E芯片上,体积大大减小、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规模的集成电路。
采用FPGA测频测量精度高,测量频率范围大,而且编程灵活、调试方便,设计要求的精度较高,所以要求系统的稳定性要好,抗干扰能力要强。从下图中可以看到系统的基本工作流程和各单元电路所用到的核心器件。其中控制器采用Xilinx公司可编程器件FPGA为核心,基于ISE软件平台,采用VHDL编程实现数据处理、LED和LCD驱动、时钟芯片的I2C通讯、键盘控制等模块。结构简图如图2.4所示:
图2.4 电子称系统的组成结构图
FPGA的逻辑容量密度大,集成度高,可大大减少印刷电路板的空间,减低系统功耗,同时还可以提高设计的工艺性和产品的可靠性。
虽然以FPGA为核心的电子称系统很优化,但只有在大规模和超大规模集成电路中其高集成度才能更好得以体现。其主要在PC机接口卡的总线接口、程控交换机的信号处理与接口、雷达声纳系统的成像控制与数字处理、数控机床的测试系统等方面有广泛应用。鉴于本电子称的设计并不太复杂,单片机完全能实现所需功能,所以在具体设计时,采用了第三种设计方案。
2.2 硬件方案设计与论证
2.2.1 CPU的选择方案
本文基于以单片机为主控制器的设计,可以容易地将计算机技术和测量控制技术结合在一起,组成新型的只需要改变软件程序就可以更新换代的“智能化测量控制系统”。这种新型的智能仪表在测量过程自动化、测量结果的数据处理以及功能的多样化方面,都取得了巨大的进展。再则由于系统没有其它高标准的要求,又考虑到本设计中程序部分比较大,根据总体方案设计的分析,设计这样一个简单的的系统,可以选用带EPROM的单片机,由于应用程序不大,应用程序直接存储在片内,不用在外部扩展存储器,这样电路也可简化。INTEL公司的8051和8751都可使用,在这里选用ATMENL生产的ATSXX系列单片机。ATSXX系列与MCS-51相比有两大优势:第一,片内存储器采用闪速存储器,使程序写入更加方便;第二,提供了更小尺寸的芯片,使整个硬件电路体积更小。此外价格低廉、性能比较稳定的MCPU,具有8K×8ROM、256×8RAM、2个16位定时计数器、4个8位I/O接口。这些配置能够很好地实现本仪器的测量和控制要求。
最后我们最终选择了ATS52这个比较常用的单片机来实现系统的功能要求。ATS52内部带有8KB的程序存储器,基本上已经能够满足我们的需要。
2.2.2传感器的选择
传感器的定义:能感受规定的被测量,并按照一定规律转换成可用输出信号的器件或装置。通常传感器由敏感元件和转换元件组成。其中敏感元件指传感器中能直接感受被测量的部分,转换部分指传感器中能将敏感元件输出量转换为适于传输和测量的电信号部分。现代科技的快速发展使人类社会进入了信息时代,在信息时代人们的社会活动将主要依靠对信息资源的开发和获取、传输和处理,而传感器处于自动检测与控制系统之首,是感知获取与检测信息的窗口;传感器处于研究对象与测控系统的接口位置,一切科学研究和生产过程要获取的信息,都要通过它转换为易传输与处理的电信号。
称重传感器是力传感器当中一个重要的品种,实际应用及其广泛.称重传感器中最多的是电阻应变式称重,应变片是称重传感器的核心单元,弹性体是基础组成部分.称重传感器按结构类型分主要有S行双连孔式传感器,柱式传感器,轮辐式与桥式传感,柱环式传感器,剪切梁式传感器和单S梁式传感器.S行双连孔式传感器量程范围一般在2Kg到500Kg,这种类型称重传感器抗偏,抗侧能力较强。柱式传感器的测量范围都很大,一般最大可以达到几百吨,它刚性好,抗过载能力强,加工也简单,重量也比较轻。轮辐式传感器由于结构的对称性,所以能够承受大的侧向力,由于它有较大的滞后误差,很多场合都被桥式传感器所取代。桥式传感器的弹性体形状象桥,因此得得名。桥式传感器精度高,标定方便,普遍应用于汽车秤跟平台秤等多个场合。柱环式传感器由于本身的结构特性目前大多仅用于测量拉力,其精度一般在0.03到0.05之间。剪切梁式传感器运用剪切原理制作而成,精度跟稳定性都很高,一般都不需要要线性补偿都能达到要求。它不受测力点变化的影响。测量范围在几十千克的场合一般选用单S梁式传感器,它不适合在振动大的时候使用。
称重传感器在选用过程中一般要考虑以下问题:
(1)安装要求,有些场合就直适合某种特定的称重传感器。
(2)使用环境条件,如需密封、防爆等。
(3)传感器的精度等级。精度等级通常由弹性体结构决定,以及处理过程中是否有线性补偿。
(4)传感器的量程范围。估算被测物体的最大重量在多少,要想获得较准备的测量数值一般选择的量程是被测体最大重量的2到2.5倍。
(5)传感器使用过程受温度影响的特性和蠕变特性
经过查询资料对比,适合本设计的可以用L-PSIII型传感器,最大量程为20Kg,精度为0.01%,满量程时误差为0.002Kg;也可以采用SP20C-G501电阻应变式传感器,其最大量程为7.5 Kg,精度为0.05%,满量程时误差为0.01Kg。在称重0~2Kg的物体时,选用L-PSIII型传感器组成点称重电路,由于L-PSIII型传感器精度高,具有过载保护装置。在称重2Kg~10Kg的物体时,选用SP20C-G501电阻应变传感器组成的称重电路,由于SP20C-G501由组合式S型梁结构及金属箔式应变计构成,同样具有过载保护装置。考虑到惠斯登电桥具有诸如抑制温度变化的影响,抑制干扰,补偿方便等优点,两种电路中的传感器电路均采用惠斯登电桥设计,所以两种传感器在测量不同重量的物体时,均使得测量达到精度高、温度特性好、工作稳定等优势,广泛用于各种结构的动、静态测量及各种电子秤的一次仪表。SP20C-G501称重传感器主要由弹性体、电阻应变片电缆线等组成,其工作原理如图2.5所示:
图2.5 传感器工作原理图
其工作原理:用应变片测量时,将其粘贴在弹性体上。当弹性体受力变形时,应变片的的敏感栅也随之变形,其阻值发生相应的变化,通过转换电路转换为电压或电流的变化。由于内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式(2.1)给出:
(2.1)
2.2.3 放大电路的选择方案
方案一 利用普通低温漂运算放大器构成多级放大器。
普通低温漂运算放大器构成多级放大器会引入大量噪声。由于信号转换器需要很高的精度,所以几毫伏的干扰信号就会直接影响最后的测量精度。所以,此种方案不宜采用。
方案二 由高精度低漂移运算放大器构成差动放大器。
差动放大器具有高输入阻抗,增益高的特点,可以利用普通运放(如OP07)做成一个差动放大器,如图2.6所示:
图2.6 利用普通运放构成的放大器
电阻R1、R2和电容C1、C2、C3、C4用于滤除前级的噪声,C1、C2为普通小电容,可以滤除高频干扰,C3、C4为大的电解电容,主要用于滤除低频噪声。
优点:输入级加入射随放大器,增大了输入阻抗,中间级为差动放大电路,滑动变阻器R6可以调节输出零点,最后一级可以用于微调放大倍数,使输出满足满量程要求。输出级为反向放大器,所以输出电阻不是很大,比较符合应用要求。
缺点:此电路要求R3、R4相等,误差将会影响输出精度,难度较大。实际测量,每一级运放都会引入较大噪声,对精度影响较大。
方案三 采用专用仪表放大器,如:AD620,INA126等。
此类芯片内部采用差动输入,共模抑制比高,差模输入阻抗大,增益高,精度也非常好,且外部接口简单。
以 INA126为例,接口如下图所示:
图2.7 INA126仪表放大结构图
放大器增益 ,通过改变RG的大小来改变放大器的增益。INA126 具有体积小、功耗低、精度高、噪声低和输入偏置电流低的特点。其最大输入偏置电流为20nA,这一参数反映了它的高输入阻抗。INA126在外接电阻RG时,可实现1~1000范围内的任意增益;工作电源范围为±2.3~±18V;最大电源电流为1.3mA;最大输入失调电压为125V;频带宽度为120kHz(在G=100时)。
基于以上分析,我决定采用制作方便而且精度很好的专用仪表放大器INA126。
2.2.4 A/D转换器的选择
A/D转换部分是整个设计的关键,这一部分处理不好,会使得整个设计毫无意义。目前,世界上有多种类型的ADC,有传统的并行、逐次逼近型、积分型ADC,也有近年来新发展起来的∑-Δ型和流水线型ADC,多种类型的ADC各有其优缺点并能满足不同的具体应用要求。目前, ADC集成电路主要有以下几种类型:
(1)并行比较A/D转换器:如ADC0808、 ADC0809等 。并行比较ADC是现今速度最快的模/数转换器,采样速率在1GSPS以上,通常称为“闪烁式”ADC。它由电阻分压器、比较器、缓冲器及编码器四种分组成。这种结构的ADC所有位的转换同时完成,其转换时间主取决于比较器的开关速度、编码器的传输时间延迟等。缺点是:并行比较式A/D转换的抗干扰能力差,由于工艺,其分辨率一般不高于8位,因此并行比较式A/D只适合于数字示波器等转换速度较快的仪器中,不适合本系统。
(2) 逐次逼近型A/D转换器:如:ADS7805、ADS7804等。逐次逼近型ADC是应用非常广泛的模/数转换方法,这一类型ADC的优点:高速,采样速率可达 1MSPS;与其它ADC相比,功耗相当低;在分辨率低于12位时,价格较低。缺点:在高于14位分辨率情况下,价格较高;传感器产生的信号在进行模/数转换之前需要进行调理,包括增益级和滤波,这样会明显增加成本。
(3)积分型A/D转换器:如:ICL7135、ICL7109、ICL1549、MC14433等。积分型ADC又称为双斜率或多斜率ADC,是应用比较广泛的一类转换器。它的基本原理是通过两次积分将输入的模拟电压转换成与其平均值成正比的时间间隔。与此同时,在此时间间隔内利用计数器对时钟脉冲进行计数,从而实现A/D转换。积分型ADC两次积分的时间都是利用同一个时钟发生器和计数器来确定,因此所得到的表达式与时钟频率无关,其转换精度只取决于参考电压VR。此外,由于输入端采用了积分器,所以对交流噪声的干扰有很强的抑制能力。若把积分器定时积分的时间取为工频信号的整数倍,可把由工频噪声引起的误差减小到最小,从而有效地抑制电网的工频干扰。这类ADC主要应用于低速、精密测量等领域,如数字电压表。其优点是:分辨率高,可达22位;功耗低、成本低。缺点是:转换速率低,转换速率在12位时为100~300SPS。
(4)压频变换型ADC:其优点是:精度高、价格较低、功耗较低。缺点是:类似于积分型ADC,其转换速率受到,12位时为100~300SPS。
A/D转换器选用的原则:
①A/D 转换器的位数。A/D 转换器决定分辨率的高低。在系统中,A/D 转换器的分辨率应比系统允许引用误差高一倍以上。
②A/D 转换器的转换速率。不同类型的A/D 转换器的转换速率大不相同。积分型的转换速率低,转换时间从几豪秒到几十毫秒,只能构成低速A/D 转换器,一般用于压力、温度及流量等缓慢变化的参数测试。逐次逼近型属于中速A/D 转换器,转换时间为纳秒级,用于个通道过程控制和声频数字转换系统。
③是否加采样/保持器。
④A/D 转换器的有关量程引脚。有的A/D 转换器提供两个输入引脚,不同量程范围内的模拟量可从不同引脚输入。
⑤A/D 转换器的启动转换和转换结束。一般A/D 转换器可由外部控制信号启动转换,这一启动信号可由CPU提供。转换结束后A/D 转换器内部转换结束信号触发器置位,并输出转换结束标志电平。通知微处理器读取转换结果。
⑥A/D 转换器的晶闸管现象。其现象是在正常使用时,A/D 转换器芯片电流骤增,时间一长就会烧坏芯片。为防止这种现象,可采取的措施:加强抗干扰措施,尽量避免较大的干扰电流进入电路;加强电源稳压滤波措施, 在A/D 转换器电源入口处加退耦滤波电路,为防止窄脉冲波窜入在电解电容上再接一高频滤波电容;在A/D 转换器的电源端接一限流电阻,可在出现晶闸管现象时,有效地把电流限定在允许范围内,以防止烧坏器件。
选择A/D 转换器除考虑上述要点外,为防止对A/D 转换器的技术指标的影响,还要注意几个问题:工作电源电压是否稳定;外接时钟信号的频率是否合适;工作环境温度是否符合器件要求;与其它器件是否匹配;外接是否有强的电磁干扰;印刷线路板布线是否合理。
由上面对传感器量程和精度的分析可知:12位A/D精度:称重0~2Kg范围2Kg/4096=0.488g;而8位A/D精度:称重2Kg~10Kg范围,8Kg/256=31.25g;
考虑到其他部分所带来的干扰,12位A/D转换器可以满足系统精度要求。
图2.8 传感器与ADC0832连接图
图2.9 A/D574电路设计
AD574是单片高速12位逐次比较型A/D转换器,内置双极性电路构成的混合集成转换显片,具有外接元件少,功耗低,精度高等特点,并且具有自动校零和自动极性转换功能,只需外接少量的阻容件即可构成一个完整的A/D转换器。其性能指标为:其精度为5/2048=0.002,远远小于误差±0.005。且其价格明显低于其他同类产品(如MAX197),因此,我们选用了此芯片,作为模数转换器。
考虑到本系统中对物体重量的测量和使用的场合,精度要求不是太苛刻,转换速率要求不高,根据系统的精度要求以及综合的分析,本设计采用了8位串行ADC0832转换器及12位逐次逼近型A/D转换器AD574双精度称重系统。
通过查阅资料,还发现了ADI公司推出的一款高分变率的A/D转换器AD7730。其具有双通道差分模拟输入、24位无失码、21位有效分辨率、±0.0018%线性误差等特点。由于采用Δ转换技术,量化噪声被移至A/D转换的频带以外,因此AD7730特别适合用于宽动态范围内的低频信号A/D转换,具有优良的抗噪声性能。输入信号分别为有极性与无极性两种选择。无极性输入时,输入信号0mV~20mV、0mV~40mV、0mV~60mV、0mV~80mV可选;有极性输入时,输入信号0mV~±10mV、0mV~±20mV、0mV~±30mV、0mV~±40mV可选。AD7730主要特点:分辨率50000;失调温漂≤1ppm/ºC;增益温漂2 ppm/ºC;电源抑制比>150dB;缓冲差动输入:工作基准电压为1~5V;两通道可编程增益前端;AC或DC激励;单电源工作。
传感器输出的差分信号经过前端放大器处理后,送到AD7730,待转换结束后RDY端将输出持续低电平信号,此端与单片机I/O口相连,以便检测其状态。通过设计低通滤波电路对差分信号进行滤波。
当使用场合要求精度严格时,采用高精度的AD7730用于扩展称重系统。
2.5 键盘处理部分方案的论证
目前,微机系统中最常用的是触电式开关按键。在编写单片机程序时,键盘作为一种人机接口的方式实现,是很常用的。而一般的实现方法包括:
1外接键盘扫描芯片(列如8279,7279等),然后由该芯片来完成去抖、键值读取、中断请求等功能。最后单片机响应中断并读取键值,有时也可以采用轮训的方式。
2如果按键数较少,那么可以直接将按键接到单片机的I/O口,然后各按键取逻辑或送到单片机的中断管脚(对于51体系),单片机响应中断后再去读取I/O口的数据。如果单片机的中断向量比较少(列如AVR系列单片机,每个I/O口都可以作为中断),也可以直接把各个键盘接到每个具有中断功能的I/O上面。在中断处理程序中,往往需要执行这样一个操作序列:延时一定的时间去抖,如果按键有效,那么等待按键释放。
上述两种方法都存在比较明显的缺陷:第一种方法需要专门的外围芯片,增加成本,且一般不容易检测按键的按下、释放及长按键等事件。第二种方法同样不容易检测按键的按下、释放及长按键等事件。且采用软件延时的方式,浪费CPU资源,很不可取。
鉴于上述两种方法的缺点,我们可以采用扫描式的方法来判断按键事件。扫描方法即CPU在一定的节奏下,去扫描按键数据线上的信号,然后分析并确定按键事件。
由于本设计的电子秤需要设置单价(十个数字键),还具有确认、删除等功能,总共需设置16个键(包括一个复位键)。采用键盘的扩展使用方案:即采用矩阵式键盘。矩阵式键盘的特点是把检测线分成两组,一组为行线,一组列线,按键放在行线和列线的交叉点上。图2.7给出了一个4×4的矩阵键盘结构的键盘接口电路,图中的每一个按键都通过不同的行线和列线与主机相连这。4×4矩阵式键盘共可以安装16个键,但只需要测试线。当键盘的数量大于8时,一般都采用矩阵式键盘。结合本设计的实际要求,16个按键使用4×4矩阵式键盘。
图 2.10 4×4矩阵键盘
2.6 显示器部分的选择
显示器是人机交换的主要部分,它可以将测量电路测得的数据经过CPU处理后直观的显示出来。数据显示有两种方案:LED(全称:Light Emitting Diode)数码显示和LCD(全称:Liquid Crystal Display)液晶显示。LCD液晶显示器是一种极低功耗显示器,从电子表到计算器,从袖珍仪表到便携式微型计算机以及一些文字处理机都用到了液晶显示器。LCD液晶显示具有显示质量高,数字式接口,体积小,重量轻,功耗低等优点。
因此,本次设计选择了LCD液晶显示器。这里我们采用AMPIRE 128× LCD液晶显示器,主要用于显示数字、专用符号和图形。
2.7超量程报警部分的选择
智能仪器一般都具有报警和通讯功能,报警主要用于系统运行出错、当测量的数据超过仪表量程或者是超过用户设置的上下限时为提醒用户而设置。在本系统中,设置报警的目的就是在超出电子秤测量范围时,发出声光报警信号,提示用户,防止损坏仪器。
超限报警电路是由单片机的I/O口来控制的,当称重物体重量超过系统设计所允许的重量时,通过程序使单片机的I/O值为高电平,报警灯D2发光。
3 硬件电路设计
3.1 ATS52单片机介绍
3.1.1 ATS52单片机综述
单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两个分支。通用计算机系统主要用于海量高速数值运算,不必兼顾控制功能,其数据总线的宽度不断更新,而且不断提高运算速度和完善通用操作系统。以突出其高速海量数值运算能力,在数据处理、模拟仿真、人工智能、图象处理、多媒体、网络通信中得到了广泛的应用;单片机作为最典型的嵌入式系统,由于其微小的体积和低廉的成本,广泛应用于家用电器、机器人、仪器仪表、工业控制单元、办公自动化设备以及通信产品中,成为现代电子系统中最重要的智能化工具。因此,单片机的出现大大促进了现代计算机技术的飞速发展,成为近代计算机技术发展史上一个重要里程碑[5]。
单片机的典型代表是Intel公司在20世纪80年代初设计生产的MCS-51单片机。后来Intel公司把MCS-51的核心技术授权给了很多其它的公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变以满足不同的需求,其中的S52就是这几年在我国非常流行的单片机,这是由美国ATMEL公司开发生产的。
ATS52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU和在系统可编程Flash,使得ATS52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。ATS5具有以下标准功能:8k字节Flash,256字节RAM,32位I/O 口线,看门狗定时器,2个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,ATS52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
在本系统中用于称量的主要器件是称重传感器,称重传感器在受到压力或拉力时会产生电信号,受到不同压力或拉力是产生的电信号也随着变化,而且力与电信号的关系一般为线性关系。由于称重传感器一般的输出范围为0~20mV,对A/D转换或单片机的工作参数来说不能使A/D转换和单片机正常工作,所以需要对输出的信号进行放大。由于传感器输出的为模拟信号,所以需要对其进行A/D转换为数字信号以便单片机接收。单片机根据称重传感器输出的电信号和速度传感器输出的速度信号计算出物体的重量。在本系统中,硬件电路的构成主要有以下几部分:ATS52的最小系统构成、电源电路、数据采集、人-机交换电路等。
图3.1 单片机外接电路
3.1.2 ATS52的最小系统电路构成
ATS52单片机的最小系统由时钟电路、复位电路、电源电路及单片机构成。单片机的时钟信号用来提供单片机片内各种操作的时间基准,复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。
单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
当单片机的复位引脚RST出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。
系统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。
图3.2 ATS52最小系统电路
3.2 A/D转换器与ATS52单片机接口电路
AD574是美国Analog Device公司生产的12位单片A/D转换器。它采用逐次逼近型的A/D转换器,最大转换时间为25us,转换精度为0.05%,所以适合于高精度的快速转换采样系统。芯片内部包含微处理器借口逻辑(有三态输出缓冲器),故可直接与各种类型的8位或者16位的微处理器连接,而无需附加逻辑接口电路,切能与CMOS及TTL电路兼容。AD574采用28脚双列直插标准封装。
图3.3 AD574芯片引脚图
A/D574有5根控制线,逻辑控制输入信号有:
A0:字节选择控制信号。
CE:片启动信号。
/CS:片选信号。当/CS=0,CE=1同时满足时,AD574才处于工作状态,否则工作被禁止。
R/-C:读数据/转换控制信号。
12/-8:数据输出格式选择控制信号。当其为高电平时,对应12位并行输出;为低电平时,对应8位输出。
当R/-C=0,启动A/D转换:当A0=0,启动12位A/D转换方式;当A0=1,启动8位转换方式。
当R/-C=1,数据输出,A0=0时,高8位数据有效;A0=1时,低4位数据有效,中间4位为0,高4位为三态。
输出信号有:
STS:工作状态信号线。当启动A/D进行转换时,STS为高电平;当A/D转换结束时为低电平。则可以利用此线驱动一信号二极管的亮灭,从而表示是否处于A/D转换。
由于对AD574 的8、10、12引脚的外接电路有不同连接方式,所以AD574与单片机的接口方案有两种,一种是单极性接法,可实现输入信号0~10V或者0~20V的转换;另一种为双极性接法,可实现输入信号-5~+5V或者-10~+10V之间转换。本次设计采用单极性接法。
图3.4 AD574与ATS52的接线图
根据芯片管脚的原理,无论启动、转换还是结果输出,都要保证CE端为高电平,所以可以将单片机的/RD引脚和/WR端通过与非门与AD574的CE端连接起来。转换结果分高8位、低4位与P0口相连,分两次读入,所以12/-8端接地。同时,为了使CS、A0、R/-C在读取转换结果时保持相应的电平,可以将来自单片机的控制信号经74LS373锁存后再接入。CPU可采用中断、查询或者程序延时等方式读取AD574的转换结果,本设计采用查询方式。
3.3 显示电路与ATS52单片机的接口电路
图3.5 单片机与LCD接线图
3.3.1128点阵型LCD简介
128是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128×全点阵液晶显示器组成。可完成图形显示,也可以显示4×8个(16×16点阵) 汉字。
主要技术参数与显示特性:
电源:VDD 3.3V~+5V(内置升压电路,无需负压);
显示内容:128列×行
LCD类型:STN
多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等
表3.1 128LCD的引脚说明
| 管脚号 | 管脚名称 | LEVER | 管脚功能描述 |
| 1 | VSS | 0 | 电源地 |
| 2 | VDD | +5.0V | 电源电压 |
| 3 | V0 | - | 液晶显示器驱动电压 |
| 4 | D/I(RS) | H/L | D/I=“H”,表示DB7~DB0为显示数据 D/I=“L”,表示DB7~DB0为显示指令数据 |
| 5 | R/W | H/L | R/W=“H”,E=“H”数据被读到DB7~DB0 R/W=“L”,E=“H→L”数据被写到IR或DR |
| 6 | E | H/L | R/W=“L”,E信号下降沿锁存DB7~DB0 R/W=“H”,E=“H”DDRAM数据读到DB7~DB0 |
| 7 | DB0 | H/L | 数据线 |
| 8 | DB1 | H/L | 数据线 |
| 9 | DB2 | H/L | 数据线 |
| 10 | DB3 | H/L | 数据线 |
| 11 | DB4 | H/L | 数据线 |
| 12 | DB5 | H/L | 数据线 |
| 13 | DB6 | H/L | 数据线 |
| 14 | DB7 | H/L | 数据线 |
| 15 | CS1 | H/L | H:选择芯片(右半屏)信号 |
| 16 | CS2 | H/L | H:选择芯片(左半屏)信号 |
| 17 | RET | H/L | 复位信号,低电平复位 |
| 18 | VOUT | -10V | LCD驱动负电压 |
| 19 | LED+ | - | LED背光板电源 |
| 20 | LED- | - | LED背光板电源 |
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。那么,得到了汉字的内码后,还仅是一组数字,若要在屏幕上显示,就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的'A'在字模的记载方式如图3.5所示:
图3.6 “A”字模图
而中文的“你”在字模中的记载却如图3.6所示:
图3.7 “你”字模图
3.3.1128LCD指令系统
表3.2 128LCD指令表
| 指令名称 | 控制信号 | 控制代码 | ||||||||
| R/W | RS | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | |
| 显示开关 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1/0 |
| 显示起始行设置 | 0 | 0 | 1 | 1 | X | X | X | X | X | X |
| 页设置 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | X | X | X |
| 列地址设置 | 0 | 0 | 0 | 1 | X | X | X | X | X | X |
| 读状态 | 1 | 0 | BUSY | 0 | ON/OFF | RST | 0 | 0 | 0 | 0 |
| 写数据 | 0 | 1 | 写数据 | |||||||
| 读数据 | 1 | 1 | 读数据 | |||||||
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 00 | 00111111/0 |
(2)显示起始行(ROW)设置指令
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 00 | 11显示起始行(0~63) |
(3)页(PAGE)设置指令
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 00 | 10111页号(0~7) |
(4)列地址(Y Address)设置指令
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 00 | 01显示列地址(0~63) |
用读、写指令读出该单元中的内容或向该单元写进一个字节数据。
(5)读状态指令
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 10 | BUSY0ON/OFFREST0000 |
BUSY:1-内部在工作0-正常状态
ON/OFF:1-显示关闭0-显示打开
RESET:1-复位状态0-正常状态
在BUSY和RESET状态时,除读状态指令外,其它指令均不对液晶显示模块产生作用。
在对液晶显示模块操作之前要查询BUSY状态,以确定是否可以对液晶显示模块进行操作。
(6)读写数据指令
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 01 | 写数据 |
| R/WRS | DB7 DB6 DB5 DB4 DB3DB2DB1 DB0 |
| 11 | 读显示数据 |
3.4 键盘电路与ATS52的接口电路设计
键盘一般是由若干按键组成的开关矩阵,若按照其接线方式的不同,可分为两种:
一种是式接法,一种是矩阵式接法;若按照按键的结构原理,可分为两类:一类是触点式开关按键,如机械式开关、导电橡胶式开关等,一类是无触点式开关按键,如电气式按键、磁感应按键等。前者造价低,后者寿命长。
按键按下时,与此键相连的行线与列线导通,行线在无键按下时处于高电平。显然如果让所有的列线也处在高电平,那么按键按下与否不会引起行线电平的变化,因此,必须使所有的列线处在低电平。只有这样,当按键按下时,该键所在的行电平才会由高电平变为低电平。CPU根据行电平的变化,便能判定相应的行有键按下。
对应键盘的相应取决于键盘的工作方式,键盘的工作方式应根据实际应用系统中CPU的工作情况而定,其选取的原则既要保证CPU能及时响应按键操作,又不要过多的占用CPU的工作时间。通常,键盘的工作方式有3种,即编程扫描、定时扫描和中断扫描。
1编程扫描方式:利用CPU完成其他工作的空余时间,调用键盘扫描子程序来响应键盘输入要求。在执行键功能程序时,CPU不再响应键输入要求,直到CPU重新扫描键值为止。
2定时扫描方式,定时扫描方式就是每隔一段时间对键盘扫描一次,它利用单片机内部的定时器产生一定时间(列如10ms)的定时,当定时时间到,就会产生定时器溢出中断。CPU响应中断后对键盘进行扫描,并在有键按下时识别出该键,再执行该键的子程序。
3中断扫描方式:采用上述两种扫描方式时,无论是否有键按下,CPU都要定时扫描键盘,而单片机应用系统工作时,并非经常需要键盘输入,因此,CPU经常处于空扫描状态。为提高CPU工作效率,可采用中断扫描工作方式。其工作过程如下:当无键按下时,CPU处理自己程序,当有键按下时,产生中断请求,CPU转去执行键盘扫描子程序,并识别键号。
说明此(低电平)行没有键被按下。接着进行下一行“0”行扫描与列读入,知道4行关不检查完为止,若无键按下,则返回。
矩阵式键盘的结构与工作原理: 在键盘中按键数量较多时,为了减少I/矩阵式键盘有两种识别键是否被按下的方法:行扫描法和线反转法。行扫描法又称逐行零扫描查询法,及逐行输出行扫描信号“0”,使各行依次为低电平,然后分别读取列数据,检查此(低电平)行中是否有键被按下。如果读得某列线为低电平,则表示此(低电平)行线与列线的交叉处有键按下,再对该键该键译码计算,得到键值,然后转入该键的功能子程序入口地址;如果没有任何一根列线为低电平,则O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
矩阵式键盘的按键识别方法 :确定矩阵式键盘上何键被按下介绍一种“行扫描法”。行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法,如下图所示键盘,介绍过程如下。判断键盘中有无键按下 将全部行线R0-R3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。 判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
在本系统中键盘采用矩阵式键盘并采用编程扫描的工作方式。键盘为4 X 4键盘,包括0、1、2、3、4、5、6、7、8、9、十个数字及确认和清除键。
图3.5 单片机与键盘接口电路
各个按键的功能说明:
数字键:.、0、1、2、3、4、5、6、7、8、9被按下时直接显示在LCD液晶显示屏上。
启动键:当按下此键时,LCD液晶显示开启。
单价键:当此按键被按下时,此刻要求输入称重物品单价,即要求按下数字键。
确定键:前提是单价已输入完毕,当此按键被按下时,LCD屏幕显示当前称重物品的总价格。
总价键:当称重物品单价不变、重量改变时,按下此按键时,LCD液晶屏上显示当前重量物品的总价格。
清除键:当此键按下时,单价及总价处的显示清零。
4 系统软件设计
4.1 主程序设计
在单片机应用系统的开发中,软件的设计是最复杂和困难的,大部分情况下工作量都较大,特别是对那些控制系统比较复杂的情况。如果是机电一体化的设计人员,往往需要同时考虑单片机的软硬件资源分配。本系统的软件设计主要分为系统初始化、按键、显示处理及信号频率输入处理。
程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。其步骤可概括为以下三点:
(1) 分析系统控制要求,确定算法:对复杂的问题进行具体的分析,找出合理的计算方法及适当的数据结构,从而确定编写程序的步骤。这是能否编制出高质量程序的关键。
(2) 根据算法画流程图:画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。
(3)编写程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。
程序数据的一种理想方法是结构化程序设计方法。结构化程序设计是对利用到的控制结构类程序做适当的,特别是转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。根据系统的控制任务,本系统的软件设计主要由主程序、初始化程序、A/D转换子程序、键盘扫描子程序和显示子程序等组成。
4.1.1 C语言在单片机中的应用
C语言是一种通用的计算机程序设计语言,在国际上非常流行。它既可以用来编写计算机的系统程序,也可以用来编写一般的应用程序。以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此。C语言是当前最流行的程序设计语言,它像其它高级语言一样,面向用户,面向解题的过程,编程者不必熟悉具体的计算机内部结构和指令;C语言又像汇编语言一样,可以对机器硬件进行操作。如进行端口0,1操作、位操作、地址操作,并可内嵌汇编指令,将汇编指令当作它的语句一样。我们知道,汇编语言将涉及计算机硬件,所以C语言又像低级语言一样,可以对计算机硬件进行控制,因此人们把它称为介于高级语言与低级语言之间的一种中级语言。正是因为C语言具有这样的特性,所以很适合编写要对硬件进行操作的软件程序。本文采用C语言进行编写.因为经系统软件比较,本系统存储量较大,因此必须应用C语言编程了。
4.1.2 电子称的软件设计与实现
电子称软件设计均采用模块化设计,整个程序包括主程序、A/D转换模块程序、键盘扫描程序、液晶显示子程序等模块。所有程序均采用C语言编写。电子计价秤的软件设计思路说明如下:主程序的作用为程序初始化,计算单价×物体重量(单价通过键盘给出,物体重量通过压力传感器获得),并实时显示十进制的物重,单价,总价。设定T0为计数工作方式,T1为定时工作方式。其中R0为标志位寄存器当为OOH时为正常显示方式。当为01H时为累计显示方式,在T1定时中断程序中。一秒钟采样物料重量(已转成脉冲频率),并赋值重量计算RAM区和显示RAM区。在INTO外部中断程序中,采样单价并赋值单价计算。
4.2 系统主程序流程图
主程序流程图给出了系统工作的基本过程,描述了信号的基本流向,起到一个向导的作用。
图4.1 称重总设计的仿真图
图4.2 系统总程序图
4.3 系统子程序设计
系统子程序主要包括A/D转换启动及数据读取程序设计、键盘输入控制程序设计以及显示程序设计等。
4.3.1 A/D转换启动及数据读取程序设计
A/D转换子程序主要是指在系统开始运行时,把称重传感器传递过来的模拟信号转换成数字信号并传递到单片机所涉及到的程序设计。
图4.3 A/D转换启动及数据读取程序流程图
图4.4 A/D0832转换后的显示图像
图4.5 A/D574转换后的显示图像
4.3.2 显示程序设计
显示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之一。
图4.6 显示子程序流程图
图4.7 显示启动按键按下后
图4.8 显示欢迎界面
4.3.3 键盘输入控制程序设计
键盘电路设计成4X4矩阵式,由键盘编码方式可以得出0,1,2,3,4,5,6,7,8,9以及启动等功能选择键。在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。
矩阵式键盘又叫行列式键盘。就是用I/O口线组成行、列结构,按键设置在行列的交点上。在按键较多时多用矩阵键盘,可以节省I/O口线。列如:占用8个I/O口线的4×4矩阵式结构可以构成16个键的键盘。当有键按下时,要逐行或逐列扫描来判断是哪个按键按下。通常的扫描方式有扫描法和反转法。
图4.9 键盘逐行扫描过程
5 系统调试
5.1 软件调试
软件模块本文主要应用Keil软件进行编程,编程采用模块化结构,先易后难,逐步实现相应的功能。软件程序的调试,我们主要结合硬件仿真图来进行。具体调试步骤有:
(1) A/D转换程序的调试,双精度的电子称设计主要基于两款不同的A/D转换芯片,一个是8位的A/D,一个是十二位的A/D,因此在进行A/D转换采集程序的调试时,不仅要能够实现参数的采集,还需要考虑相应的压力测量范围,使两种精度范围不会产生冲突,程序调试时也主要围绕这样的思路进行,结合硬件仿真图,先调试8位A/D的采集转换,能够正常工作后再进行12位的A/D转换,最后进行两个程序的整合,实现不同压力段的测量。
(2) 显示程序的调试,基于128液晶的显示程序是软件程序的另一个大模块,128*的液晶模块能够支持4*8的汉字显示,能够十分方便的显示电子称的输入输出参数,但128仿真模块并没有相应的汉字库和字符库,因此在编程时不得不自己编写字库,然后进行调用,这一块是比较难的,本文在调试时,完成的思路也是从小到大,先实现液晶的初步显示,然后结合采集程序,逐步加入显示的汉字和字符,最终完成设计功能。
(3) 键盘控制程序的调试,基于4*4键盘的控制模块,是软件模块的最后一部分,在硬件电路中我们采用8279芯片进行键盘管理,这样极大的减小了键盘软件的编程量,在这一部分我们主要完成对8279芯片的管理,实现对8279芯片的读写来检测键盘的工作,调试方式也是采用先模块后运用的方式,使键盘的每一个按键都能实现相应的功能。
5.2 故障分析与解决方案
5.2.1 故障出现情况
(1)12位A/D采集不能正常进行,无法实现循环采集参数;
(2)液晶显示不能正常工作,总是出现跳变;
(3)键盘控制不够灵活。
5.2.2 解决方案
上述三个问题是整个系统方案设计过程中比较难解决的问题,针对上述故障我们通过耐心调试,一一对应的完成了解决方案。
(1)12位A/D采集不能正常进行,主要有两个问题,一个问题是硬件电路冲突,另一个问题软件程序嵌套不合理。硬件电路的冲突来源于读取12位的参数时引脚的分配,所以本文首先对电路图进行了修改,在启动转换硬件部分做了更周密的分析和设计,其次对于程序的嵌套和调用也进行了更为详细的梳理,不会出现两个A/D同时工作的冲突。
(2) 液晶不能正常工作,经过分析后主要来自两方面,一方面是自己对液晶模块的不熟悉造成的,另一个方面还是程序的不稳定。开始时对字库不熟悉,误认为液晶带有字库,导致液晶只能亮不能工作,进一步熟悉了液晶模块后,再结合采集程序显示时,出现了一直跳变,显示不稳定,这种情况应该是不合理的,硬件电路没有问题的前提下,还是软件程序嵌套调用不合理,通过重新对软件模块梳理,发现其中的IF嵌套有不合理的地方,多了很多不合理的延时程序,还有就是主程序结构有点复杂,针对这些情况一一进行了改进,使程序能够逐步稳定运行。
(3)键盘控制不灵活主要原因是按键程序setvalue()函数不够灵活,对于参数设定太过于死板,单价值设定必须设定为5位不太好,所以针对这个问题,通过查阅资料,了解到break语句的实用性,因此重新对setvalue()函数进行了设计,在死循环中加入break语句很好的实现了键盘的灵活控制,十分方便。
5.3 功能测试
物体放在压力传感器上,压力传感器会有个显示重量的值U1,当显示启动时,通过按压“启动”按键,LCD液晶显示屏幕上显示当前称量物体的重量值U2,U1与U2的差值就是系统产生的误差。此刻,若按下“单价”按键时,可以通过矩阵键盘输入称重物体的单价值,然后按下“确定”按键后,LCD液晶就显示称重的总价值。若要在单价不变的前提下,改变物体重量,显示屏上的重量是随动的,按下“总价”按键,则显示改变后的总价值。若按下“清除”按键,则清除LCD液晶上的单价值和总价值。当测量超过量程时,报警,灯亮。
结论
随着全球数字化技术的不断发展,电子衡器已经在我们的生活各个领域得到了广泛的应用,从工业贸易到能源交通都能看到电子衡器的技术应用。本文着眼于目前中小型市场商用电子称智能化低、精度差、易损坏等特点,研发设计了基于ATS52单片机的双精度电子称。
双精度电子称是针对目前中小型市场上现有的衡器无法同时运用于称量微重物理和较重物体而研发的产品。该仿真设计系统主要包括五大模块,即数据采集和双精度转换模块、单片机处理模块、键盘控制模块、128*液晶显示模块和软件驱动模块。启动工作后,单片机可根据A/D采集的重量参数能够自动选择转换精度值,完成相应的数据处理,同时在128*的液晶屏上进行直观的显示重量、单价和总价,4*4键盘控制系统能够实时进行单价调整,操作简单方便,不仅能够测量微重物理,而且能够测量较重物体,完全达到了商品的自动化、数字化和智能化,具有很好的应用价值和意义。
本文唯一的不足是只对研发方案成果的进行了仿真设计,没有运用实物进行验证方案是否可行,有待进一步的研发。虽然没有做出实物,但基于51单片机双精度电子称依然是一个具有前景的电子衡器产品,非常适合于中小型市场的物体称重,如果双精度电子称进一步发展,与虚拟串口技术融合,将会实现与上位机的无线通讯,实现远程监测,将更有价值。
致 谢
经过半年的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有指导老师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。
在这里要感谢我的指导老师齐世清老师。他平日里工作繁多,但在我做毕业设计的每个阶段,从外出实习到查阅资料,设计草案的确定和修改,中期检查,后期详细设计,程序调试等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,但是老师仍然细心地纠正设计中的错误。除了齐老师的专业水平外,他的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。
最后还要感谢大学四年来所有的老师,为我们打下专业知识的基础;同时还要感谢所有的同学们,正是因为有了你们的支持和鼓励。此次毕业设计才会顺利完成。
之前是我想得太简单了,想着用精度高的传感器,高精度的A/D转换器,可是贪图的再多,很多东西都到不了极致,不知道自己到底在追求什么,性价比什么反而因为精度提高反而发挥不到极致,相当于浪费资源,所以,决定改版用最简单且便宜的器件,完成最初的设计,达到性价比最高。
参考文献
[1] 黄坚,金惟伟.中小型电机产品近年出口情况简述[J].中小型电机,2005,32(1) 9-12.
[1]赵茂泰. 智能仪器原理及应用[M].北京:电子工业出版社.2004
[2]张毅刚. MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社.2003
[3]贾伯年, 俞朴.传感器技术[M].东南大学出版社.2000
[4]单成祥.传感器理论设计基础及其应用[M].北京:国防工业出版社.1999
[5]李道华,李玲,朱艳 .传感器电路分析与[M].武汉:武汉大学出版社.2000
[6]沙占友 ,王彦朋等. 智能传感器系统设计与应用[M].北京:电子工业出版社2004.6
[7]何希才,薛永毅. 传感器及其应用实例[J].北京:机械工业出版社.2004.1
[8]李群芳. 单片机微型计算机与接口技术[M].电子工业出版社.
[9]周立功. 单片机实验与实践[M].北京航空航天大学出版社.2004.6
[10]全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品汇编[J].北京理工大学出版社.2005.11
[11]何立民 .单片机高级教材[M].北京:航空航天大学出版社.2000
[12]童诗白,华成英 .模拟电子技术基础[M]. 北京:北京高等教育出社.2001
[13]程林 ,超省电型电子秤的设计方案[J].福建:福建省计量科学技术研究所. 2008.3
[14] 美国国家仪器( NI )公司.技术支持.http://www.ni.com/support/zhs/.
[15] 王丽丽.基于Wi-Fi 的无线数据采集系统研究[D].郑州:河南大学,2004.
[16] LI Yue-qin. Arbitrary Waveform Generator based on LabVIEW[A]. International Conference on E-Leaning, E-Business, Enterprise Information Systems, and E-Government [C]. 2009.
附 录
附录A
ATS52’S Description
The ATS52 is a low-power, high-performance CMOS 8-bit microcontroller with 8Kbytes of in-system programmable Flash memory. The device is manufactured using Atmel’s high-density nonvolatile memory technology and is compatible with the industry-standard 80C51 instruction set and pin out. The on-chip Flash allows the program memory to be reprogrammed in-system or by a conventional nonvolatile memory programmer. By combining a versatile 8-bit CPU with in-system programmable Flash on a monolithic chip, the Atmel ATS52 is a powerful microcontroller which provides a highly-flexible and cost-effective solution to many embedded control applications. he ATS52 provides the following standard features: 8K bytes of Flash, 256 bytes of RAM, 32 I/O lines, Watchdog timer, two data pointers, three 16-bit timer/counters, a six-vector two-level interrupt architecture, a full duplex serial port, on-chip oscillator, and clock circuitry. In addition, the ATS52 is designed with static logic for operation down to zero frequency and supports two software selectable power saving modes. The Idle Mode stops the CPU while allowing the RAM, timer/counters, serial port, and interrupt system to continue functioning. The Power-down mode saves the RAM contents but freezes the oscillator, disabling all other chip functions until the next interrupt or hardware reset.
Pin Description
VCC
Supply voltage.
GND
Ground.
Port 0
Port 0 is an 8-bit open drain bidirectional I/O port. As an output port, each pin can sink eight TTL inputs. When 1sare written to port 0 pins, the pins can be used as high impedance inputs. Port 0 can also be configured to be the multiplexed low order address/data bus during accesses to external program and data memory. In this mode, P0 has internal pullups. Port 0 also receives the code bytes during Flash programming and outputs the code bytes during program verification.
External pullups are required during program verification.
Port 1
Port 1 is an 8-bit bidirectional I/O port with internal pullups. The Port 1 output buffers can sink/source four TTL inputs. When 1s are written to Port 1 pins, they are pulled high by the internal pullups and can be used as inputs. As inputs, Port 1 pins that are externally being pulled low will source current (IIL) because of the internal pullups. In addition, P1.0 and P1.1 can be configured to be the timer/counter 2 external count input (P1.0/T2) and the timer/counter 2 trigger input (P1.1/T2EX), respectively, as
shown in the following table. Port 1 also receives the low-order address bytes during
Flash programming and verification.
Port 2
Port 2 is an 8-bit bidirectional I/O port with internal pullups. The Port 2 output buffers can sink/source four TTL inputs. When 1s are written to Port 2 pins, they are pulled high by the internal pullups and can be used as inputs. As inputs,
Port 2 pins that are externally being pulled low will source current (IIL) because of the internal pullups. Port 2 emits the high-order address byte during fetches from external program memory and during accesses to external data memory that use 16-bit addresses (MOVX @ DPTR). In this application, Port 2 uses strong internal pull-ups when emitting 1s. During accesses to external data memory that use 8-bit addresses (MOVX @ RI), Port 2 emits the contents of the P2 Special Function Register. Port 2 also receives the high-order address bits and some control signals during Flash programming and verification.
Port 3
Port 3 is an 8-bit bidirectional I/O port with internal pullups. The Port 3 output buffers can sink/source four TTL inputs. When 1s are written to Port 3 pins, they are pulled high by the internal pullups and can be used as inputs. As inputs, Port 3 pins that are externally being pulled low will source current (IIL) because of the pull-ups Port 3 also serves the functions of various special features of the ATS52, as shown in the following table. Port 3 also receives some control signals for Flash programming and verification.
RST
Reset input. A high on this pin for two machine cycles while the oscillator is running resets the device. This pin drives High for 96 oscillator periods after the Watchdog times out. The DISRTO bit in SFR AUXR (address 8EH) can be used to disable this feature. In the default state of bit DISRTO, the RESET HIGH out feature is enabled
ALE/PROG
Address Latch Enable (ALE) is an output pulse for latching the low byte of the address during accesses to external memory. This pin is also the program pulse input (PROG)during Flash programming. In normal operation, ALE is emitted at a constant rate of1/6 the oscillator frequency and may be used for external timing or clocking purposes. Note, however, that one ALE pulse is skipped during each access to external data memory. If desired, ALE operation can be disabled by setting bit 0 of SFR location 8EH. With the bit set, ALE is active only during a MOVX or MOVC instruction. Otherwise, the pin is P1.0 T2 (external count input to Timer/Counter 2), clock-outP1.1 T2EX (Timer/Counter 2 capture/reload trigger and direction control)
P1.5 MOSI (used for In-System Programming)
P1.6 MISO (used for In-System Programming)
P1.7 SCK (used for In-System Programming)
P3.0 RXD (serial input port)
P3.1 TXD (serial output port)
P3.2 INT0 (external interrupt 0)
P3.3 INT1 (external interrupt 1)
P3.4 T0 (timer 0 external input)
P3.5 T1 (timer 1 external input)
P3.6 WR (external data memory write strobe)
P3.7 RD (external data memory read strobe)
PSEN
Program Store Enable (PSEN) is the read strobe to external program memory. When the ATS52 is executing code from external program memory, PSEN is activated twice each machine cycle, except that two PSEN activations are skipped during each access to external data memory.
EA/VPP
External Access Enable. EA must be strapped to GND in order to enable the device to fetch code from external program memory locations starting at 0000H up to FFFFH. Note, however, that if lock bit 1 is programmed, EA will be internally latched on reset. EA should be strapped to VCC for internal program executions. This pin also receives the 12-volt programming enable voltage(VPP) during Flash programming.
XTAL1
Input to the inverting oscillator amplifier and input to the
internal clock operating circuit.
XTAL2
Output from the inverting oscillator amplifier. [9]
中文译文A
ATS52简述
ATS52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程 Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得ATS52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 ATS52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振及时钟电路。另外,ATS52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻 辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2 的触发输入(P1.1/T2EX)。 在flash编程和校验时,P1口接收低8位地址字节。
引脚号第二功能:
P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出
P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
P1.5 MOSI(在系统编程用)
P1.6 MISO(在系统编程用)
P1.7 SCK(在系统编程用)
P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动 4 个 TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用 8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个 TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为ATS52特殊功能(第二功能)使用,如下表所示。 在flash编程和校验时,P3口也接收一些控制信号。
端口引脚 第二功能:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INTO(外中断0)
P3.3 INT1(外中断1)
P3.4 TO(定时/计数器0)
P3.5 T1(定时/计数器1)
P3.6 WR(外部数据存储器写选通)
P3.7 RD(外部数据存储器读选通)
此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。
ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。
PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当ATS52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
附录B
附录C
程序
#include #include #include #include #include #include"source.h" #define uchar unsigned char #define uint unsigned int #define LCD_databus P0 //LCD128的8位数据口 //ADC0832的引脚 sbit ADCS =P3^0; //ADC0832 chip seclect sbit ADDI =P3^5; //ADC0832 k in sbit ADDO =P3^5; //ADC0832 k out sbit ADCLK =P3^1; //ADC0832 clock signal s超过压力表量程最大值红色led报警定义 sbit RS=P1^5; 为0---命令;1----数据 sbit RW=P1^4; 为1---写;0---读 sbit EN=P3^2; 液晶使能端 sbit CS1=P3^3; 片选1低电平有效,控制左半屏 sbit CS2=P3^4; 片选1低电平有效,控制右半屏 sbit STATUS = P1^3; //AD转换完成标志 double press,value0,value1; uchar hByte; uchar lByte; c存储重量 c存储单价 c存储总价 uchar code keyval[]={0x00,0x01,0x02,0x03,0x08,0x09,0x0a,0x0b,0x10,0x11,0x12,0x13,0x18,0x19,0x1a,0x1b}; uchar xdata duan _at_ 0xBfff; //1011 1111 1111 1111 unsigned char xdata ADL _at_ 0x7FFF; /*********延时K*1ms,12.000mhz**********/ void delay(uint k) { {;} } void Read_busy() { RS=0; RW=1; } void write_LCD_command(uchar value) 写命令函数 { 对LCD的每次读写都要读忙 选择命令 读操作 LCD_databus=value; 由1----0锁存有效数据 } void write_LCD_data(uchar value)//写数据函数 { 选择数据 由1----0锁存有效数据 } uchar Read_LCD(void) 读数据函数 //RS=1,RW=1 { 先进行一次空读操作 读取真正的数据 } void Set_page(uchar page) 设置“页”LCD128共8页,一页是8行点阵点 { page=0xb8|page; 页的首地址为0xB8 write_LCD_command(page); } void Set_line(uchar startline) //设置显示的起始行 { 起始行地址为0xC0 write_LCD_command(startline); //设置从哪行开始:共0--63;一般从0 行开始显示 } void Set_column(uchar column) 设置显示的列 { column=column &0x3f; 列的最大值为 column= 0x40|column; 列的首地址为0x40 write_LCD_command(column); 规定显示的列的位置 } void SetOnOff(uchar onoff) 显示开关函数:0x3E是关显示,0x3F是开显示 { 开显示;0---关显示 0011 1110 } void SelectScreen(uchar screen) 选择屏幕 { 全屏 左半屏 右半屏 } void ClearScreen(uchar screen) 清屏函数 { 全屏;1---左半屏;2---右半屏 控制页数0-7,共8页 Set_column(0); 控制列数0-63,共列 { 写入0,地址指针自加1 } } void init_LCD() 的初始化 { 开显示 清屏 开始行:0 } void Display_ASCII(uchar screen,uchar page,uchar column,uchar p) { 显示字符上半部分:8*8 write_LCD_data(disbuf[i+(p*16)]); 显示字符下半部分:8*8 write_LCD_data(disbuf[i+(p*16)+8]); } void Display_HZ(uchar screen,uchar page,uchar column,uchar *p) { 写上半页:16*8 控制列 控制16列的数据输出 write_LCD_data(p[i]); 汉字的上半部分 写下半页:16*8 控制列 控制16列的数据输出 write_LCD_data(p[i+16]); 汉字的下半部分 } void Init_display_HZ() { Display_HZ(1,2,3,fuhao); Display_HZ(2,2,3,kg); //单位KG Display_HZ(1,4,0,dan); Display_HZ(1,4,2,jia); Display_HZ(1,4,3,fuhao); Display_HZ(2,4,3,yuan); Display_HZ(1,6,0,he); Display_HZ(1,6,2,ji); Display_HZ(1,6,3,fuhao); Display_HZ(2,6,3,yuan); } void clear() { init_LCD(); 初始128 ClearScreen(0); 清屏 Init_display_HZ(); disbuf2[5]=0; } //8279初始化函数 void KbDisInit() { 清楚RAM 清除完毕 分频 } /************读ADC0832函数************/ v转换,返回结果 { 拉低CS端 拉高CLK端 拉低CLK端,形成下降沿1 拉高CLK端 拉低CLK端,形成下降沿2 拉高CLK端 拉低CLK端,形成下降沿3 控制命令结束 收数据 形成一次时钟脉冲 收数据 形成一次时钟脉冲 拉低CS端 拉低CLK端 拉高数据端,回到初始状态 测试时补偿值为 *a+9.3; } void adc_Convert(void) { } /*重量显示函数*/ void data_pro(void) { 当压力值介于15kpa到115kpa之间时,遵循线性变换 放大10倍,便于后面的计 取压力值百位 取压力值十位 取压力值个位 取压力值十分位 取压力值bai分位 } if(press>=100) { disbuf1[0]=press_bai; } for(k=0;k<5;k++) Display_ASCII(2,2,(k*8),disbuf1[k]); } 放大10倍,便于后面的计算 取压力值十位 取压力值个位 取压力值十分位 取压力值百分位 取压力值千分位 disbuf1[0]=press_shi; } for(k=0;k<5;k++) Display_ASCII(2,2,(k*8),disbuf1[k]); } /*超压报警函数*/ void alarm(void) { 如果当前压力值大于115kpa, { Alarm_led_red=0; } //则启动red led报警 关闭red led 报警 } /*总价计算函数*/ void value() //总价计算 { unsigned int temp,k; if(disbuf2[1]==10) { } if(disbuf2[2]==10) { value0=disbuf2[0]*10+disbuf2[1]+disbuf[3]*0.1+disbuf[4]*0.01; } if(disbuf2[3]==10) { value0=disbuf2[0]*100+disbuf2[1]*10+disbuf[2]+disbuf2[4]*0.1; } value1=value0*press; temp=(int)(value1*100); 放大100倍,便于后面的计算 if(value1<1000) 放大100倍,便于后面的计算 取总价值百位 取总价种 取总价值值个位 disbuf3[3]=10; 取总价值值个位 取总价值十分位 if(value1>=1000) 放大100倍,便于后面的计算 取总价值千位 取总价值百位 取总价值十位 取总价值个位 disbuf3[4]=10; 取总价值十分位 } /*设置单价函数*/ void setvalue() { 有键按下,写入读FIFO命令 i=wei; j=0; while(i!=keyval[j]){j++;} disbuf2[k]=j; k++; } { 设置完单价后 直接显示总价 break; } } void main() { uint p,j,i; KbDisInit(); init_LCD(); 初始128 ClearScreen(0); 清屏 Set_line(0); 显示开始行 while(1) d启动键是否按下 while(i!=keyval[p]){p++;} Adc0832(0); alarm(); data_pro(); { duan=0x50; i=wei; if(j>10) { case 1: setvalue();break; //设置单价 case 2: value();break; //显示总价 case 3: clear();break; //清贫 } }下载本文