基于51单片机的电子秤设计
基于51单片机的电子秤设计(精选6篇)
基于51单片机的电子秤设计 第1篇
毕业设计(论文)
(2015届)
题 目:基于51单片机的电子秤设计
专业名称:应用电子技术
姓 名:谢玉夏
学 号:1210401038 班 级:2012级应用电子技术
指导教师:刘志芳
2014年 12 月 30 日
摘要
称重技术是人类生活中不可缺少的部分,自古以来就被人们所重视。作为一种计量手段,被广泛应用于工业、农业、贸易等各个领域。随着现代文明和科学技术的不断进步,人们对称重技术的准确度要求也越来越高,电子秤产品技术水平的高低,直接影响各行各业的现代化水平和社会经济效益的提高。近年来,电子称重技术取得了突飞猛进的发展,电子秤在称重计量领域中也占有越来越重要的地位,其应用领域也在不断地扩大。尤其是商用电子秤,由于其具有准确度高、反应灵敏、结构简单等优点,被广泛应用于工商贸易、轻工食品、医药卫生等领域。目前,机械秤正在逐步被电子秤取代,这就促使电子秤的研究需要进一步的深入。
本设计是以AT89S51为核心的一种高精度电子秤,系统采用模块化设计法,其硬件结构主要包括:数据采集模块、最小系统模块、电源模块、键盘和显示模块。其中,数据采集模块包括称重传感器和A/D转换电路;最小系统部分主要包括AT89S51和扩展的外部数据存储器;键盘由4×4位矩阵键盘组成;显示部分LM4229液晶显示。软件部分由C语言编程,实现对各部分的控制。该电子秤可以能够显示商品的名称、价格、总量、总价等;能够自动完成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能。其称重范围为0~5Kg,分度值为0.001g。整个系统结构简单,使用方便。
关键词:电子秤;AT89S51单片机;称重传感器;A/D转换电路;液晶显示II
目录 绪论...........................................................1
1.1 选题的背景与意义.........................................1
1.1.1 选题的背景..........................................1 1.1.2 选题的意义..........................................2 1.2 电子秤的研究现状及发展趋势...............................2
1.2.1 电子秤的研究现状....................................2 1.2.2 电子秤的发展趋势....................................3 1.3 本文的结构...............................................4 2 系统总体方案设计...............................................5
2.1 电子秤的基本知识介绍.....................................5
2.1.1 电子秤的基本结构....................................5 2.1.2 电子秤的工作原理....................................5 2.1.3 电子秤的计量参数....................................6 2.2 总体方案设计.............................................7 2.3 系统各部分设计方案论证...................................8
2.3.1 电子秤分度数的设定..................................8 2.3.2 称重传感器的选定....................................8 2.3.3 A/D转换器的选定....................................14 2.3.4 单片机型号的选定...................................16 硬件设计......................................................18
3.1 系统硬件结构图..........................................18 3.2 单片机主控单元的设计....................................18
3.2.1 单片机引脚说明.....................................18 3.2.2 AT89S51最小系统设计................................20 3.3 数据采集模块设计........................................22
III
3.3.1 传感器单元设计.....................................22 3.3.2 A/D转换单元设计....................................22 3.4 键盘和显示电路单元设计..................................24
3.4.1 键盘电路设计.......................................24 3.4.2 显示电路设计.......................................25 3.5 系统总体原理图..........................................25 3.6 硬件抗干扰设计..........................................26 4 系统软件设计..................................................29
4.1 主程序设计..............................................29 4.2 LM4229液晶显示驱动程序..................................30 4.3 ADC0832采样程序.........................................31 4.4 键盘程序................................................31 5 系统仿真......................................................33
5.1 欢迎界面的仿真..........................................33 5.2 无重物情况仿真..........................................34 5.3 称量物体仿真............................................35 5.4 最大量程仿真............................................36 5.5 仿真总结与问题补充......................................37
5.5.1 仿真总结...........................................37 5.5.2 问题补充...........................................37 总结与展望....................................................39 附录程序.........................................................40 参考文献.........................................................49
IV 绪论
1.1 选题的背景与意义
1.1.1 选题的背景
(1)电子技术渗入衡器制造业
随着第二次世界大战后的经济繁荣,为了把称重技术引入生产工艺过程中去,对称重技术提出了新的要求,希望称重过程自动化,为此电子技术不断渗入衡器制造业。在1954年使用了带新式打印机的倾斜杠杆式秤,其输出信号能控制商用结算器,并且用电磁铁机构与代替人工操作的按键与办公机器联用。在1960年开发出了与衡器相联的专门称重值打印机。当时的带电子装置的衡器其称量工作是机械式的,但与称量有关的显示、记录、远传式控制器等功能是电子方式的。(2)电子秤步入社会
电子秤的发展过程与其它事物一样,也经历了由简单到复杂、由粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程。特别是近30年以来,工艺流程中的现场称重、配料定量称重、以及产品质量的监测等工作,都离不开能输出电信号的电子衡器。这是由于电子衡器不仅能给出质量或重量信号,而且也能作为总系统中的一个单元承担着控制和检验功能,从而推进工业生产和贸易交往的自动化和合理化。
近年来,电子秤已愈来愈多地参与到数据处理和过程控制中。现代称重技术和数据系统已经成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可缺少的组成部分。随着称重传感器各项性能的不断突破,为电子秤的发展奠定了基础,国外如美国、西欧等一些国家在20世纪60年代就出现了0.1%称量准确度的电子秤,并在70年代中期约对75 %的机械秤进行了机电结合式的电子化改造。
我国的衡器在20世纪40年代以前还全是机械式的,40年代开始发展了机电结合式的衡器。50年代开始出现了以称重传感器为主的电子衡器。80年代以来,我国通过自行研制、引进消化吸收和技术改造,已由传统的机械式衡器步入集传感器、微电子技术、计算机技术于一体的电子衡器发展阶段。目前,由于电子衡器具有称量快、读数方便、能在恶劣环境下工作、便于与计算机技术相结合而实现称重技术和过程控制的自动化等
特点,已被广泛应用于工矿企业、能源交通、商业贸易和科学技术等各个部门。随着称重传感器技术以及超大规模集成电路和微处理器的进一步发展,电子称重技术及其应用范围将更进一步的发展,并被人们越来越重视。
1.1.2 选题的意义
电子秤是日常生活中常用的电子衡器,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。目前市场上使用的称量工具,或者是结构复杂,或者运行不可靠,且成本高,精度稳定性不好,调整时间长,易损坏,维修困难,装机容量大,能源消耗大,生产成本高。而且目前市场上电子秤产品的整体水平不高,部分小型企业产品质量差且技术力量薄弱,设备不全,缺乏产品的开发能力,产品质量在低水平徘徊。因此,有针对性地开发出一套有实用价值的电子秤系统,从技术上克服上述诸多缺点,改善电子秤系统在应用中的不足之处,具有现实意义。
1.2 电子秤的研究现状及发展趋势
1.2.1 电子秤的研究现状
近几年,我国的电子称重系统从最初的机电结合型发展到现在的全电子型和数字智能型。电子称重技术逐渐从静态称重向动态称重发展,从模拟测量向数字测量发展,从单参数测量向多参数测量发展。电子称重系统制造技术及其应用得到了新发展。国内电子称重技术基本达到国际上20世纪90年代中期的水平,少数产品的技术已处于国际领先水平。
在研究方法上,电子称重系统的工作原理一般是将作用在承载器上的质量或力的大小,通过压力传感器转换为电信号,并通过控制电路来处理该电信号。其中压力传感器大多数采用电阻应变片压力传感器,由于应变片的体积较小,市场上有多种规格可供选择,而且可以针对弹性敏感元件的形式可以灵活设计来适应各种应用场合的要求,所以
应变片式压力传感器得到广泛的应用。但是电阻应变片压力传感器的一个严重缺陷是应变灵敏度、应变片本身的电阻都随温度变化,而且灵敏度随温度变化较大。在不同的环境中,应变片的阻值发生变化,输出零点漂移明显。并且应变片的输出信号很小、线性范围窄,而且动态响应较差,有待进一步开发。
在国际上,一些发达国家在电子称重方面,从技术水平、品种和规模等方面都达到了较高的水平。特别是在准确度和可靠性等方面有了很大的提高。其中梅特勒.托利多公司生产的BBK4系列高精度电子秤精度达到了lmg,速度大约为1次/秒。目前,电子秤在称量速度方面需要进一步的研究。
在称重传感器方面,国外产品的品种和结构又有创新,技术功能和应用范围不断扩大。
1.2.2 电子秤的发展趋势
电子秤的称重功能是基于微处理器这一核心技术来实现的。由于目前在设计电子称重系统时大量地采用集成芯片,因此电子称重系统已经摆脱了以往的电子模式,正向小型化、模块化、智能化、集成化发展;其技术性能趋向于高速率、高准确度、高稳定性、高可靠性;其应用性趋向于综合性、组合性。
小型化:体积小、高度低、重量轻,即小薄轻。为使电子衡器的承载器达到小、薄、轻,开始采用重量轻且刚度大的空心波纹铜板和方形闭合截面的薄壁型材。
模块化:电子衡器的承载器采用模块式一体组合或分体组合,产生新的品种和规格。这种模块化组合不但提高了产品的通用性和可靠性,而且也大大提高了生产效率,降低了成本。
智能化:与电子计算机组合或开发称重用计算机,利用计算机的智能来增加称重显示控制的功能,使其在原有功能的基础上增加推理、判断、自诊断、自适应、自组织等功能。
集成化:对于某些品种和结构的电子衡器,可以实现承载器与称重传感器一体化或承载器、称重传感器与称重显示控制器一体化。
综合性:电子称重技术和电子衡器产品的应用范围不断扩大,它已渗透到一些学科和工业自动控制领域。对某些商用电子计价秤而言,只具备称重、计价、显示、打印功能还远远不够,现代商业系统还要求它能提供各种销售信息,把称重与管理自动化紧密
结合,使称重、计价、进库、销售管理一体化,实现管理自动化。这就要求电子计价秤能与电子计算机联网,把称重系统与计算机系统组成一个完整的综合控制系统。
组合性:在工业生产过程或工艺流程中,不少称重系统还应具有可组合性,即:测量范围可以任意设定;硬件能够依据不定的程序进行修改和扩展;输入输出数据与指令可使用不同的语言,并能与外部的控制和数据处理设备进行通信。
今后, 随着电子高科技的飞速发展, 电子秤技术的发展定将日新月异。同时, 功能更加齐全的高精度的先进电子秤将会不断问世, 其应用范围也会更加拓宽。
1.3 本文的结构
本设计是以AT89S51为核心的一种高精度电子秤,系统采用模块化设计法,其硬件结构主要包括:数据采集模块、最小系统模块、电源模块、键盘和显示模块。软件部分由C语言编程,实现对各部分的控制。可以实现称重、去皮、置零、计价和显示等功能。其称重范围为0~5Kg,分度值为0.001g。整个系统结构简单,使用方便。全文共分为五章,各章主要内容如下:
第一章为绪论部分,简要介绍了选题的背景及意义、电子秤的研究现状及发展趋势以及本文的主要内容及结构;
第二章为总体设计部分,简要介绍了电子秤的结构及工作原理,论证了系统总体方案的设计,以及对各种方案的选择做出了比较;
第三章为系统硬件设计部分,主要是通过对各种模块的介绍以及对电路功能的分析,对系统硬件进行了选型和设计,得出系统硬件结构图;
第四章为系统软件设计部分,主要介绍了系统各部分软件的设计流程,给出了简单的程序;
第五章为系统软件仿真;
第六章为总结与展望,主要是对本课题的总结,以及对存在的问题进行归纳和进一步研究的方向。系统总体方案设计
2.1 电子秤的基本知识介绍
2.1.1 电子秤的基本结构
电子秤是利用物体的重力作用来确定物体质量(重量)的测量仪器,也可用来确定与质量相关的其它量大小、参数、或特性。不管根据什么原理制成的电子秤均由以下三部分组成:
(1)承重、传力复位系统
它是被称物体与转换元件之间的机械、传力复位系统,又称电子秤的秤体,一般包括接受被称物体载荷的承载器、秤桥结构、吊挂连接部件和限位减振机构等。(2)称重传感器
即由非电量(质量或重量)转换成电量的转换元件,它是把支承力变换成电的或其它形式的适合于计量求值的信号所用的一种辅助手段。
按照称重传感器的结构型式不同,可以分直接位移传感器(电容式、电感式、电位计式、振弦式、空腔谐振器式等)和应变传感器(电阻应变式、声表面谐振式)或是利用磁弹性、压电和压阻等物理效应的传感器。
对称重传感器的基本要求是:输出电量与输入重量保持单值对应,并有良好的线性关系;有较高的灵敏度;对被称物体的状态的影响要小;能在较差的工作条件下工作;有较好的频响特性;稳定可靠。
(3)测量显示和数据输出的载荷测量装置
即处理称重传感器信号的电子线路(包括放大器、模数转换、电流源或电压源、调节器、补偿元件、保护线路等)和指示部件(如显示、打印、数据传输和存贮器件等)。这部分习惯上称载荷测量装置或二次仪表。在数字式的测量电路中,通常包括前置放大、滤滤、运算、变换、计数、寄存、控制和驱动显示等环节。
2.1.2 电子秤的工作原理
当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感器
随之产生力-电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成正比关系)的电信号(电压或电流等)。通常此电压信号很小,需要通过前端信号处理电路进行准确的线性放大,放大后的模拟电压信号经过滤波电路和A/D转换电路转换成数字信
1号被送入到主控电路的单片机中○,单片机不断扫描键盘和各种功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析、由仪表的软件来控制各种运算。运算结果送到内存贮器,需要显示时,单片机发出指令,从内存贮器中读出送到显示器显示。
2.1.3 电子秤的计量参数
电子秤的计量性能涉及的主要技术指标有:量程、安全载荷、额定载荷、允许误差、分度值、分度数、准确度等级等。
(1)量程:一台电子秤不计皮重,所能称量的最大的载荷Max,即电子秤在正常工作情况下,所能称量的最大值。
(2)安全载荷:为电子秤正常称量案范围的120%。(3)额定载荷:电子秤的正常称量范围。(4)允许误差:等级检定时允许的最大偏差。
(5)分度值:电子秤的测量范围被分成若干等份,每份值即为分度值。用e或d来表示。
(6)分度数:衡器的测量范围被分成若干等份,总份数即为分度数用n表示。电子衡器的最大称量Max可以用总分度数n与分度值d的乘积来表示,即Max=n*d。
(7)准确度等级:国际法制计量组织把电子秤按照不同的分度数分成Ⅰ、Ⅱ、Ⅲ、Ⅳ四类等级,分别对应不同准确度的电子秤和分度数n的范围,如表
1因为本设计采用软件仿真而不能进行实际的称量,故信号的放大滤波电路部分舍去,直接输入模拟电压信号,○放大滤波部分内容会在第五章仿真总结与问题补充中进行后续介绍。
2-1所示。
表2-1 电子秤等级分类
标志及等级 特种准确度
电子秤种类 基准衡器
分度数范围 n>100,000
高准确度 中准确度 普通准确度
精密衡器 商业衡器 粗衡器
10,000 按照设计的基本要求,可以确定系统共分为五大模块,数据采集模块、最小系统模块、超重报警模块、键盘和显示模块。其中,数据采集模块包括称重传感器和A/D转换电路;最小系统模块由AT89S51单片机及其外围电路组成;键盘由4×4位矩阵键盘组成,可以控制显示商品种类和价钱等信息;显示部分采用LM4229液晶显示,显示当前商品的名称、单价、重量及总价等信息。软件部分由C语言编程,实现对各部分的控制。该电子秤可以实现显示商品的名称、单价、重量、总价等功能。其称重范围为0~5Kg,分度值为0.001g。在扩展功能上,本设计增加了一个超重报警提示。其总体设计的框图如图2-1所示: 数据采集模块单片机最小系统超重报警模块键盘模块显示模块 图2-1 总体设计方框图 系统工作原理:把所称物体放到秤台上,物体的重力通过秤体传给称重传感器,传感器受到压力使电阻发生变化引起电压变化,再将电压值送到A/D转换电路,将模拟量转换成数字量,转换后的数字量送至单片机进行处理,并显示结果。单片机最小系统由AT89S51和外围的时钟电路及复位电路组成。显示电路设计采用LM4229液晶显示,对各部分的控制由采用C语言编程的软件来实现。 2.3 系统各部分设计方案论证 2.3.1 电子秤分度数的设定 当前,一些单位为了提高Ⅲ级商贸秤的准确度,尝试改小电子秤的分度值,扩大电子秤的分度数,以便达到高精度称量的目的。这样做非但不能进行高精度称量,还会破坏电子秤原有的计量性能,降低电子秤的准确度,有损电子秤的可靠性,使电子秤出现更多的计量误差。 现在我国已经完全与OIML规定接轨,衡器计量检定规程完全按OIML规定而来。表2-2为Ⅲ级商业秤误差要求。 表2-2 Ⅲ级数字显示商用衡器允差表 m <500e 500e< m≤2000e 2000e< m≤Max 允差e(检定分度值) 检定要求 ±0.5e ±1.0e ±1.5e 使用中要求 ±1.0e ±2.0e ±3.0e 由表2-2可知,它的整个称量范围允差规定是变化的,误差是从大到小再变大,最高准确度在中间。从0~500分度数为低精度称量段,到高于3000个分度数之后的实际称量精度逐渐变低,实际误差不断加大。分度数再高其允差也是不变的。从国外电子秤的准确度和分度数设置、国内原先衡器的检定标准和现在我们统计的电子秤分度数的准确度以及OIML对Ⅲ级秤的允差规定看,说明现有Ⅲ级商业秤的分度数设置为2000~3000是比较理想的,属于最佳分度数。这样设置决定了电子秤的准确度首检为±0.05%,使用中为±0.1%的正确性、合理性与必要性。 2.3.2 称重传感器的选定 称重传感器在电子秤中占有十分重要的位置,被喻为电子秤的心脏部件,它的性能好坏很大程度上决定了电子秤的精确度和稳定性。考虑到不同使用地点的重力加速度和空气浮力对转换的影响,称重传感器的性能指标主要有线性误差、滞后误差、重复性误差、蠕变、零点温度特性和灵敏度温度特性等。在各种衡器和质量计量系统中,通常用 综合误差带来综合衡量传感器准确度,并将综合误差带与衡器误差带联系起来,以便选用对应于某一准确度衡器的称重传感器。国际法制计量组织(OIML)规定,传感器的误差带δ占衡器误差带Δ的70%,称重传感器的线性误差、滞后误差以及在规定温度范围内由于温度对灵敏度的影响所引起的误差等的总和不能超过误差带δ。若在环境恶劣的条件下(如高低温、湿热),传感器所占的误差比例就更大,因此,在人们设计电子秤时,正确地选用称重传感器非常重要。1.常用各种称重传感器 称重传感器按转换方法分为光电式、液压式、电磁力式、电容式、磁极变形式、振动式、陀螺仪式、电阻应变式等8类,以电阻应变式使用最广。 光电式传感器包括光栅式和码盘式两种。光栅式传感器利用光栅形成的莫尔条纹把角位移转换成光电信号。光栅有两块,一为固定光栅,另一为装在表盘轴上的移动光栅。加在承重台上的被测物通过传力杠杆系统使表盘轴旋转,带动移动光栅转动,使莫尔条纹也随之移动。利用光电管、转换电路和显示仪表,即可计算出移过的莫尔条纹数量,测出光栅转动角的大小,从而确定和读出被测物质量。码盘式传感器的码盘是一块装在表盘轴上的透明玻璃,上面带有按一定编码方法编定的黑白相间的代码。加在承重台上的被测物通过传力杠杆使表盘轴旋转时,码盘也随之转过一定角度。光电池将透过码盘接受光信号并转换成电信号,然后由电路进行数字处理,最后在显示器上显示出代表被测质量的数字。光电式传感器曾主要用在机电结合秤上。 液压式传感器:在受被测物重力P作用时,液压油的压力增大,增大的程度与P成正比。测出压力的增大值,即可确定被测物的质量。液压式传感器结构简单而牢固,测量范围大,但准确度一般不超过1/100。 电磁力式传感器:它利用承重台上的负荷与电磁力相平衡的原理工作。当承重台上放有被测物时,杠杆的一端向上倾斜;光电件检测出倾斜度信号,经放大后流入线圈,产生电磁力,使杠杆恢复至平衡状态。对产生电磁平衡力的电流进行数字转换,即可确定被测物质量。电磁力式传感器准确度高,可达1/2000~1/60000,但称量范围仅在几十毫克至10千克之间。 电容式传感器:工作原理是利用电容器振荡电路的振荡频率f与极板间距d成正比的关系。极板有两块,一块是固定不动的,另一块是可移动的。在秤体加载重物时,两 极板间的距离发生变化,随之,电路的振荡频率也改变。只要测出频率的变化便可求出被测物的质量。电容式传感器耗电量少,造价低,准确度为1/200~1/500。 磁极变形式传感器:原理为铁磁元件在被测物体重力下发生形变,产生应力引起导磁率的变化,随之,绕在铁磁元件两侧的次级线圈的感应电压也变化。这样测出电压的变化量便可求出加到磁极上的力,从而确定物体的质量。磁极变形式传感器的准确度不高,一般为1/100,称量范围为几十至几万千克。 振动式传感器弹性元件受力后,其固有振动频率与作用力的平方根成正比。测出固有频率的变化,即可求出被测物作用在弹性元件上的力,进而求出其质量。振动式传感器有振弦式和音叉式两种。 振弦式传感器的弹性元件是弦丝。当承重台上加有被测物时,V形弦丝的交点被拉向下,且左弦的拉力增大,右弦的拉力减小。两根弦的固有频率发生不同的变化。求出两根弦的频率之差,即可求出被测物的质量。振弦式传感器的准确度较高,可达1/1000~1/10000,称量范围为100克至几百千克,但结构复杂,加工难度大,造价高。 音叉式传感器的弹性元件是音叉。音叉端部固定有压电元件,它以音叉的固有频率振荡,并可测出振荡频率。当承重台上加有被测物时,音叉拉伸方向受力而固有频率增加,增加的程度与施加力的平方根成正比。测出固有频率的变化,即可求出重物施加于音叉上的力,进而求出重物质量。音叉式传感器耗电量小,计量准确度高达1/10000~1/200000,称量范围为500g~10kg。 陀螺仪式传感器,转子装在内框架中,以角速度ω绕X轴稳定旋转。内框架经轴承与外框架联接,并可绕水平轴Y倾斜转动。外框架经万向联轴节与机座联接,并可绕垂直轴Z旋转。转子轴(X轴)在未受外力作用时保持水平状态。转子轴的一端在受到外力(P/2)作用时,产生倾斜而绕垂直轴Z 转动(进动)。进动角速度ω与外力P/2成正比,通过检测频率的方法测出ω,即可求出外力大小,进而求出产生此外力的被测物的质量。陀螺仪式传感器响应时间快(5秒),无滞后现象,温度特性好(3ppm),振动影响小,频率测量准确精度高,故可得到高的分辨率(1/100000)和高的计量准确度(1/30000~1/60000)。 电阻应变式传感器利用电阻应变片变形时其电阻也随之改变的原理工作。主要由弹性元件、电阻应变片、测量电路和传输电缆4部分组成。电阻应变片贴在弹性元件上,弹性元件受力变形时,其上的应变片随之变形,并导致电阻改变。测量电路测出应变片电阻的变化并变换为与外力大小成比例的电信号输出。电信号经处理后以数字形式显示出被测物的质量。电阻应变式传感器的称量范围为300g至数千Kg,计量准确度达1/1000~1/10000,结构较简单,可靠性较好,大部分电子衡器均使用此传感器。2.称重传感器的选择 传感器种类繁多,分类方式也千差万别,它们都有各自的特点,但在设计电子秤时,选择一种合适的传感器非常重要,传感器的性能在很大程度上决定了电子秤的精确度和稳定性。称重传感器的选择主要从以下几个方面考虑。(1)对传感器数量和量程的选择 传感器数量的选择是根据电子秤的用途、秤体需要支撑的点数(支撑点数应根据使秤体几何重心和实际重心重合的原则而确定)而定。一般来说,秤体有几个支撑点就选用几只传感器,但是对于一些特殊的秤体,如电子吊秤,就只能采用一个传感器,一些机电结合秤就应根据实际情况来确定选用传感器的个数。传感器的量程选择可依据秤的最大称量值、选用传感器的个数、秤体自重、可产生的最大偏载及动载因素综合评价来决定。一般来讲,传感器的量程越接近分配到每个传感器的载荷,其称量的准确度就越高。但是在实际的使用当中,由于加在传感器上的载荷除被称物体外,还存在秤体自重、皮重、偏载及振动冲击等载荷,因此选用传感器时,要考虑诸多方面的因素,保证传感器的安全和寿命。公式2-1给出了传感器量程选择的计算公式。 K0K1K2K3WmaxWC N(2-1) 式中C—单个传感器的额定量程;W—秤体自重;Wmax一被称物体净重的最大值;N—秤体所采用支撑点的数量;K0—保险系数,一般取1.2~1.3之间;K1—冲击系数;K2—秤体的重心偏移系数;K3—风压系数(2)传感器准确度等级的选择 传感器的准确度等级概括了传感器的非线性、蠕变、蠕变恢复、滞后、重复性、灵敏度等技术指标。称重传感器已按准确度等级划分,且已考虑了0.7倍误差因子,非自动衡器称重传感器的准确度等级要选择与电子秤相对应的准确度等级。称重传感器按综合性能分为A、B、C、D四个准确度等级,分别对应于衡器Ⅰ、Ⅱ、Ⅲ、Ⅳ四个准确度等级。 (3)各种类型传感器的使用范围 称重传感器形式的选择主要取决于称重的类型和安装空间,保证安装合适,称重安全可靠;另一方面要考虑厂家的建议。对于传感器制造厂家来讲,它一般规定了传感器的受力情况、性能指标、安装形式、结构形式、弹性体的材质等。譬如铝合金悬臂梁传感器适合于电子计价秤、平台秤、案秤等;钢式悬臂梁传感器适用于电子皮带秤、分选秤等;钢质桥式传感器适用于轨道衡、汽车衡等;柱式传感器适用于汽车衡、动态轨道衡、大吨位料斗秤等。(4)使用环境 称重传感器实际上是一种将质量信号转换成可测量的电信号输出装置。用传感器首先要考虑传感器所处的实际工作环境,这点对于正确选用传感器至关重要,它关系到传感器能否正常工作以及它的安全和使用寿命,乃至整个衡器的可靠性和安全性。一般情况下,高温环境对传感器造成涂覆材料融化、焊点开化、弹性体内应力发生结构变化等问题;粉尘、潮湿对传感器造成短路的影响;在腐蚀性较高的环境下会造成传感器弹性体受损或产生短路现象;电磁场对传感器输出会产生干扰。相应的环境因素下我们必须选择对应的称重传感器才能满足必要的称重要求。3.电阻应变式称重传感器 按照称重传感器选择的指标要求,以及对各种传感器的比较,本设计选定电阻应变片式传感器,下面对此类传感器做详细介绍。 电阻应变式称重传感器是把电阻应变计粘贴在弹性敏感元件上,弹性体(弹性元件,敏感梁)在外力作用下产生弹性变形,使粘贴在他表面的电阻应变片(转换元件)也随同产生变形,电阻应变片变形后,它的阻值将发生变化(增大或减小),再经相应的测量电路把这一电阻变化转换为电信号(电压或电流),从而完成了将外力变换为电信号的过程。 电阻应变式称重传感器包括两个主要部分,一个是弹性敏感元件:利用它将被测的重量转换为弹性体的应变值;另一个是电阻应变计:它作为传感元件将弹性体的应变,同步地转换为电阻值的变化。电阻应变片所感受的机械应变量一般为10-6~10-2,随之而产生的电阻变化率也大约在10-6~10-2数量级之间。这样小的电阻变化用一般测量电阻的仪表很难测出,必须采用一定形式的测量电路将微小的电阻变化率转变成电压或电流的变化,才能用二次仪表显示出来。在电阻应变式称重传感器中通过桥式电路将电阻的变化转换为电压变化。当传感器不受载荷时,弹性敏感元件不产生应变,粘贴在其上的应变片不发生变形,阻值不变,电桥平衡,输出电压为零;当传感器受力时,即弹性敏感元件受载荷P时,应变片就会发生变形,阻值发生变化,电桥失去平衡,有输出电压。图2-2为电阻应变式称重传感器桥式测量电路。 图2-2 电阻应变式称重传感器桥式测量电路 R1、R2、R3、R4为4个应变片电阻,组成了桥式测量电路,Rm为温度补偿电阻,e为激励电压,V为输出电压。若不考虑Rm,在应变片电阻变化以前,电桥的输出电压为: R4R1Ve R1R2R3R4(2-2) 由于桥臂的起始电阻全等,即R1=R2=R3=R4=R,所以V=0。当应变片的电阻R1、R2、R3、R4变成R+△R1、R+△R2、R+△R3、R+△R4时,电桥的输出电压变为: RR1RR4Ve RR1RR2RR3RR4(2-3) 通过化简,上式则变为: VeR1R2R3R4 4RRRR(2-4) 也就是说,电桥输出电压的变化与各桥臂电阻变化率的代数和成正比。如果四个桥臂应R变片的灵敏系数相同,且=Kε,则上式又可写成: R VeK1234 4(2-5) 式中K为应变片灵敏系数,ε为应变量。式2-5表明,电桥的输出电压和四个轿臂的应变片所感受的应变量的代数和成正比。在电阻应变式称重传感器中,4个应变片分别贴在弹性梁的4个敏感部位,传感器受力作用后发生变形。在力的作用下,R1、R3被拉伸,阻值增大,△R1、△R3正值,R2、R4被压缩,阻值减小,△R2、△R4为负值。再加之应变片阻值变化的绝对值相同,即 因此 VeK4eK 4R1R3R或13 R2R4-R或24 (2-6)(2-7) (2-8) 若考虑Rm,则电桥的输出电压变成: 令Su V,则 eSuRK R2RmRRRRRRVeKe 2RR2RmR2Rm2R(2-9) (2-10) Su称为传感器系数或传感器输出灵敏度。 对于一个高精度的应变传感器来说,仅仅靠4个应变片组成桥式测量电路还是远远不够的。由于弹性梁材料金相组织的不均匀性及热处理工艺、应变片性能及粘贴工艺、温度变化等因素的影响,传感器势必产生一定的误差。为了减少传感器随温度变化产生的误差,提高其精度和稳定性,需要在桥路两端和桥臂中串入一些补偿元件。如:初始不平衡值的补偿、零载输出温度补偿、输出灵敏度温度补偿等。 2.3.3 A/D转换器的选定 在实际的测量和控制系统中检测到的常是时间、数值都连续变化的模拟量,模拟量要输入到单片机中进行处理,首先要经过模拟量到数字量的转换,单片机才能接收、处理。目前有多种类型的A/D转换器,其类型有积分型、逐次逼近型、并行比较型、Σ- Δ调制型、压频变换型等。多种类型的ADC各有其优缺点,并能满足不同的具体要求。1.A/D转换器的分类:(1)积分型 积分型ADC工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。(2)逐次逼近型 逐次逼近型ADC由一个比较器和D/A转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置D/A转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。(3)并行比较型/串并行比较型 并行比较型ADC采用多个比较器,仅作一次比较而实行转换,又称Flash(快速)型。由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为 Half flash(半快速)型。还有分成三步或多步实现AD转换的叫做分级型ADC,而从转换时序角度又可称为流水线型ADC,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。这类AD速度比逐次比较型高,电路规模比并行型小。(4)Σ-Δ调制型 Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。原理上近似于积分型,将输入电压转换成时间(脉冲宽度)信号,用数字滤波器处理后得到数字值。电路的数字部分基本上容易单片化,因此容易做到高分辨率。主要用于音频和测量。(5)压频变换型 压频变换型是通过间接转换方式实现模数转换的。其原理是首先将输入的模拟信号转换成频率,然后用计数器将频率转换成数字量。从理论上讲这种AD的分辨率几乎可 以无限增加,只要采样的时间能够满足输出频率分辨率要求的累积脉冲个数的宽度。其优点是分辩率高、功耗低、价格低,但是需要外部计数电路共同完成AD转换。2.A/D转换器选用的原则: (1)A/D转换器的位数。A/D转换器决定分辨率的高低,在系统中,A/D转换器的分辨率应比系统允许引用误差高一倍以上。 (2)A/D转换器的转换速率。不同类型的A/D转换器的转换速率大不相同。积分型的转换速率低,转换时间从几豪秒到几十毫秒,只能构成低速A/D转换器,一般用于压力、温度及流量等缓慢变化的参数测试。逐次逼近型属于中速A/D转换器,转换时间为纳秒级,用于个通道过程控制和声频数字转换系统。 (3)是否加采样/保持器。 (4)A/D转换器的有关量程引脚。有的A/D转换器提供两个输入引脚,不同量程范围内的模拟量可从不同引脚输入。 (5)A/D转换器的启动转换和转换结束。一般A/D转换器可由外部控制信号启动转换,这一启动信号可由CPU提供。转换结束后A/D转换器内部转换结束信号触发器置位,并输出转换结束标志电平,通知微处理器读取转换结果。 (6)A/D转换器的晶闸管现象。其现象是在正常使用时,A/D转换器芯片电流骤增,时间一长就会烧坏芯片。 2.3.4 单片机型号的选定 1.单片机选定准则 市场上的单片机型号很多,功能也有差异,在选择单片机型号的时候主要应该注意以下几个方面:(1)市场货源 系统设计者只能在市场上能够提供的单片机中选择,特别是作为产品大批量生产的应用系统,所选的单片机型号必须有稳定、充足的货源。(2)单片机性能 应根据系统的功能要求和各种单片机的性能,选择最容易实现系统技术指标的型号,而且能达到较高的性能价格比。单片机性能包括片内硬件资源、运行速度、可靠性、指令系统功能、体积和封装形式等方面。影响性能价格比的因素除单片机的性能价格外,还包括硬件和软件设计的容易程度、相应的工作量大小,以及开发工具的性能价格比。(3)研制周期 在研制任务重、时间紧的情况下,还要考虑所选的单片机型号是否熟悉,是否能马上着手进行系统的设计。与研制周期有关的另一个重要因素是开发工具,性能优良的开发工具能加快系统地研制进程。2.AT89S51单片机介绍 根据以上对单片机选型知识的介绍,本设计选用AT89S51单片机,下面对此型号单片机进行简介。 AT89S51是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机。AT89S51是一种带4K字节闪烁可编程可擦除只读存储器的单片机,其指令集和传统的51单片机指令集是一样的。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。硬件设计 3.1 系统硬件结构图 图3-1为系统总体硬件结构方框图,系统共分为三大部分:数据采集模块、单片机控制模块以及键盘和显示模块。各模块所采用的主要芯片型号已于图中有所标示。 AD转换ADC0832AT89S51单片机最小系统超重报警模块4*4矩阵键盘LM4229液晶显示 图3-1 系统总体硬件设计方框图 3.2 单片机主控单元的设计 3.2.1 单片机引脚说明 AT89S51单片机芯片为40个引脚,图3-2为单片机AT89S51引脚图。下面简单叙述各引脚的功能。 VCC/GND:电源/接地引脚; P0口:P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端;P0还可以用作总线方式下的地址数据复用管脚,用来操作外部存储器。在这种工作模式下,P0口具有内部上拉作用。对内部Flash程序存储器编程时,接收指令字节、校验程序、输出指令字节时,要求外接上拉电阻; P1口:P1是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用; 另外,P1.0、P1.1可以分别被用作定时器/计数器2的外部计数输入(P1.0/T2)和触发输入(P1.1/T2EX);对内部Flash程序存储器编程时,接收低8位地址信息; P2口:P2是一个带有内部上拉电阻的8位双向I/0端口;输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用; P2口在存取外部存储器时,可作为高位地址输出;内部Flash程序存储器编程时,接收高8位地址和控制信息; P3口:P3是一个带有内部上拉电阻的8位双向I/0端口,输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。P3引脚功能复用见表3-1所示: 表3-1 P3口引脚功能复用 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 串行通讯输入(RXD)串行通讯输出(TXD)外部中断0(INT0)外部中断1(INT1)定时器0输入(T0)定时器1输入(T1)外部数据存储器写选通WR 外部数据存储器写选通RD 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:外部程序存储器的选通信号输出端。当AT89S51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲,即两次有效。但访问外部数据存储器时,将不 会有脉冲输出; EA/Vpp:外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89S51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。 图3-2单片机AT89S51引脚图 3.2.2 AT89S51最小系统设计 单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统。对51系列单片机来说,最小系统包括:单片机、晶振电路、复位电路。其中复位电路采用上电复位。其最小系统电路图见图3-3所示: 图3-3 单片机最小系统图 对于AT89S51单片机,其最小系统只需要电源、复位电路、时钟电路就能工作。由于我们的程序存储器(ROM)采用内部Flash存储单元,所以单片机上的EA接高。 微处理器系统在开始工作时必须对微处理器内部的寄存器等进行复位,使各个寄存器的值设为预定状态才能顺利开始工作。复位电路的好坏决定着单片机能否正常工作。复位电路基本功能是在系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。复位电路可以使用专用复位芯片,也可以用电阻电容搭建。本文从可靠性和成本考虑最终选用电阻电容来搭建复位电路。对于51内核的单片机,RST是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。 3.3 数据采集模块设计 3.3.1 传感器单元设计 根据第二章对各种类型传感器特性的介绍,本设计决定采用L-psⅢ型称重传感器,该传感器为双孔平衡梁形式,是制作电子计价秤的专用产品,也可用于制造由单只传感器构成的电子案秤、台秤及专用衡器等。其主要技术指如表3-2所示: 表3-2 L-psⅢ型称重传感器技术指标 额定载荷 灵敏度 准确度等级 最大分度数 最小检定分度值 综合误差 重复性 蠕变 最小静载荷 最大安全载荷 极限过载荷 输入电阻 输出电阻 温度补偿范围 使用温度范围 接线方式 Kg mV/V %F.S.%F.S.%F.S./30min %Fmax %Fmax %Fmax 3,6,10,20,30,50 1.8±0.08 C3 3000 Fmax/10000 0.02 0.01 ±0.017 1 150 200 415~445 349~355-10~+50-20~+60 ℃ ℃ 输入(+):红,输入(-):白,输出(+):绿 输出(-):蓝,屏蔽:黄 3.3.2 A/D转换单元设计 根据对各种A/D转换器的介绍与分析,本设计选定ADC0832作为本设计的A/D转 换模块。下面对该芯片的情况进行简要的介绍。 ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。具有体积小,兼容性强,性价比高的特点,具体参数如下: 8位分辨率; 双通道A/D转换; 输入输出电平与TTL/CMOS相兼容; 5V电源供电时输入电压在0~5V之间; 工作频率为250KHZ,转换时间为32uS; 一般功耗仅为15mW; 8P、14P-DIP(双列直插)、PICC多种封装; 商用级芯片温宽为0℃~70℃,工业级芯片温宽为-40℃~85℃; 1、下面对ADC0832的引脚进行说明,图3-4为该芯片的引脚图: 图3-4 ADC0832引脚图 CS—:片选端,低电平芯片使能; CH0:模拟输入通道0,或作为IN+/-使用; CH1:模拟输入通道1,或作为IN+/-使用; GND:芯片参考零点位(地); DI:数据信号输入,选择通道控制; DO:数据信号输出,转换数据输出; CLK:芯片时钟输入; Vcc/REF:电源输入及参考电压输入(复用)。 2、ADC0832的接口电路 正常情况下,ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI,但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO与DI并联在一根数据线上使用。单片机与ADC0832的接口电路如图3-5所示。 图3-5 单片机与ADC0832连接图 当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可以任意,当要进行A/D转换时,须先将CS使能端置于低电平并保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。 3.4 键盘和显示电路单元设计 3.4.1 键盘电路设计 在本设计中,采用的是4×4的矩阵式键盘,将单片机的P1.0-P1.3作为键盘的行线接口,P1.4-P1.7作为列线接口,列线通过电阻接+5V。商品的单价已由程序设定好,并 号连接。3.4.2 显示电路设计 3.5 系统总体原理图 可由键盘选择各种商品的价格。 图3-6所示,为完善其功能,电路中添加了上拉电阻。 图3-6 液晶显示模块LM4229与单片机接线图 在系统各部分的设计完成后,把各模块根据其功能和信号处理的流程连接起来,便得到系统总体设计的原理图,如图3-7所示,为简洁起见,其中的接线部分采用网络标本设计中显示部分采用了当今常用的LM4229液晶显示模块。其与单片机的接线如 措施。3.6 硬件抗干扰设计 图3-7 系统总体原理图 方面,但更重要的方面是外界干扰和接地引起的异常。 度。就单片机测控系统来讲,其主要干扰是来自电源和信号传输通道的干扰。用到称重传感器,所采用的应变式传感器是高阻抗器件,其绝缘性能、机械结构的稳定性等,直接影响工作特性的稳定。因此,应变片传感器的绝缘材料必须有很高的绝缘性统的可靠性更倍受人们的关注,这是因为系统的可靠性决定了系统能否达到所需要的精能、足够的机械强度、高形状稳定性及良好的抗湿性能。下面重点介绍单片机的抗干扰随着科学技术的迅速发展,人们对单片机测控系统的各种性能要求越来越高。而系本电子称重器的核心部件是单片机,所以我们的抗干扰措施主要是针对单片机。还电子秤在使用中,常常会出现各种各样的异常现象,电子秤本身的质量问题是一个 1、电源的抗干扰措施 普通用电中含有多种高次谐波,它们很容易经电源进入单片机系统,还有一些射频发射、电磁波等也会由电源线感应反馈进入单片机系统造成干扰。因此,在电源电路中必需采取有效地滤波措施,来抑制这些高频干扰的侵入。电源滤波的一般方法是在电源变压器初、次级分别设置低通滤波器和线间电容滤波器,使50Hz市电基波通过,而抑制掉高频信号。此外在变压器的初、次级之间均采用屏蔽层隔离,其中初级屏蔽层接大地,次级屏蔽层接系统逻辑地,以减少其分布电容,提高抗共模干扰的能力。 2、信号传输通道的抗干扰措施 信号传输通道包括系统的前向通道和后向通道,其主要干扰有:杂散电磁场通过感应和辐射方式进入通道的干扰;由于地阻抗耦合、漏电流等因素产生的加性干扰;以及因传输线衰减、阻抗失配等因素引起的乘性干扰。对于这三类干扰,可以采用以下几种措施加以排除。(1)光电隔离技术 光电耦合器对干扰信号具有良好的隔离性能,一是它的输入阻抗很小,约为100fl-lldl,而干扰源内阻则很大,通常为105Q~108Q,因此能分压到光电耦合器输入端的噪声很小;二是光电耦合器输入部分的发光二极管是在电流状态下工作的,即使干扰噪声有较高的电压幅度,但由于能量小,不能提供足够的电流使发光二极管发光而被抑制掉;三是光电耦合器的输入回路与输出回路之间分布电容极小,绝缘电阻很大,回路一边的干扰很难通过光电耦合器馈送到另一边去。因此,采用光电耦合器可将单片机与前向通道、后向通道及其他部分从电气上隔离开来,能有效地防止干扰信号的侵入。(2)接地技术 本系统既有模拟电路又有数字电路,因此数字地与模拟地要分开,最后只在一点相连,如果两者不分,则会互相干扰。(3)输入输出信号线采用屏蔽双绞线 屏蔽双绞线对于静电干扰和电磁干扰有很好的抑制作用,有条件的话应尽量采用。但使用中应注意: 线缆敷设时不要过分用力或使电缆打结、避免弯曲超过900、避免过紧地缠绕电缆,以保护双绞47线的扭绞状态; 做线时,避免损坏线缆的外皮、不要切坏线缆内的导线; 接线时,双绞线的开绞长度尽量小,不要超过20mm; 双绞线的屏蔽层采用设备端单端接地方式。系统软件设计 本系统程序使用模块化的程序设计思想,主程序通过调用子程序以实现各部分功能。先进行软件的总体设计,然后进行各功能模块设计。 4.1 主程序设计 电子秤需要有数据采集、处理、存结果、送显示的运行过程。根据这一要求,电子秤的信息采集与处理分三个阶段:在微处理器的控制下,经传感器转换的电压信号通过输入电路送入A/D转换器处理,存入到数据存储器中;微处理器对采集的测量数据进行必要的数据处理,把数据信号处理为显示所要求的信号格式,通过输出接口电路输出并显示。主流程图见图4-1所示: 开始单片机初始化、LM4229进入欢迎界面、ADC0832初始化载物台是否有重物Y单片机存储ADC0832采样值N是否输入商品代码按键Y单片机执行计算并将结果送LM4229显示N测量结束键是否按下Y结束N 图4-1 主程序流程图 4.2 LM4229液晶显示驱动程序 开始写入控制字写入初始行Y是否换行?N全部数据已写完?Y结束N 图4-2 LM4229液晶显示驱动程序流程图 LM4229液晶能够显示比较复杂的汉字和图形,首先必须对其写入控制操作字,包括图形的显示方式,字体的模式。然后写入初始行地址,指针自动左移,直到写完全部数据为止。 write_data(place&0xff);//写入地址高位 write_data(place/256);//写入地址低位 write_com(0x24);//地址设置 write_com(0xb0);//设置数据自动写 write_data(ASC_MSK[(c1-0x20)*16+k]);/*---例如:0的ASCII码为0x30, 在ASC_MSK中的位置为0x10*16---16字节字码依次写入LCD---*/ write_com(0xb2);//自动复位 place=place+30; 4.3 ADC0832采样程序 开始拉低CS、拉高CLKDATA右移八位?Y拉高CS、拉低CLK,返回数据N结束 图4-3 ADC0823采样程序流程图 单片机通过拉低CS、拉高CLK来启动ADC0832进行外部压力传感转换后的电压信号进行采样,每产生8个CLK脉冲,DATA获得一位完整的8bit数据,此时MCU发送中断请求,拉高CS,拉低CLK,并将数据DAT返回。 4.4 键盘程序 本设计中采用了4×4矩阵式键盘,单片机定时进行查询。首先单片机发送行扫描代码,然后进行列扫描,当发现某一列出现了低电平时,即返回相应的键盘值。若没有发现则说明当前行没有键按下,行扫描右移一位,继续执行列扫描。 开始发送行扫描码发送列扫描码右移一位右移一位列扫描完毕?NYN行扫描完毕?Y返回键值结束图4-4 键盘程序流程图 系统仿真 在系统硬件与软件全部设计完成的情况下,将系统在protues7.5环境下进行了软件仿真,以确保本设计方案的可行性与准确性。因为在仿真时不能实际的把物体放到称重台上,所以在仿真时采用直接输入模拟电压信号的方法,来代替信号的采集。 5.1 欢迎界面的仿真 开始仿真时,先将用C语言编写的程序用Keil软件进行编译,生成可执行程序,然后装入单片机中进行仿真,按开始按钮,单片机及其他各部分电路开始工作,单片机调用内部存储数据对各部分接口电路初始化。200ms后LM4229进入欢迎界面,如图5-1所示。 图5-1 电子秤欢迎界面仿真 5.2 无重物情况仿真 欢迎界面过后,电子秤进入称重界面。此时,ADC0832不断对外部数据进行采样交给单片机进行处理,一旦有物品放入载物台,ADC0832立即发送中断请求,并将本次采集数据交给单片机进行处理。调节压力传感模拟电路电压,将电压设为0.00表示此时载物台上没有物体。此时LM4229显示指示“实用电子秤,名称······单价:0.000元/千克,总重量:0.000千克,总价:00.000元”。如图5-2所示。 图5-2 无重物称重界面仿真 5.3 称量物体仿真 上调压力传感电压,表示已有商品放在载物台上,ADC0832立即发送中断请求,并将本次采集的数据交给单片机进行处理,之后送入LM4229显示相应数据量。在此过程中,键盘不断进行扫描,一旦有键按下,单片机便对其数据进行相应处理,然后将对LM4229进行写操作。此时,按下键盘,选择相应的商品。如按下3号键,选择草莓,此时LM4229上显示“名称:草莓,单价:3.6元/千克,总重量:2.499千克,总价:“8.999元”(实际3.6×2.499=8.999元)。达到基本要求。如图5-3所示。当要称量下一种不同商品的时候,只需按下0键,选择商品代码,再按下相应商品键。 图5-3 称重情况仿真 5.4 最大量程仿真 将称重传感器调节到最大,显示最大称量,其结果如图5-4所示。由于元件及系统的误差,使得最大量程不能达到预定的5Kg,而是4.980Kg,这是在误差允许范围内的,符合要求。因为本设计添加了超重报警模块,所以在称量的过程中,一旦物体自身的重量超出电子秤的称量范围,蜂鸣器立即会发出“滴滴····”,警报声告诉工作人员,所称量物品超重。 图5-4 最大量程仿真 5.5 仿真总结与问题补充 5.5.1 仿真总结 以上,我们进行了几种基本情况的仿真,总结仿真的过程,我们可以得出以下结论: 1、该电子秤设计简单,操作方便,可以很容易的进行称量; 2、由于元件设置的原因,使电子秤的量程未达到预设的范围; 3、各商品的价格已在程序中设定好,既给称量带来了方便,也带来了麻烦,使得称量其他物品时需要修改程序。 5.5.2 问题补充 因为本设计采用软件仿真的方法,而不能进行实际的称量,所以采用了直接输入电压信号的方式代替了传感器采集的信号。但是经传感器采集的信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经过滤波电路和A/D转换电路转换成数字信号才被送入到主控电路的单片机中进行处理。在实际称量中,可以加入放大滤波电路如图5-5所示。 图5-5 放大滤波电路 图5-5为放大滤波电路的设计。放大器采用放大芯片AD620电容C1、C3用来滤除 采样信号电压中的低频噪声,选用22uF的普通独石电容;电容C2、C4用来滤除采样信号电压中的高频噪声,选用0.1uF的普通独石电容。因为采样信号电压值只有毫伏级,所以电阻R1、R2选用较小的阻值,否则导致放大器由于输入电流太小而放大效果不明显。微弱信号Vi1和Vi2被分别放大后从AD620的第6脚输出。 总结与展望 电子称重器是贸易市场中的常见的称重计量仪器。本文先说明了称重器的设计思路,并介绍了几种设计方案,选择了其中一种简单可行的方案。然后从电子秤的核心部件称重传感器的介绍开始,逐个进行各个模块器件的论证与选择。后面详细介绍了电子秤的硬件以及软件设计。 本设计为小量程(0~5Kg)称量器件,可以广泛应用于商店、菜市场等场合。在硬件部分设计过程中选用了A/D转换芯片ADC0832和LM4229液晶显示,大大简化了硬件电路及软件编程,并提高了系统的准确性和稳定性。人机界面部分由液晶显示与4×4位矩阵键盘组成,可以由键盘控制显示商品名称、重量和价格等信息,操作简单方便。软件设计中使用了C语言编程,便于修改和应用。 本次设计的电子称重器还存在一些缺点与不足,主要以下这两点:一是量程仅是5Kg,从而限制了该电子秤的使用范围。可采用大量程的称重传感器,但同时需要提高A/D转换芯片的位数,以保持精度。二是商品的种类与价格已编入程序,给称量其它的商品带来不便。三是本次设计没有完成实物的制作,从而不能预见商业产品开发中的所有问题,需要进一步研究。 通过这次电子秤的设计,我对所学的专业课知识有了更深的理解,尤其是单片机方面。在设计过程中,查阅了大量的中外文资料,解决了不少难题。另外本次设计提升了我分析问题解决问题的能力,增强了对学习的信心,相信这对我以后的工作和学习有重要的帮助。 附录程序 #include unsigned int sbit ADCS =P3^5;sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6; uint x1,y1,z1=0,w1;uchar ad_data,k,n,m,e,num,s; //采样值存储 uint temp1;sbit beep =P3^0; char press_data; //标度变换存储单元 float press;unsigned char ad_alarm,temp; //报警值存储单元unsigned char abc[5]={48,46,48,48,48};unsigned char price_all[6]={48,48,46,48,48,48};float price_unit[10]={5.5,2.8,3.6,4.5,2.4,4.2,3.8,6.0,1.5,0}; //商品初始单价 uchar price_danjia[5]={48,46,48,48,48};float price;uint price_temp1,price_temp2; //商品总价 uchar Adc0832(unsigned char channel); void alarm(void);void data_pro(void);void delay(uint k);void keyscan(); void disp_init();void price_jisuan();/************ 主函数 ************/ void main(void){ delay(500); //系统延时500ms启动 //ad_data=0; //采样值存储单元初始化为0 lcd_init(); //显示初始化 disp_init(); //开始进入欢迎界面 delay(1000); //延时进入称量画面 clear_lcd(0,4,40); clear_lcd(16,0,100); clear_lcd(28,0,40); clear_lcd(44,0,100); clear_lcd(56,0,40); clear_lcd(72,0,100); clear_lcd(84,0,40); clear_lcd(100,0,100); clear_lcd(112,0,40); write_lcd(0,8,“实用电子秤”); while(1) { ad_data =Adc0832(0); //采样值存储单元初始化为0 alarm(); data_pro();//读取重量 keyscan();//查询商品种类 write_lcd(40,0,“------------------------------”); write_lcd(56,0,“单 价:”); write_lcd(56,11,price_danjia); write_lcd(56,20,“元/千克”); write_lcd(72,0,“总重量:”); write_lcd(72,11,abc); write_lcd(72,20,“千克”); write_lcd(88,0,“总 价:”); price_jisuan(); //计算出价格 write_lcd(88,10,price_all); write_lcd(88,20,“元”); write_lcd(112,0,“设计学生:1210401038 谢玉夏”);} } /************ 读ADC0832函数 ************/ //采集并返回 uchar Adc0832(unsigned char channel) //AD转换,返回结果 { uchar i=0; uchar j; uint dat=0; uchar ndat=0; if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_(); ADCS=0;//拉低CS端 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿1 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿2 _nop_(); _nop_(); ADCLK=1;//拉高CLK端 ADDI=(channel>>1)&0x1; _nop_(); _nop_(); ADCLK=0;//拉低CLK端,形成下降沿3 ADDI=1;//控制命令结束 _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) { dat|=ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); dat<<=1; if(i==7)dat|=ADDO; } for(i=0;i<8;i++) { j=0; j=j|ADDO;//收数据 ADCLK=1; _nop_(); _nop_(); ADCLK=0;//形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; } ADCS=1;//拉搞CS端 ADCLK=0;//拉低CLK端 ADDO=1;//拉高数据端,回到初始状态 dat<<=8; dat|=ndat; return(dat); //return ad k } void data_pro(void){ unsigned int; if(0 { int vary=ad_data; press=(0.019531*vary); temp1=(int)(press*1000); //放大1000倍,便于后面的计算 abc[0]=temp1/1000+48; //取压力值百位 abc[1]=46; abc[2]=(temp1%1000)/100+48; //取压力值十位 abc[3]=((temp1%1000)%100)/10+48; //取压力值个位 abc[4]=((temp1%1000)%100)%10+48;//取压力值十分位 } } /*****************报警子函数*******************/ void alarm(void){ if(ad_data>=256) beep=0; //则启动报警 else beep=1; } void delay(uint k){ uint i,j; for(i=0;i for(j=0;j<100;j++);} //开机欢迎界面 void disp_init(){ write_lcd(0,8,“欢迎使用电子秤”); write_lcd(16,0,“------------------------------”); write_lcd(28,0,“设计学生:谢玉夏”); write_lcd(44,0,“------------------------------”); write_lcd(56,0,“班级学号:1210401038”); write_lcd(72,0,“------------------------------”); write_lcd(84,0,“指导老师:刘志芳”); write_lcd(100,0,“------------------------------”); write_lcd(112,0,“设计日期:2014年12月”); } //键盘服务程序 void keyscan(){ P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xee:num=1,price=price_unit[0], write_lcd(24,0,“名 break;case 0xde:num=2,price=price_unit[1],write_lcd(24,0,”名 break;case 0xbe:num=3,price=price_unit[2],write_lcd(24,0,“名 break;case 0x7e:num=4,price=price_unit[3],write_lcd(24,0,”名 break; } while(temp!=0xf0) { 称: 杏称: 李 称: 草 称: 葡 仁“);子”);莓“);萄”); temp=P1; temp=temp&0xf0; } } } P1=0xfd; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xed:num=5,price=price_unit[4],write_lcd(24,0,“名 break;case 0xdd:num=6,price=price_unit[5],write_lcd(24,0,”名 break;case 0xbd:num=7,price=price_unit[6],write_lcd(24,0,“名 break;case 0x7d:num=8,price=price_unit[7],write_lcd(24,0,”名 break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfb; temp=P1; temp=temp&0xf0; 称: 西称: 苹称: 雪称: 核 瓜“);果”);梨“);桃”); 一.课程设计背景 当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。 它所给人带来的方便也是不可否定的,它在一块芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。本设计是用单片机AT89C51来控制,采用共阳极数码显示,软件部分是由C语言来编写的。设计任务 二、元器件清单及简介 89c51型芯片 一片 排阻 两个 晶振12MHZ 一个 电容22uf 两个 面包板 三个 导线 若干 三、设计原理及分析 根据功能和指标要求,本系统选用MCS 51 单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计考虑如下: ①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高,故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。 ②另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可。系统模块图: 2.1 输入模块: 键盘扫描计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图所示:一般有16 个键组成,在单片机中正好可以用一个P 口实现16 个按键功能,这种形式在单片机系统中也最常用。 以上键盘从上到下依次编号为1,2,3,4,D,C,B,A 1 由图 3 矩阵键盘内部电路图可以知道,当无按键闭合时,P10~P13 与P14~P17 之间开路。当有键闭合时,与闭合键相连的两条I/O 口线之间短路。判断有无按键按下的方法是:第一步,置列线P14~P17 为输入状态,从行线P10~P13 输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P14~P17 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。2.2 运算模块:(单片机控制)AT89C51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。[3][5]单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。2.3 显示模块: LED 显示发光二极管LED 是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LED 显示单元是反映系统输出和操作输入的有效器件。LED 具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,因而在单片机应用系统中获得了广泛的应用。[2][4]通常的数码显示器是由7 段条形的LED 组成(如图4 所示),点亮适当的字段,就可显示出不同的数字。我们采用8 段数码管,其中位于显示器右下角的LED 作小数点用。LED 显示器有两种不同的形式:共阴极和共阳极。本次设计采用共阴极接法(如图5所示)。 3、软件设计 在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以单独设计、编程和调试,然后组合起来。这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。功能流程图如下: 4、硬件原理 以下为简易计算器的总体电路图 加运算: 减运算: 乘运算: 除运算: 清零: 四.总结 通过此次单片机实训设计,我们学到了很多东西,在器件的了解和器件选择上有个明确的认识,并在程序的设计,及理论在实践反面的运用能力有巨大的提高。 这次单片机课程设计由我们六位同学经过一周努力设计得到。软件的编程要我们不断的调试,最终我们终于完成了单片机实训课程设计,很高兴它能按着设计思想与要求运动起来。 当然,这其中也有很多的问题。第一、不够细心,由于对课本理论的不熟悉导致的编程错误,对于器件的实际情况的不了解,理论与实践的差距导致我们在设计实际电路时出现了很多错误,使得实验不能一次通过。第二、是在学习态度上,这次课程设计是对我们的学习态度的一次体验。对于这次单片机综合课程实习,我们的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨,这次的课程设计我们所遇到的问题多半是由于我们不够严谨。第三、在做人上,我们认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没什么办不到的。还有就是团队的合作精神。 在这次难得的课程设计过程中我们锻炼了自己的思考能力和动手能力,加强了我们思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题、解决问题的能力。 五.参考文献 《单片机原理及应用》 张毅刚 高等教育出版社 《MCS—51单片机应用设计》 张毅刚 哈尔滨工业大学出版社 《MCS—51系列单片机实用接口技术》 李华 北京航空航天大学出版社 《单片机应用技术选集》 何立民 北京航空航天大学出版社 《单片机原理及其接口技术》 胡汉才 《数码管显示驱动和键盘扫描控制器CH451及其应用》 清华大学出版社 施隆照 /*********************************************** **实现说明: 1:变量flag_fuhao为键入+、-、*、/运算符标志 (即当前一个键值为+、-、*、/运算符时,flag_fuhao为1,其他键值则flag_fuhao置零,其用在显示时) 2:变量flag_shu数输入情况,flag_shu为0时,输入的符号无效(flag_shu为2时,变量fuhao更新为新键值) *********************************************/ #include sbit OFF = P1^0;//关机键定义 float shu1,shu2;//进行运算的两个变量数 uchar num;////键盘扫描返回值 char flag1,flag_shu,flag_fuhao,fuhao,newkey,update; //flag1开机标志newkey新按键标志,fuhao运算符,update表示等于号 //之后紧接着输入的是数的话则清零shu1 char key_shu;//按键值 char ge=0xdf;//char code Wela[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//六位数码管的位选 unsigned char code Duan[]={0x3f,0x06,0x5b, // 0 1 2 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 无显示 共阴极数码管 // 函数声明 uchar keyscan();//键盘扫描函数 void display(float);//数码管显示函数 void delay(uint i)//延时函数 { while(i--);} /*********************************************** 主函数 ************************************************/ void main(){ flag1=0;//标志关机 while(1){ if(keyscan()==15)//开机检测 { flag1=1;//标志开机 shu1=shu2=fuhao=flag_shu=newkey=0;//初始化变量 while(flag1)//判断是否已开机 { if(!flag_fuhao) display(shu1);//如果输入的不是 else display(shu2); key_shu=keyscan(); if(newkey==1)//有新键值 { if(key_shu==15)//按下ON/C键,清零 { flag_fuhao=update=0; shu1=shu2=fuhao=flag_shu=newkey=0; } else if(key_shu==14flag_shu==1fuhao)//按下“=” { switch(fuhao) { case 10:shu1=shu2+shu1;break; case 11:shu1=shu2-shu1;break; case 12:shu1=shu2*shu1;break; case 13:shu1=shu2/shu1;break; } flag_fuhao=0; fuhao=0; update=1; } 10 else if((key_shu>=0)(key_shu<=9))//按下数字键 { if(update) shu1=0; if(shu1<100000) { shu1=key_shu+shu1*10; flag_shu=1; } update=0; flag_fuhao=0; } else if((key_shu>=10)(key_shu<=13))//按下运算符 { flag_fuhao=1;//表示按下了运算符号键 update=0; if(flag_shu==1)//表示之前有数字键按下 { if(fuhao==0)//表示计算时只有一次按下运算符,如1*8=8,第二个数字后面是=,而不是其他运算符 { shu2=shu1; shu1=0; fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。 flag_shu=2; } else //表示计算时按了多次运算符,如1*8*9=72,第二个数字后面并没有=,而是* { switch(fuhao) { case 10:shu2=shu2+shu1;break; case 11:shu2=shu2-shu1;break; case 12:shu2=shu2*shu1;break; case 13:shu2=shu2/shu1;break; } shu1=0; fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。 } } else if(flag_shu==2) fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。 } newkey=0; } } } } } /*********************************************** 数码管显示函数 ************************************************/ void display(float dis_shu){ long zhengshu=(long)dis_shu;char dis_flag,dis_aa,dis_zero=0;uchar dis_data[6]={0,0,0,0,0,0},xiaoshu[6]={0,0,0,0,0,0}; ge=0xdf;//11 01 111 if(zhengshu>99999)dis_flag=6;else if(zhengshu>9999)dis_flag=5;else if(zhengshu>999)dis_flag=4;else if(zhengshu>99)dis_flag=3;else if(zhengshu>9)dis_flag=2;else dis_flag=1; dis_shu=dis_shu-zhengshu; for(dis_aa=0;(dis_aa<6-dis_flag)(dis_shu=(dis_shu-(char)dis_shu)*10);dis_aa++){ xiaoshu[dis_aa]=(long)dis_shu;} for(dis_aa=0;(dis_aa<6-dis_flag);dis_aa++){ if(dis_zero||xiaoshu[5-dis_flag-dis_aa])12 { duan=Duan[xiaoshu[5-dis_flag-dis_aa]]; wei=ge; ge>>=1; delay(100); wei=0xff; dis_zero=1; } } // for(dis_aa=0;dis_aa dis_data[dis_aa]=zhengshu%10; zhengshu=zhengshu/10;} //数码管段选 for(dis_aa=0;dis_aa if(0xdf!=gedis_aa==0) { duan=Duan[dis_data[dis_aa]]|0x80; wei=ge; ge>>=1; delay(100); wei=0xff; } else { duan=Duan[dis_data[dis_aa]]; wei=ge; ge>>=1; delay(100); wei=0xff; } } //数码管位选 } /*********************************************** 键盘扫描函数 ************************************************/ uchar keyscan()// 函数返回按键的值 { //将第一行线置低电平,其余行线全部为高电平,即扫描第一行 key=0xfe; if(key!=0xfe){ delay(500);//延时消抖操作 if(key!=0xfe) { switch(key) { case 0xee:num=7;break;//7 case 0xde:num=8;break;//8 case 0xbe:num=9;break;//9 case 0x7e:num=13;break;//除号 ”/” } newkey=1; delay(500); while(key!=0xfe) { if(flag1)//如果已开机 if(!shu1num>=0num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字 display(num); else display(shu1); } return num; } } //将第二行线置低电平,其余行线全部为高电平,即扫描第二行 key=0xfd;if(key!=0xfd){ delay(500);//延时消抖操作 if(key!=0xfd) { switch(key) { case 0xed:num=4;break;//4 case 0xdd:num=5;break;//5 case 0xbd:num=6;break;//6 case 0x7d:num=12;break;//* } newkey=1; delay(500); while(key!=0xfd) { if(flag1) if(!shu1num>=0num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字 display(num); else display(shu1); } return num; } } //将第三行线置低电平,其余行线全部为高电平,即扫描第三行 key=0xfb;if(key!=0xfb){ delay(500); if(key!=0xfb) { switch(key) { case 0xeb:num=1;break;//1 case 0xdb:num=2;break;//2 case 0xbb:num=3;break;//3 15 case 0x7b:num=11;break;//- } newkey=1; delay(500); while(key!=0xfb) { if(flag1) if(!shu1num>=0num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字 display(num); else display(shu1); } return num; } } //将第四行线置低电平,其余行线全部为高电平,即扫描第四行 key=0xf7;if(key!=0xf7){ delay(500); if(key!=0xf7) { switch(key) { case 0xe7:num=15;break;// ON/C:开关机按键 case 0xd7:num=0;break;// 0 case 0xb7:num=14;break;// = case 0x77:num=10;break;// + } newkey=1; delay(500); while(key!=0xf7) { if(flag1) if(!shu1num>=0num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字 display(num); else display(shu1); } 16 return num; } } //判断关机按键是否被按下 if(!OFF){ delay(500);//延时消抖操作 if(!OFF) { flag1=0;// } } return 100; } 1 电子秤工作原理 要进行电子秤设计研究, 就要从电子秤的工作原理说起。电子秤中的压力传感器的作用是非常重要的, 通常情况下压力传感器常采用电阻应变式, 传感器在这里充当媒介的作用, 即通过传感器将需要称量物品的重力转变成电压输出, 经放大器放大电压过后, 再经过A/D转换电路将电压变化的信息转变成相关的数据信息, 之后由单片机完成最后的数据计算处理任务, 数据处理之后在经由显示电路显示出称量重物的物重信息。 2 硬件部分 在第一部分中讲述了电子秤的设计原理, 本部分则是关于电子秤的硬件部分, 具体的有压力传感器、模数转换以及显示电路。 2.1 压力传感器 电子秤的压力传感器型号为FSGl5N1A型, 是由Honeywell公司研制生产的。这种类型的传感器是以压阻效应作为基本原理, 同时采用了半导体材料, 这里的半导体材料是作为感应测试组件的。这里的提到的压阻效应主要是指当有外部压力作用在传感器的感测组件时, 感测组件的压力值就会有相应的变化。压力传感器利用这一特性, 当这些半导体材料组件遇到外界压力后会发生变形收缩, 这时组件的电阻值会随着压力的变化而变化。但是由于传感器输出的电压十分微小, 敏感度几乎达到了O.24m V/g, 即便是满量程也不过1 500g而已, 而且本设备中也没有放大电路等增大电压的处理设备, 所以这些细微的数据处理起来将非常的困难, 所以需要放大器的放大作用, 以方便相关电路的处理。下面的是相关的物理公式, 可供参考。 V0= (V2-V4) R/R1因为R3/R1=R 4/R2 2.2 模数转换 在单片机电子秤的设计中选用的是有ADC0809转换芯片, 即CMOS单片型逐次逼近式A/D转换器, 它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、组成的模数转换芯片。本品采用单一电源, 电压为+5V, 即模拟输入的电压范围0V~+5V, 输出的量为00H~FFH, 需要的转化时间为100us, 且在使用时是不需要进行调零的, 这样使用时会非常的便捷。 2.3 显示电路 显示电路中的显示方式主要有两种分别是液晶显示和数码管显示。本设计中的89S51是没有专门配备的的液晶驱动接口, 因此, 本设计采用数码管显示方式。数码管显示的亮度高, 而且价格低廉, 在本设计中采用的是双阳数码管, 这样既可以简化电路, 同时还实现了亮度可调的需求。一般情况下, 驱动电路常采用74I-1240芯片, 因为该芯片支持高达24MHz的时钟频率, 能满足显示电路的功能需求。 3 软件部分 本品在进行软件部分的设计时, 第一步是从整体上设计出系统总框图以及各个区块的模块功能设计, 同时还要有详细的功能计划;第二步是根据设计的图纸和方案进行具体设计, 主要要有各个模块的流程图, 采用合理的编程语言和工具进行程序设计, 具体的设计内容有:进行代码设计、文档设计以及界面设计等;第三步也就是最后一步, 调试、测试软件, 以期达到预期的功能要求。一般情况下完整的软件系统是由主程序和若干个功能子程序组成。本设计中的子程序包含有显示子程序, 信号处理子程序, 以及A/D转换模块等。 3.1 ADC0809复位 ADC0809复位即分别将单片机P30按先后顺序放置于口l、置0, 置于口1时START信号为高电平, 置于口0时又使之为底电平, 即将ADC0809复位。 3.2 数据采集 当完成复位工序后, 才能启动模数转换开关。需要注意的是, 当EOC=0时, 则说明装换正在进行, EOC=l时候, 说明转换已经结束。之后利用D0~D7数字信号输出口将转换的数据结果果传送给单片机Po, 实现数字转换。 3.3 LED显示 在LED显示块中采用了发光二极管来显示字段, 即发光二级管作为显示器件。一般情况下, 七段LED经常应用于微机系统中。七段显示块与微机接口非常容易, 即将一个8位并行输出口与显示块的发光二极管脚相连即可。显示方式分主要有两种, 分别是动态和静态显示。本设计采用动态显示。先选中一个数码管, 然后将相应的数值赋给该数码管。 4 结论 本文通过对基于51单片机的多功能电子秤设计的探讨分析, 系统的论述了电子秤的设计过程和设计内容, 文中分别对电子秤的工作原理, 硬件部分以及软件部分的设计进行了论述研究, 在硬件部分中的传感器设计是重点内容, 本设计中的传感器采用压阻效应原理, 以半导体材料作为感测组件, 从而实现用电阻变化放映重力变化的目的。硬件部分还包括了显示电路和模数转换两个部分, 本设计采用的是数码管显示, 软件部分主要由主程序和各个子程序组成。 6 结论 本文通过预应力锚索格构梁用于加固高边坡的工程实例, 通过对施工完毕以后的边坡的监测资料的分析, 表明预应力锚索格构梁用于加固高边坡是安全有效的, 也很好的体现了该支护方式施工灵活, 能很好的适应地形的变化, 变形协调能力强, 方便信息化施工和动态设计的优点, 另外支护结构施工完毕后, 在格构梁之间采用喷混植生绿化, 使得坡面完全被植被覆盖, 美化了环境。 参考文献 [1]何立民.单片机应用技术选编 (9) [J].单片机与嵌入式系统应用, 2003 (7) . [2]雷建龙, 吴相林, 冯雪姣.加强实践性、提高趣味性, 改进单片机原理教学方法的探索[J].教育理论与实践, 2002 (S1) . [3]王玉巧, 孔仁昌, 道克刚.8098单片机多功能实验板的设计[J].实验室研究与探索, 1997 (5) . [4]张培仁.基于C语言编程MCS-51单片机原理及应用[M].北京:清华大学出版社, 2003。 关键词:51单片机 LCD12864 程序设计 0 引言 液晶显示器根据显示方式可分为:段位式、字符式和点阵式LCD,其中段位式与字符式只能显示数字与字符。而点阵式LCD不仅能显示数字与字符,还能显示各种图形、曲线及汉字等。本文研究的TG12864B是能显示曲线、图形及汉字的点阵式LCD。 1 TG12864介绍 TG12864是一款无字库的图形点阵显示器,其屏幕由64行×128列点阵组成,可以显示16点阵的4行×8列(32个)汉字、8点阵的8行×8列(64个)字母和128×64全屏幕点阵图形。 1.1 TG12864B内部功能器件介绍 在使用TG12864B前须了解其相关功能器件,如下所示:①指令寄存器(IR):用于寄存指令码。②数据寄存器(DR):用于寄存数据的。DR和显示数据存储器DDRAM(见表1)之间的数据传输是模块内部自动执行的。③显示数据RAM(DDRAM):DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。④XY地址计数器。XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。 1.2 TG12864的控制指令 ①开关显示:开显示,指令码为0X3F;关显示,指令码为0X3E。②设置Y地址:0x40~0x4f,其中0x40为第0列列地址,0x4f为第63列列地址。③设置X页地址:模块有64行,其中8行为一页,即有8页,A2~A0表示0~7页:如,当A2~A0为000时表示第0页,为111是表示第7页。页地址分别是0XB8~0XBF。④显示开始线:该指令中A5~A0为显示起始行的地址,它规定了显示屏起始行所对应的显示存储器的行地址。通过修改显示其实行寄存器的内容,可以实现显示屏向上或向下滚动。⑤读状态:BF:判断忙信号标志位。BF=1表示液晶屏正在处理MCU发过来的指令或者数据,此时接口电路被挂起,不能接受除读操作以外的任何操作,BF=0表示液晶屏接口控制电路处于空闲状态,可以接受外部数据和指令。 2 电路设计 图1 TG12864显示线路图 图1为AT89S51控制12864LCD线路图,图中DB0~DB7为TG12864的数据线,单片机通过该端口给TG12864写命令或读写数据;RS为寄存器与显示内存操作选择管脚,单片机通过P3.7脚与之连接,当RS脚为高电平时,对液晶显示器的数据寄存器进行读或写操作;当RS脚为低电平时,对命令寄存器进行操作;RW为读写控制脚,与单片机P3.6脚连接,当RW脚为高电平时,准备对液晶显示器执行读操作,低电平时执行写操作;E脚为使能端,与P3.5脚连接,下降沿有效;CS1为高电平是选择芯片(右半屏)信号,CS2为高电平时选择芯片(左半屏)信号;RST复位脚,低电平复位。 3 LCD12864的驱动程序设计 LCD12864驱动程序的编程要想让LCD12864显示出需要的内容,就得严格按照LCD12864的工作时序来进行编程。驱动LCD12864显示程序含有以下几个子程序: sbit di=P3^7;//高电平写数据,低电平写命令 sbit rw=P3^6;//高电平读操作,低电平写操作 sbit e=P3^5;//读写使能端,下降沿有效 sbit cs1=P3^4;//定义P3.4为左半屏片选信号 sbit cs2=P3^3;//定义P3.3为右半屏片选信号 sbit rst=P3^2;//TG12864复位信号 sbit bf=P2^7;//检测LCD忙引脚 sbit res=P2^4;//检测是否处于复位状态,高电平处于复位,低电平正常。 define dataport P0 //定义P0口为LCD数据总线,用于传输指令命令和显示数据。 3.1 忙检测子程序 void check_busy(void) { dataport=0xff; di=0; rw=1; delay(1); e=1; while(bf||res==1); e=0; } 3.2 写命令或数据子程序 void write( char dat_comm,char content) { Chk_busy; di=dat_comm;//dat_comm为高电平写数据,低电平写命令 rw=0; dataport=content; e=1; delay(1); e=0; } 3.3 初始化子程序 void init_lcd(void) { rst=0; delay(50); rst=1; cs1=1;cs2=1;/左右半屏选中 write(comm,0x3e);//关显示 write(comm,0x3f);//开显示 } 4 总结 本文对TG12864B用通俗易懂的语言进行了简单的介绍,并对TG12864B的驱动程序进行了简单的设计,使读者能初步了解12864LCD的简单应用。要想熟练的掌握TG12864B,还需要不断的实践,不断的摸索,熟悉编程语言,不断提高TG12864B的编程技巧,使程序得到最大程度的优化。 参考文献: [1]朱华光.浅议LCD1602的编程技巧[J].电脑知识与技术, 2010.6. [2]林嘉.基于89S52的LCD1602程序设计[J].电脑知识与技术,2012.8. [3]田开坤.基于LCD12864显示器的数字示波器设计[J].电子制作,2010.5. 摘要:本课题组设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示所走的路程和行走的时间,并可发声发光。作品可以作为高级智能玩具,也可以作为大学生学习嵌入式控制的强有力的应用实例。 作品以两电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动作,以达到自身控制。电机驱动电路采用高电压,高电流,四通道驱动集成芯片L293D。其中避障采用红外线收发来完成;铁片检测部分采用电感式接近开关LJ18A3-8-Z/BX检测;黑带检测采用红外线接收二极管完成;趋光部分通过3路光敏二极管对光源信号的采集,再经过ADC0809转化为数字信号送单片机处理判别方向。由控制单元处理数据后完成相应动作,实现了无人控制即可完成一系列动作,相当于简易机器人。 关键字:智能控制 蔽障 红外线收发 寻迹行驶 趋光行驶 1.总体方案论证与比较 方案一:采用各类数字电路来组成小车的控制系统,对外围避障信号,黑带检测信号,铁片检测信号,各路趋光信号进行处理。本方案电路复杂,灵活性不高,效率低,不利于小车智能化的扩展,对各路信号处理比较困难。 方案二:采用ATM89S52单片机来作为整机的控制单元。红外线探头采用市面上通用的发射管与及接收头,经过单片机调制后发射。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,黑带采用光敏二极管对光源信号采集,再经过ADC0809转化为数字信号送到单片机系统处理。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地 满足题目的要求。 比较以上两种方案的优缺点,方案二简洁、灵活、可扩展性好,能达到题目的设计要求,因此采用方案二来实现。方案二的基本原理如图1所示。 图1 智能车运行基本原理图框图 避障部分采用红外线发射和接受原理。铁片检测采用电感式接近开关LJ18A3-8-Z/BX检测,产生的高低电平信号经过处理后,完成相应的记录数目,驱动蜂鸣器发声。黑带寻迹依靠安装在车底部左右两个光敏二极管对管来对地面反射光感应。寻光设计在小车前端安装3路(左、中、右)光敏电阻对光源信号采集,模拟信号经过ADC0809转化为数字信号送到MCU处理。记程通过在车轮上安装小磁块,再用霍尔管感应产生计数脉冲。记时由软件实现,显示采用普通七段LED。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现。 2.模块电路设计与比较 1)避障方案选择 方案一:采用超声波避障,超声波受环境影响较大,电路复杂,而且地面对超声波的反射,会影响系统对障碍物的判断。 方案二:采用红外线避障,利用单片机来产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。外界对红外信号的干扰比较小,且易于实现,价格也比较便宜,故采用方案二。 红外线发射接受电路原理图如图2所示。 采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。接收管输出TTL电平,有利于单片机对信号的处理。采用红外线发射与接收原理。利用单片机产生38KHz信号对红外线发射管进行调制发射,发射距离远近由RW调节,本设计调节为10CM左右。发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出TTL电平。利用单片机的中断系统,在遇障碍物时控制电机并使小车转弯。由于只采用了一组红外线收发对管,在避障转弯方向上,程序采用遇障碍物往左拐方式。如果要求小车正确判断左转还是右转,需在小车侧边加多一组对管。外界对红外信号的干扰比较小,性价比高。调试时主要是调制发射频率为接收头能接收的频率,采用单片机程序解决。发射信号强弱的调节,由可调精密电阻调节。 图2 红外线发射接受电路原理图 2)检测铁片方案选择 方案一:采用电涡流原理自制的传感器,取才方便,但难以调试,输出信号也不可靠,成功率比较低,难以准确输出传感信息。 方案二:采用市面易购的电感式接近开关,本系统采用市面比较通用LJ18A3-8-Z/BX来完成铁片检测的任务。虽然电感式接近开关占的体积大,对本是可以接受,且输出信号较可靠,稳定性好,受外界的干扰小,故采用方案二。 检测铁片电路原理图如图3所示。 图3 检测铁片电路原理图 3)声音提示 方案一:采用单片机产生不同的频率信号来完成声音提示,此方案能完成声音提示功能,给人以提示的可懂性比较差,但在一定程度上能满足要求,而且易于实现,成本也不高,我们出自经费方面考虑,采用方案一。 方案二:采用DS1420可分段录放音模块,能够给人以直观的提示,但DS1420录放音模块价格比较高,也可以采用此方案来处理,但方案二性价比不如方案一。4)黑带检测方案选择 方案一:采用发光二极管发光,用光敏二极管接收。由于光敏二极管受可见光的影响较大,稳定性差。 方案二:利用红外线发射管发射红外线,红外线二极管进行接收。采用红外线发射,外面可见光对接收信号的影响较小,再用射极输出器对信号进行隔离。本方案也易于实现,比较可靠,因此采用方案二。黑带检测电路图如图4所示。 输出信号进入74LS02。稳定性能得到提升。当小车低部的某边红外线收发对管遇到黑带时输入电平为高电平,反之为低电平。结合中断查询方式,通过程序控制小车往哪个方向行走。电路中的可调电阻可调节灵敏度,以满足小车在不同光度的环境光中能够寻迹。由于接收对管装在车底,发射距离的远近较难控制,调节可调电阻,发现灵敏度总是不尽人意,最后采用在对管上套一塑料管,屏蔽外界光的影响,灵敏度大幅提升。再是转弯的时间延迟短长控制。 图4 黑带检测电路图 3)计量路程方案 方案一:利用红外线对射方式,在小车的车轮开一些透光孔来计量车轮转过圈数,从而间接地测量路程。 方案二:利用霍尔元件来对转过的车轮圈数来计程,在车轮子上装小磁片,霍尔元件靠近磁片一次计程为车轮周长。此方案传感的信号强,电路简单,但精度不高。 如果想达到一定的计量精度,用霍尔传感元件比较难以实现,因为在车轮上装一定量的小磁片会相互影响,而利用红外线对射方式不会影响各自的脉冲,可达到厘米的精度,因此采用方案一来实现。计量路程示意图见图5。 通过计算车轮的转数间接测量距离,利用了霍尔元件感应磁块产生脉冲的原理,再对脉冲进行计数。另可采用红外线原理提高记程精度,其方法为在车轮均匀打上透光小孔,当车轮转动时,红外光透射过去,不断地输出脉冲,通过单片机对脉冲计数,再经过一个数据的处理过程,这样就可把小车走过的距离计算出来,小孔越多,计数越精密。 图 5 计量路程示意图 3)智能车驱动电路 方案一:采用分立元件组成的平衡式驱动电路,这种电路可以由单片机直接对其进行操作,但由于分立元件占用的空间比较大,还要配上两个继电器,考虑到小车的空间问题,此方案不够理想。 方案二:因为小车电机装有减速齿轮组,考虑不需调速功能,采用市面易购的电机驱动芯片L293D,该芯片是利用TTL电平进行控制,对电机的操作方便,通过改变芯片控制端的输入电平,即可以对电机进行正反转操作,很方便单片机的操作,亦能满足直流减速电机的要求。智能车驱动电路实现如图6所示。 图6 智能车驱动电路 小车电机为直流减速电机,带有齿轮组,考虑不需调速功能,采用电机驱动芯片L293D。L293D是著名的SGS公司的产品。为单块集成电路,高电压,高电流,四通道驱动,设计用来接收DTL或者TTL逻辑电平,驱动感性负载(比如继电器,直流和步进马达),和开关电源晶体管。内部包含4通道逻辑驱动电路。其额定工作电流为1A,最大可达1.5A,Vss电压最小4.5V,最大可达36V;Vs电压最大值也是36V,经过实验,Vs电压应该比Vss电压高,否则有时会出现失控现象。表1是其使能、输入引脚和输出引脚的逻辑关系。 表1 引脚和输出引脚的逻辑关系 EN A(B)IN1(IN3)IN2(IN4)电机运行情况 H H L 正转 H L H 反转 H 同IN2(IN4)同IN1(IN3)快速停止 L X X 停止 L293D可直接的对电机进行控制,无须隔离电路。通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。调试时在依照上表,用程序输入对应的码值,能够实现对应的动作,调试通过。3)寻找光源功能 方案一:在小车前面装上几个光电开关,通过不同方向射来的光使光电开关工作,从而对小车行驶方向进行控制,根据光电开关特性,只有当光达到一定强度时才能够导通,因此带有一定的局限性。 方案二:在小车前面装上参数一致的光敏二极管或者光敏电阻,再通过A/D转换电路转换成数字量送入单片机,单片机再对读入的几路数据进行存储、比较,然后发出命令对外围进操作。对方案一、二进行比较,方案二硬件稍为复杂,但能够对不同强度的光进行采集以及比较,操作灵活,所以采用方案二。 寻找光源电路图如图7所示。 图7 寻找光源电路图 3)显示部分 方案一:采用LCD显示,用单片机可实现显示数据,但显示亮度和字体大小在演示时不尽人意,价格也比较昂贵。 方案二:采用LED七段数码管,采用经典电路译码和驱动,电路结构简单,并且可以实现单片机I/O口的并用,显示效果直观,明亮,调试容易。故采用LED数码管显示。 4)显示电路如图8所示。 图8 显示电路 3.系统原理及理论分析 1)单片机最小系统组成 单片机系统是整个智能系统的核心部分,它对各路传感信号的采集、处理、分析及对各部分整体调整。主要是组成是:单片机AT89S52、模数转换芯片ADC0809、小车驱动系统芯片L293D、数码管显示的译码芯片74LS47、74LS138及各路的传感器件。2)避障原理 采用红外线避障方法,利用一管发射另一管接收,接收管对外界红外线的接收强弱来判断障碍物的远近,由于红外线受外界可见光的影响较大,因此用250Hz的信号对38KHz的载波进行调制,这样减少外界的一些干扰。接收管输出TTL电平,有利于单片机对信号的处理。3)计程原理 通过计算车轮的转数间接测量距离,在车轮均匀打上透光小孔,当车轮转动时,红外光透射过去,不断地输出脉冲,通过单片机对脉冲计数,再经过一个数据的处理过程,这样就可把小车走过的距离计算出来。4)黑带检测原理 利用光的反射原理,当光线照射在白纸上,反射量比较大,反之,照在黑色物体上,由于黑色对光的吸收,反射回去的量比较少,这样就可以判断黑带轨道的走向。由于各路传感器会对单片机产生一定的干扰,使信号发生错误。因此,采用一级射极输出方式对信号进行隔离,这样系统对信号的判断就比较准确。4.系统程序设计 用单片机定时器T0产生38KHz的方波,再用定时器T1产生250Hz的方波对38KHz方波进行调制。为了提高小车反应灵敏度,对红外线接收信号及黑带检测信号都采用中断法来处理。用定时方法对铁片检测、计量路程、倒车、拐弯及数码管动态扫描进行处理。 主程序流程图见图9,各子程序图见图 10、图 11、图12。 图9 主程序流程图 图 10 外部中断0服务子程序 图 11 外部中断1服务子程序 图12 定时器1中断子程序 6.调试及性能分析 整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。首先写入电机控制小程序,控制其正反转,停机均正常。加入避障子程序,小车运转正常,调整灵敏度达最佳效果。加入显示时间子程序,显示正常。铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。趋光电路主要由三个光敏电阻构成,调整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。 整机综合调试,上电后对系统进行初始化,接着控制电机使小车向前行驶,突然发现系统即刻进入外部中断1,重复多次测试,结果都是自动进入该中断。推断是由刚上电时电机起动所引起,为了避免上电瞬间的影响,在启动小车后延时几毫秒,再开外部中断,结果问题解决。允许的话应采用双电源供电,即电机和电路应分开供电,L293D与单片机之间采用隔离信号控制。这样就不会出现小车启动时程序出错和数码管显示闪动的问题。在计程精度上,可用红外线原理获得较高精度。7.结论 通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化,智能小车能够完成各项功能到达车库。8.参考文献 《单片机应用技术》 《周立功单片机》 《单片机原理与应用》 频率测量是电子学测量中最为基本的测量之一。由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,测频原理和测频方法的研究正受到越来越多的关注。 1.1频率计概述 数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号、方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。传统的频率计采用测频法测量频率,通常由组合电路和时序电路等大量的硬件电路组成,产品不但体积大,运行速度慢而且测量低频信号不准确。本次采用单片机技术设计一种数字显示的频率计,测量准确度高,响应速度快,体积小等优点。 1.2频率计发展与应用 在我国,单片机已不是一个陌生的名词,它的出现是近代计算机技术的里程碑事件。单片机作为最为典型的嵌入式系统,它的成功应用推动了嵌入式系统的发展。单片机已成为电子系统的中最普遍的应用。单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分广泛。其中以AT89S52为内核的单片机系列目前在世界上生产量最大,派生产品最多,基本可以满足大多数用户的需要。 武汉理工大学《单片机原理与应用》课程设计说明书 系统总体设计 2.1测频的原理 测频的原理归结成一句话,就是“在单位时间内对被测信号进行计数”。被测信号,通过输入通道的放大器放大后,进入整形器加以整形变为矩形波,并送入主门的输入端。由晶体振荡器产生的基频,按十进制分频得出的分频脉冲,经过基选通门去触发主控电路,再通过主控电路以适当的编码逻辑便得到相应的控制指令,用以控制主门电路选通被测信号所产生的矩形波,至十进制计数电路进行直接计数和显示。若在一定的时间间隔T内累计周期性的重复变化次数N,则频率的表达式为式: Nfx= TN频率计数器严格地按照f=公式进行测频。由于数字测量的离散性,被测频率在计数 T器中所记进的脉冲数可有正一个或负一个脉冲的1量化误差,在不计其他误差影响的情况下,测量精度将为: (fA)1N 应当指出,测量频率时所产生的误差是由N和T俩个参数所决定的,一方面是单位时间内计数脉冲个数越多时,精度越高,另一方面T越稳定时,精度越高。为了增加单位时间内计数脉冲的个数,一方面可在输入端将被测信号倍频,另一方面可增加T来满足,为了增加T的稳定度,只需提高晶体振荡器的稳定度和分频电路的可靠性就能达到。 上述表明,在频率测量时,被测信号频率越高,测量精度越高。 2.2总体思路 频率计是我们经常会用到的实验仪器之一,频率的测量实际上就是在单位时间内对信号进行计数,计数值就是信号频率。本文介绍了一种基于单片机AT89S52 制作的频率计的设计方法,所制作的频率计测量比较高的频率采用外部十分频,测量较低频率值时采用单片机直接计数,不进行外部分频。该频率计实现10HZ~2MHZ的频率测量,而且可以实现量程自动切换功能,四位共阳极动态显示测量结果,可以测量正弦波、三角波及方波等各种波形的频率值。 2.3具体模块 根据上述系统分析,频率计系统设计共包括五大模块:单片机控制模块、电源模块、放大整形模块、分频模块及显示模块。各模块作用如下: 1、单片机控制模块:以AT89C51单片机为控制核心,来完成它待测信号的计数,译 武汉理工大学《单片机原理与应用》课程设计说明书 码,和显示以及对分频比的控制。利用其内部的定时/计数器完成待测信号周期/频率的测量。 2、电源模块:为整个系统提供合适又稳定的电源,主要为单片机、信号调理电路以及分频电路提供电源,电压要求稳定、噪声小及性价高的电源。 3、放大整形模块:放大电路是对待测信号的放大,降低对待测信号幅度的要求。整形电路是对一些不是方波的待测信号转化成方波信号,便于测量。 4、分频模块:考虑单片机外部计数,使用12 MHz时钟时,最大计数速率为500 kHz,因此需要外部分频。分频电路用于扩展单片机频率测量范围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。 5、显示模块:显示电路采用四位共阳极数码管动态显示,为了加大数码管的亮度,使用4个PNP三极管进行驱动,便于观测。 综合以上频率计系统设计有单片机控制模块、电源模块、放大整形模块、分频模块及显示模块等组成,频率计的总体设计框图如图2所示。 信号放大整形分频电路微控制器AT89S52数码管显示驱动电路5V电源 图2.1 频率计总体设计框图 武汉理工大学《单片机原理与应用》课程设计说明书 系统硬件设计 3.1 AT89C51主控制器模块 3.1.1 AT89C51的介绍 AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51引脚如下图所示。 图3.1 AT89C51引脚图 3.1.2 复位电路 复位电路是维持单片机最小系统运行的基本模块。复位电路如下图所示。 武汉理工大学《单片机原理与应用》课程设计说明书 图3.2 复位电路 高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能。但是告诉对系统要求较高,而且功耗大,运行环境苛刻。考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。合适频率的晶振对于选频信号强度准确度都有好处,本次设计单片机实物具有11.0592M的晶振频率。AT89C51单片机最小系统如下图所示。 图3.3 单片机最小系统原理图 3.2 分频设计模块 分频电路用于扩展单片机频率测量范围,并实现单片机频率和周期测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。 本频率计的设计以AT89C51单片机为核心,利用他内部的定时/计数器完成待测信号 武汉理工大学《单片机原理与应用》课程设计说明书 周期/频率的测量。单片机AT89C51内部具有2个16位定时计数器,定时/计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1(使用12 MHz时钟时,每1μs加1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变时计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从1到0的跳变至少需要2个机器周期(24个振荡周期),所以最大计数速率为时钟频率的1/24(使用12 MHz时钟时,最大计数速率为500 kHz),因此采用74LS161进行外部十分频使测频范围达到2MHz。为了测量提高精度,当被测信号频率值较低时,直接使用单片机计数器计数测得频率值;当被测信号频率值较高时采用外部十分频后再计数测得频率值。这两种情况使用74LS151进行通道选择,由单片机先简单测得被测信号是高频信号还是低频信号,然后根据信号频率值的高低进行通道的相应导通,继而测得相应频率值。 3.3 显示模块 显示模块由频率值显示电路和量程转换指示电路组成。频率值显示电路采用四位共阳极数码管动态显示频率计被测数值,使用三极管8550进行驱动,使数码管亮度变亮,便于观察测量。量程转换指示电路由红、黄、绿三个LED分别指示Hz、KHz及MHz档,使读数简单可观。 3.3.1 数码管介绍 常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。根据管脚资料,可以判断使用的是何种接口类型。 LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。在一定范围内,其正向电流与发光亮度成正比。由于常规的数码管起辉电流只有1~2 mA,最大极限电流也只有10~30 mA,所以它的输入端在5 V电源或高于TTL高电平(3.5 V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。 3.3.2 频率值显示电路 数码管电路设计不加三极管驱动时,数码管显示数值看不清,不便于频率值的测量与调试。因此加入三极管8550进行驱动数码管。使用4位数码管进行频率值显示,如果选择共阴极数码管显示,则需要8个三极管进行驱动,而采用共阳极数码管则需要4个三极 武汉理工大学《单片机原理与应用》课程设计说明书 管驱动,为了节约成本,因此选用共阳极数码管进行动态显示,具体数码管设计电路如图所示。 图3.4 数码管显示电路 3.3.3 档位转换指示电路 根据设计要求,采用红、黄、绿三个LED分别指示Hz、KHz及MHz档,根据被测信号的频率值大小,可以自动切换量程单位,无需手动切换,便于测量和读数,简单方便。具体设计的档位转换LED指示电路如图所示。 图3.5 LED档位指示电路 武汉理工大学《单片机原理与应用》课程设计说明书 系统软件设计 系统软件设计主要采用模块化设计,叙述了各个模块的程序流程图,并介绍了软件Keil和Proteus的使用方法和调试仿真。 4.1 软件模块设计 系统软件设计采用模块化设计方法。整个系统由初始化模块,信号频率测量模块,自动量程转换和显示模块等模块组成。系统软件流程如图所示。 频率计开始工作或者完成一次频率测量,系统软件都进行测量初始化。测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时/计数器的工作方式。定时/计数器的工作首先被设置为计数器方式,即用来测量信号频率。 开始系统初始化频率测量频率是否超过1KHzY硬件十分频N计数器计数测频率值测量数据显示 图4.1 系统软件流程总图 首先定时/计数器的计数寄存器清0,运行控制位TR置1,启动对待测信号的计数。计数闸门由软件延时程序实现,从计数闸门的最小值(即测量频率的高量程)开始测量,计数闸门结束时TR清0,停止计数。计数寄存器中的数值经过数制转换程序从十六进制数转换为十进制数。判断该数的最高位,若该位不为0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为0,将计数闸门的宽度扩大10倍,重新对待测信号的计数,直到满足测量数据有效位数的要求。定时/计数器的工作被设置为定时器方式,定时/计数器的计数寄存器清0,在判断待测信号的上跳沿到来后,运行控制位TR 武汉理工大学《单片机原理与应用》课程设计说明书 置为1,以单片机工作周期为单位进行计数,直至信号的下跳沿到来,运行控制位TR清0,停止计数。16位定时/计数器的最高计数值为65535,当待测信号的频率较低时,定时/计数器可以对被测信号直接计数,当被测信号的频率较高时,先由硬件十分频后再有定时/计数器对被测信号计数,加大测量的精度和范围。 4.2 应用软件简介 此设计需要在Keil软件平台上完成程序的调试,在Proteus软件平台上完成仿真显示。因此介绍如何使用Keil和Proteus进行软件的仿真。 4.2.1 Keil简介 Keil软件是目前最流行开发系列单片机的软件,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。而Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象[16]。 4.2.2 protues简介 protues是Labcenter公司出品的电路分析、实物仿真系统,而KEIL是目前世界上最好的51单片机汇编和C语言的集成开发环境。他支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能[17]。Protues能够很方便的和KEIL、Matlab IDE等编译模拟软件结合。Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与keil和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。 武汉理工大学《单片机原理与应用》课程设计说明书 系统仿真 5.1 系统总电路图 根据课程设计任务书的要求,本次课设设计的系统总电路图如下图所示。 图5.1 系统总电路图 5.2 系统仿真结果 系统仿真结果图如下图所示,由图中可以看出,LCD显示的值为900Hz,LED显示的值为886Hz,在误差允许的范围内,二者近似相等,符合课设任务书要求。 图5.2 系统仿真结果图 武汉理工大学《单片机原理与应用》课程设计说明书 系统硬件调试 6.1频率计的测试 如图6.1为频率计的测试实物拍摄图。其中函数信号发生器输出频率为1000Hz、幅值为5V的方波信号时,数字频率计测得的频率为996Hz,在误差允许的范围内,二者相等,符合课设任务书要求。 图6.1 频率计测试的实物拍摄图 6.2 低频方波信号发生器的测试 图6.2 低频信号发生器测试的实物拍摄图 武汉理工大学《单片机原理与应用》课程设计说明书 如图6.2为低频信号发生器测试的实物拍摄图。其中低频方波信号发生器输出频率的LED显示值为400Hz,经过示波器检测得到幅值为4.88V,频率为396.2Hz,在误差允许的范围内,二者相等,符合课设任务书要求。 6.3 低频方波信号发生器、数字频率计的综合测试 如图6.3为低频方波信号发生器检测频率计的实物拍摄图。其中低频方波信号发生器输出频率的LED显示值为300Hz,经过数字频率计检测得到频率的LCD显示值为297Hz,在误差允许的范围内,二者相等,符合课设任务书要求。 图6.3 低频方波信号发生器检测频率计的实物拍摄图 武汉理工大学《单片机原理与应用》课程设计说明书 心得体会 本次设计的过程和结果都给了我很多感触。初次拿到课程设计的题目时,只是对频率有一定的理解,至于怎么设计,几乎没有什么想法。在同学的指导和讲解下,对频率计的介绍有了一定的了解。后来通过不断的学习和查阅资料,终于清楚的知道了频率计的基本情况和设计的方案有了一定的理解。通过对各种性能的比较和所学知识能实现的状况,对本次课程设计进行了设计,最后进行的是课设报告的撰写。 通过本次设计,让我学会了从系统的高度来考虑设计的方方面面,对电路的设计和研究有了更深刻的体会;让我了解到软件的设计是建立在对硬件了解的基础上的,特别是对单片机的功能,引脚定义和内部结构要有较为详细的了解,此外对电路板中所用到的各个芯片的引脚和功能,也要进行了解;在编写程序时,进行模块化设计,以严谨的态度进行编程,避免出现低级错误,养成为程序添加注释和说明的好习惯,以便自己的修改和阅读者轻松的了解程序的各部分及整体的功能。 武汉理工大学《单片机原理与应用》课程设计说明书 参考文献 [1]李华.单片机实用接口技术[M].航空航天大学出版社.2006.[2]张鹏.王雪梅.单片机原理与应用实例教程[M].海军出版社.2007.[3]赫建国等.单片机在电子电路设计中的应用[M].清华大学出版社.2005.[4]康华光.电子技术基础(模拟部分)[M].高等教育出版社.1998. [5]吴清平.单片机原理与应用实例教程[M].海军出版社.2008.武汉理工大学《单片机原理与应用》课程设计说明书 #include uchar code table[]=“made by Li Houmin”;uchar num; void delay(int count){ int p; //延时 while(count--)for(p=0;p<110;p++);} void write_com(unsigned int n){ RS=0;P0=n;delay(5); //写指令 E=1;delay(5); 武汉理工大学《单片机原理与应用》课程设计说明书 E=0;} void write_data(unsigned char t){ RS=1;P0=t;delay(5); //写数据 E=1;delay(5);E=0;} void time1_int(void)interrupt 3 { TH1=TL1=0;TR1=1;x++;} void time0_int(void)interrupt 1 { TH0=(65535-50000)/256;//装初值,定时50ms TL0=(65535-50000)%256;i++; if(i==20){ i=0;//1s时间已到 武汉理工大学《单片机原理与应用》课程设计说明书 TR1=0;//关闭计数器1 count=65536*x+256*TH1+TL1;x=0;//重新装初值 //重新启动计数器器1 TH1=TL1=0;TR1=1;} } void show(){ write_com(0x85);write_data(shu[count/100000]);delay(5); //在第一行第五列显示十万位 write_com(0x86);write_data(shu[(count/10000)%10]);delay(5);write_com(0x87);write_data(shu[(count/1000)%10]);delay(5);write_com(0x88);write_data(shu[(count/100)%10]);delay(5);write_com(0x89);write_data(shu[(count/10)%10]);delay(5);write_com(0x8a);write_data(shu[count%10]);delay(5); //显示万位 //显示千位 //显示百位 //显示十位 //显示个位 write_com(0x83);write_data(0x66);delay(5);//显示频率表示的字符f write_com(0x84);write_data(0x3d);delay(5);//显示字符= write_com(0x8b);write_data(0x48);delay(5);//显示字母H write_com(0x8c);write_data(0x7a);delay(5);//显示字母z write_com(0x80+0x40); } void main() //第二行显示 for(num=0;num<17;num++){ write_data(table[num]);delay(5);} 武汉理工大学《单片机原理与应用》课程设计说明书 { TMOD=0x51; //T1计数、T2定时,且都工作在方式1 TH1=0x00;TL1=0x00;TH0=(65535-50000)/256;//装初值,定时50ms TL0=(65535-50000)%256;EA=1; ET0=1;ET1=1; TR0=1;TR1=1; dula=0;wela=0;RW=0;E=0;write_com(0x01);write_com(0x38);write_com(0x0c);write_com(0x06);while(1){ show(); delay(5);} } //开总中断 //中断允许 //启动定时器 //显示清零,数据指针清零 //设置16X2显示5X7点阵,8位数据口 //设置开显示,显示光标且闪烁基于51单片机的电子秤设计 第2篇
基于51单片机的电子秤设计 第3篇
基于51单片机的电子秤设计 第4篇
基于51单片机的智能小车设计 第5篇
基于51单片机的电子秤设计 第6篇
基于51单片机的电子秤设计
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


