电子秤

更新时间:2024-04-07 07:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

河南大学物理与电子学院 单片机课程设计论文

题 目:基于单片机数字电子秤的设计 院 系: 专 业: 姓 名 姓 名:

指导老师: 完成时间:

目录

摘要

第一章 绪论

1.1 称重技术和衡器的发展 1.2 电子秤的发展现状和发展趋势 第二章 电子秤的硬件构成

2.1 电子秤的构成 2.2 称重传感器

2.3 电子秤专用24位AD转换芯片HX711及其电路

2.4 单片机系统

2.4.1 STC89C52单片机概述

2.4.2 STC89C52 单片机特点 2.4.3 STC89C52 单片机管脚及封装 2.5 液晶屏电路

2.6 矩阵键盘电路 2.7 声光报警电路 第三章 软件设计 3.1软件流程图

3.2主程序 第四章 硬件成品 4.1 焊接成品 4.2 键盘操作说明 4.3 常用使用步骤 第五章 总结与感言 参考资料

基于单片机AT89C32的电子秤设计

摘要

现代社会的发展,对称重技术提出了更高的要求。目前,台式电子秤在商业贸易中的使用已相当普遍,但存在较大的局限性:体积大、成本高、需要工频交流电源供应、携带不便、应用场所受到制约。现有的便携秤为杆秤或弹簧压缩、拉伸变形来实现计量的弹簧秤,居民用户使用的是国家已经明令淘汰的杆秤。多年来,人们一直期待测量准确、携带方便、价格低廉的智能电子秤投放市场。

本文设计了一种智能电子秤,论述了仪器的工作原理,介绍了仪器的误差来源于误差分配,给出了仪器电路设计与软件流程。

智能电子秤主要由电源、称重传感器、A/D转换器、单片机、LCD显示器等部分组成。主要技术指标为:称量范围0~5kg;分度值为0.005kg;精度等级Ⅲ级。仪器主要功能有自检、去皮、计价、单价设定、过载报警等。智能电子秤体积小、计量准确、携带方便、操作简单、称量速度快,并集质量称量功能与价格计算功能于一体,能够满足商业贸易和居民家庭的使用需求,具有广阔的应用前景。

关键词:电子秤, 称重传感器, A/D转换器, 8051单片机, 误差分析, 软

件设计

第一章 绪论

质量是测量领域中的一个重要参数,称重技术自古以来就被人们所重视?1?。公元前,人们为了对货物交换量进行估计,起初采用木材或陶土制作的容器对交换物进行计量,以后,又采用简单的秤来测定质量,据考证,世界上最古老的计量器具出土于中东和埃及,最古老的衡器和砝码出自于埃及。秤是最普遍、最普及的计量设备,电子秤取代机械秤是科学技术发展的必然规律。低成本、高智能化的电子秤无疑具有极其广阔的市场前景。

本章简述称重技术和衡器的发展过程,论述提出新型便携式电子秤的意义,介绍项目研究背景、关键技术等。

1.1 称重技术和衡器的发展

衡器是通过作用于被测量物体的重力来确定该物体质量的计量器具。在整个衡器的发展过程中,先后主要出现了六种类型的衡器:架盘天平、不等臂平台秤、吊车秤、倾斜象限杆秤、弹簧秤和自动秤。其中,不等臂平台秤(“十进秤”)是当今动态轨道衡的鼻祖,至今它仍是最通用的一种秤。

第一次世界大战后,由于贸易和工业发展的需要,急需能进行快速称重的衡器。机械式衡器在此期间得到很大的发展。当时以倾斜杠杆案秤占绝大多数,读数装置除扇形度盘外,还有滚筒形度盘,从而扩大了读数范围并可附加价格标尺。以后又出现了用于工业的带双摆锤测量机构的圆形度盘指针式秤和成本低廉、带投影标尺的倾斜式杠杆秤。

第二次世界大战后出现了电子衡器,它主要由称重显示控制器,称重传感器和电器控制等部分组成,其发展过程与其它事物一样,经历了由简单到复杂、由粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程。二十世纪50年代中期,为了把衡器引入生产工艺过程中去,使称重过程自动化,电子技术渗入了衡器制造业。60年代初期,出现了称量工作是机械式的,与称量有关的显示、记录、远传式控制等功能是电子方式的衡器,即机电结合式电子衡器。近30年以来,工艺流程中的现场称量、配料定量称重、以及产品质量的监测等工作,都离不开能输出电信号的电子衡器。这是因为电子衡器不仅能给出质量或重量值的信号,而且也能作为总系统中的一个单元承担着控制和检验功能,从而推进工业生产和贸易交往的自动化和合理化。电子衡器具有反应速度快,测量范围广、应用面广、结构简单、使用操作方便、信号远传、便于计算机控制等特点,计量精度高,而且实现了多功能、多用途。

1.2电子秤的发展现状和发展趋势

一、发展现状

电子衡器已被广泛应用于各个行业,近年来愈来愈多地参与到数据处理和过程控制之中,使现代称重技术和数据系统成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可缺少的组成部分。

电子衡器种类繁多,且涉及到贸易结算和广大消费者的利益,所以为世界各国政府普遍关注和重视,并被确定为我国强制管理的法制计量器具。电子衡器是自动化称重控制和贸易计量的重要手段,对加强企业管理、严格生产、贸易结算,

交通运输、港口计量和科学研究都起到了重要作用。

50年代中期电子技术的渗入推动了衡器制造业的发展。60年代初期出现机电结合式电子衡器以来,经过40多年的不断改进与完善,我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。我国电子衡器的技术装备和检测试验手段基本达到国际90年代中期的水平。电子衡器制造技术及应用得到了新发展。电子称重技术从静态称重向动态称重技术发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展,特别是对快速称重和动态称重的研究与应用。但就总体而言,我国电子衡器产品的数量和质量与工业发达国家相比还有较大差距,其主要差距是技术与工艺不够先进、工艺装备与测试仪表老化、开发能力不足、产品的品种规格较少、功能不全、稳定性和可靠性较差等。 二、发展趋势

电子秤是载于秤的台座,盘,钩上的物品的重量由传感器蠕变反应平衡,而由仪器数字显示的电子衡器。电子秤集机、电、仪于一体,具有多功能、高精度、快速和动态计量、稳定可靠等特征,代表了衡器产品发展的方向。电子秤属于日用衡器,为劳动密集型产品。

电子秤产品总的发展趋势是小型化,模块化,集成化,智能化;其技术性能趋向是速率高,准确度高,稳定性高,可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合型?2?。

(1) 小型化

近几年新研制的电子平台秤结构充分体现了体积小、高度低、重量轻(即小、薄、轻)的发展方向。对于低容量的电子平台秤和电子轮轴秤,可采用将薄型或超薄型的圆形称重传感器,直接嵌入钢板或铝板底面与称重传感器外径相同的盲孔内,形成低外形的秤体结构,称重传感器的数量和位置由秤的额定载荷和力学要求计算决定。钢板或铝板就是秤体的台面,称重传感器既是传感元件,又是承力支点,极大地简化了秤体结构,减少了活动连接环节,不但降低了成本,而且提高了稳定性和可靠性。对中等或较大容量的电子平台秤、电子地上衡,已经出现了采用方形或者长方形闭合截面的薄壁型钢,并联排队列焊接成一个整体的竹排式的秤体,4个称重传感器分别安装在最外边两根薄壁型钢两端的切口内,安

装在称重传感器承力点上的固定支承就是秤体的承力支点,既简化了承力传力机构,又节瘁了秤体高度,这是一种很有发展前途的秤体结构。对于大型电子平台秤,可利用有限元法进行等强度和刚度计算,采用抗弯刚度大的型材和轻型波纹夹心钢板等。

(2) 模块化

对于大型或超大型的承载结构,如大型静动态电子汽车衡等,已开始采用几种长度的标准结构的模块,经过分体组合,而产生新的品种和规格。以5、6、7m长的同宽度3种标准模块为例,由单块、二块、三块到四块分体组合,可以组合成长度为5~28m的22种规格的分体式秤体结构。当然在实际应用中,根据各行业用户的需要,选择其中10余种常用的标准规格即可。这种模块化的分体式秤体结构,不仅提高了产品的通用性、互换性和可用性,而且也大大的提高了生产效率和产品质量。同时还降低了成本,增强了企业的市场竞争能力。

(3)集成化

对于某些品种和结构的电子衡器,例如小型电子平台秤、专用秤、便携式静动态电子轮轴秤、静动态电子轨道衡等,都可以实现秤体与称重传感器,钢轨与称重传感器,轨道衡秤体与铁路线路一体化。

如秤体与称重传感器一体化的便携式静动态电子轮轴秤,多用硬铝合金厚板制成,其结构原理是经过固溶热处理强化的铝合金板,或通过在4个角上钻孔和铣槽分别形成4个悬臂梁型称重传感器;或在铝合金板的底面铣出多个对称的盲孔和盲槽形成整体剪切梁型称重传感器。这就使得秤体与称重传感器合二为一,即铝合金板既是秤体台面又是一个大板式称重传感器。以后者结构的10吨便携式动态电子轮轴秤为例,其尺寸为720mm×550mm×32mm,重量约为23kg。

(4)智能化

电子衡器的称重显示控制器与电子计算机组合,利用电子计算机的智能来增加称重显示控制器的功能。使电子衡器在原有功能的基础上,增加推理、判断、自诊断、自适应、自组织等功能,这就是当今市场上采用微机化称重显示控制器的电子衡器与采用智能化称重显示控制器的电子衡器的根本区别。

(5)综合性

电子称重技术的发展规律就是不断的加强基础研究并扩大应用,扩展新技术

领域,向相邻学科和行业渗透,综合各种技术去解决称重计量、自动控制、信息处理等问题。例如在流量计量专业,如果按照传统的理论和方法建造一套标准大流量测量系统,价格相当昂贵。如果采用称重法即质量流量法,只要将重量和时间测量准确,大流量的测量问题就迎刃而解了。对某些商用电子计价秤而言,只具备承重、计价、显示、打印功能还远远不够,现代商业系统还要求它能提供各种销售信息,把称重与管理自动化紧密集合,称重系统与计算机系统组成一个完整的综合控制系统。

(6)组合性

在工业称重计量过程或工艺流程中,不少称重计量系统还要求具有可组合性,即测量范围等可以任意设定;硬件能够依据一定的工作条件和环境作某些调整,硬件向软件方向发展;软件能按一定的程序进行修改和扩展;输入输出数据与指令可以使用不同的语言和条形码,并能与外部的控制和数据处理设备进行通信。

第二章 电子秤的硬件构成

电子秤的测量原理是被称量物体的重量使传感器弹性体发生变形,输出与重量成正比的电信号,传感器输出信号经放大器放大后,输入转换器进行转换,转换成的频率信号直接送入微处理器中,其数字量由微机进行处理,而周边所需要的功能及各种接口电路也和微机连接应用,最后由显示屏幕以数字方式显示。

2.1 电子秤的构成

电子秤硬件系统由应变式称重传感器、A/D转换器、单片机系统、键盘/开关、LCD显示器等组成。仪器结构框图如图1所示

称重传感器24位A/D芯片hx711电路矩阵键盘单片机主控芯片电源系统液晶显示 图1 单片机电子秤硬件方案

称重传感器感应被测重力,输出微弱的毫伏级电压信号。该电压信号经过电子秤专用

模拟/数字(A/D)转换器芯片hx711对传感器信号进行调理转换。HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片,内置增益控制,精度高,性能稳定。HX711芯片通过2线串行方式与单片机通信。单片机读取被测数据,进行计算转换,再液晶屏上显示出来。

矩阵键盘主要用于计算金额。当被测物体重量得到后,用户可以通过矩阵键盘输入单价,电子秤自动计算总金额并在液晶屏显示。

2.2 称重传感器

传感器是测量机构最重要的部件。称重传感器本身具有单调性,其主要参数指标是灵敏度、总误差和温度漂移。

(1) 灵敏度

称重传感器的电灵敏度为满负荷输出电压与激励电压的比值,典型值是2mV/V。当使用2 mV/V灵敏度和5 V激励电压的传感器时,其满度输出电压为10 mV。通常,为了使用称重传感器线性度最好的一段称重范围,应当仅使用满度范围的三分之二。因此满度输出电压应当大约为6mV。当电子秤应用于工业环境时,在6mV满度范围内测量微小的信号变化并非易事。

(2) 总误差

总误差是指输出误差和额定误差的比值。典型电子秤的总误差指标大约是0.02%,这一技术指标相当重要,它限制了使用理想信号调节电路所能达到的精确度,决定了ADC分辨率的选择以及放大电路和滤波器的设计。

(3) 漂移

称重传感器也产生与时间相关的漂移。

目前常用的称重传感器有电阻应变式压力传感器、电容压力传感器、压电式压力传感器。选用时应按稳定行、精度登记、寿命和安装环境要求考虑,其主要特点如下:

(1) 电容式压力传感器稳定性较差,精度和灵敏度较高,寿命较短,对环境要求苛刻,不易长距离传输。

(2) 压电式压力传感器稳定性好,精度和灵敏度高,寿命长,但大量程的压力传感器尚待进一步研究。

(3) 电阻应变式压力传感器稳定性较好,精度和灵敏度较高,寿命较长,对测量环境要求不太严格。

综上所述,选用电阻应变式压力传感器作为电子秤称重传感器是最为合适的。电阻应变式压力传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,电阻应变片(转换元件)受到拉伸或压缩应变片变形后,它的阻值将发生变化(增大或减小),从而使电桥失去平衡,产生相应的差动信号,供后续电路测量和处理。电阻应变式传感器测量原理如图2所示。

图2 电阻应变式传感器测量原理

当垂直正压力P作用于梁上时,梁产生形变,电阻应变片R1、R3受压弯拉伸,阻值增加;R2、R4受压缩,阻值减小。电桥失去平衡,产生不平衡电压,不平衡电压与作用在传感器上的载菏P成正比,从而将非电量转化成电

量输出。

R1、R2、R3和R4组成惠更斯电桥,将2对电阻应变片的阻值变化转变成输出电压,其工作原理如图3所示。

图3 测量电桥原理

2.3 电子秤专用24位AD转换芯片HX711及其电路

HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。

该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道B,与其内部的低噪声可编程放大器相连。通道A 的可编程增益为128 或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B 则为固定的32 增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。 HX711内部方框图如图4所示。其外部管脚如图5所示。

图4 HX711内部方框图

图5 HX711外部管脚图

图5为HX711芯片应用于计价秤的一个参考电路图。该方案使用内部时钟振荡器(XI=0),10Hz的输出数据速率(RATE=0)。电源(2.7~5.5V)直接取用与MCU 芯片相同的供电电源。通道A与传感器相连,通道B通过片外分压电阻与电池相连,用于检测电池电压。

图6 HX711计价秤应用参考电路图

本课题设计的HX711电路如图7所示:

图7 HX711电路

2.4 单片机系统

2.4.1 STC89C52单片机概述

STC89C52系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速

/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。

2.4.2 STC89C52 单片机特点

? 增强型 8051 CPU,1T,单时钟/机器周期,指令代码完全兼容传统8051; ? 工作电压: 5.5V - 3.5V(5V单片机);

? 工作频率范围:0~40MHz,相当于普通8051的 0~80MHz; ? 用户应用程序空间 4K//8K/16k/32K/64K字节; ? 片上集成1280字节 RAM;

? 通用I/O口(32/36个),复位后为准双向口/弱上拉(普通8051传统

I/O口);

? ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器。 ? 每个I/O口驱动能力均可达到20mA,但整个芯片最大不要超过120mA; ? 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片; ? 有EEPROM功能; ? 看门狗;

? 内部集成MAX810专用复位电路(外部晶体12M以下时,复位脚可直接

1K电阻到地);

? 时钟源:外部高精度晶体/时钟,内部R/C振荡器;

? 用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/

时钟;

? 常温下内部R/C 振荡器频率为:5.0V 单片机为: 11MHz ~ 17MHz; ? 共4个16位定时器,两个与传统8051兼容的定时器/计数器,16位定时

器T0和T1,没有定时器2,但有独立波特率发生器做串行通讯的波特率发生器,再加上2路PCA模块可再实现2个16位定时器;

? 外部中断I/O口4路,传统的下降沿中断或低电平触发中断,并新增支持

上升沿中断的PCA模块,Power Down模式可由外部中断唤醒; ? 通用全双工异步串行口(UART) ;

? 工作温度范围:-40 ~ +85℃(工业级) / 0 ~ 75℃(商业级) ; ? 封装:PDIP-40, PLCC-44。

2.4.3 STC89C52 单片机管脚及封装

STC89C52单片机有多种封装形式,本设计中选用40DIP封装,其管脚定义如图8所示。

图8 STC89C52 管脚图

本课题设计的电子秤的单片机应用电路如图9所示:

图9 STC89C52单片机电路

图中DOUT和PDSCK为单片机与HX711的AD转换电路交换数据的通信线。beep为蜂鸣器报警信号线,alert为报警灯信号线,RXD和TXD为串口通信线,也可以用于单片机程序的串行ISP下载。

2.5 液晶屏电路

图10 LCD显示电路

液晶屏电路如图10所示。LCD_CS、LCD_RES、LCD_RS、LCD_SDA、LCD_SCK为液晶模块与单片机接口的控制线。CS_ZK、SCK_ZK、SO_ZK和SI_ZK为字库和单片机接口的控制线。

该液晶为晶讯联公司的128*64汉字屏JLX12864G-086-PC显示信息。该显示模块既可以当成普通的图像型液晶显示模块使用(即显示普通图像型的单色图片功能),又含有JLX-GB2312 字库IC,可以从字库IC 中读出内置的字库的点阵数据写入到LCD 驱动IC 中,以达到显示汉字的目的。其接口引脚功能介绍:

表一 液晶模块接口引脚功能

2.6 矩阵键盘电路

矩阵键盘电路如图11所示:

图11 矩阵键盘电路

图中4*4矩阵键盘可以显示0-9数字、小数点和五个功能键。键盘行扫描信号为ROW1—ROW4,列扫描信号为COL1—COL4。行信号为输入信号,低电平有效;列信号为输出信号。当没有键按下时,即使行扫描输入低电平信号,列信号仍为高电平;当行扫描为低电平并且有键按下时,相应的列输出低电平。该低电平信号可以定位至按下键的位置。

2.7 声光报警电路

当测量重量超过量程时,beep和alert给出低电平信号,驱动蜂鸣器鸣响,报警灯亮。

图12 声光报警电路

第三章 软件设计 3.1软件流程图

本设计主程序使用了定时器,用来实现每0.5秒称重一次的功能,流程图如图19所示。键盘扫描程序如图20所示。

时钟中断入口逐列扫描Counter累加有键按下?置称重标志取键值返回

返回 图19 时钟中断程序流程图 图20 键盘扫描程序流程图

主程序软件流程如图21所示。

数据初始化端口初始化显示初始化定时器初始化进入后台while循环有称重标志吗?有称重并计算总价无显示重量和总价键盘扫描

图21 主程序流程图

3.2主程序

下面介绍main.c主程序编写,其他程序略。

(1) 头文件和一些宏定义

#include #include #include #include \#include \#include \

//定义量程系数

#define RATIO 2114/1623

(2) 管脚、常量、变量定义

//定义标识

volatile bit FlagTest = 0;

//定时测试标志,每0.5秒置位,测完清0

volatile bit FlagKeyPress = 0; //有键按下标志,处理完毕清0 volatile bit FlagSetPrice = 0; //价格设置状态标志,设置好为1。

//管脚定义 sbit LedA = P2^2; sbit beep = P1^0; sbit alert = P1^1;

//显示用变量 int Counter;

uchar idata str1[6] = \int i, iTemp; //称重用变量

unsigned long idata FullScale; //满量程AD值/1000 unsigned long AdVal; //AD采样值 unsigned long weight; //重量值,单位g

unsigned long idata price; //单价,长整型值,单位为分 unsigned long idata money; //总价,长整型值,单位为分 //键盘处理变量 uchar keycode; uchar DotPos;

//小数点标志及位置

(4) 各子程序

//整型转字符串的函数,转换范围0--65536 void int2str(int x, char* str) {

int i=1; int tmp=10; while(x/tmp!=0) { i++; tmp*=10; } tmp=x; str[i]='\\0'; while(i>1) {

str[--i]='0'+(tmp); tmp/=10; }

str[0]=tmp+'0'; }

//重新找回零点,每次测量前调用 void To_Zero() {

FullScale=ReadCount()/1000; price=0; }

//显示单价,单位为元,四位整数,两位小数 void Display_Price() {

unsigned int i,j;

display_GB2312_string(5,44,\ \

i = price/100; //得到整数部分 j = price - i*100;//得到小数部分 int2str(i,str1); //显示整数部分 if (i>=1000) {

display_GB2312_string(5,44,str1); }

else if (i>=100) {

display_GB2312_string(5,52,str1); }

else if (i>=10) {

display_GB2312_string(5,60,str1); } else {

display_GB2312_string(5,68,str1); }

//显示小数点

display_GB2312_string(5,76,\ //显示小数部分 int2str(j,str1); if (j<10) {

display_GB2312_string(5,84,\ display_GB2312_string(5,92,str1); } else {

display_GB2312_string(5,84,str1);

} }

//显示重量,单位kg,两位整数,三位小数 void Display_Weight() {

unsigned int i,j;

display_GB2312_string(3,60,\ \ //weight单位是g

i = weight/1000; //得到整数部分 j = weight - i*1000;//得到小数部分 int2str(i,str1); if (i>=10) {

display_GB2312_string(3,60,str1); } else {

display_GB2312_string(3,68,str1); }

display_GB2312_string(3,76,\ int2str(j,str1); if (j<10) else if (j<100) {

display_GB2312_string(3,84,\ } else {

display_GB2312_string(3,84,str1); } }

//显示总价,单位为元,四位整数,两位小数 void Display_Money() {

unsigned int i,j;

display_GB2312_string(7,44,\ \ if (money>999999) {

//超出显示量程

display_GB2312_string(3,92,str1);

display_GB2312_string(7,44,\ return; }

display_GB2312_string(7,44,str1); }

else if (i>=100) {

display_GB2312_string(7,52,str1); }

else if (i>=10) {

display_GB2312_string(7,60,str1); } else {

display_GB2312_string(7,68,str1); }

//显示小数点

display_GB2312_string(7,76,\ //显示小数部分 int2str(j,str1); if (j<10) {

display_GB2312_string(7,84,\ display_GB2312_string(7,92,str1); } else {

display_GB2312_string(7,84,str1); } }

//数据初始化 void Data_Init() {

price = 0; DotPos = 0; beep = 1; alert = 1; }

//管脚配置

void Port_Init() { }

//定时器0初始化 void Timer0_Init() { }

//定时器0中断

void Timer0_ISR (void) interrupt 1 using 0 {

//每0.5秒钟刷新重量 Counter ++; if (Counter >= 200) {

FlagTest = 1; }

//===============main program===================// void main(void) {

Rom_CS=1; initial_lcd(); EA = 0; Data_Init(); Port_Init(); Timer0_Init(); //初始化完成,开中断 EA = 1; //背光 LedA = 1;

clear_screen(); //clear all dots

Counter = 0; }

TL0 = 0x06;

TH0 = 0xf8; //定时器赋予初值 ET0 = 1; //允许定时器0中断 TMOD = 1; //定时器工作方式选择 TL0 = 0x06;

TH0 = 0xf8; //定时器赋予初值 TR0 = 1; //启动定时器

display_GB2312_string(1,1,\电子秤初始化....\ To_Zero();

display_GB2312_string(1,1,\电子秤初始化成功\ display_GB2312_string(3,1,\重量: kg\ display_GB2312_string(5,1,\单价: 元\ display_GB2312_string(7,1,\金额: 元\ Display_Price();

while(1) {

//每0.5秒称重一次

if (FlagTest==1) {

//称重,得到重量值weight,单位为g

AdVal=ReadCount(); weight=FullScale-AdVal/1000; if (weight>0x8000) weight=0; weight=10000*weight/FullScale; weight=weight*RATIO; //如果超量程,则报警 if (weight >= 10000) {

beep = 0; }

//如果不超量程 else {

beep = 1;

alert = 1; //显示重量值

//如果单价设定好了,则计算价格 alert = 0;

display_GB2312_string(3,60,\display_GB2312_string(7,44,\

Display_Weight();

if (FlagSetPrice == 1)

{

money = weight*price/1000; //money单位为分 //显示总金额 Display_Money(); } else {

display_GB2312_string(7,44,\ \

} }

}

}

//清测试标志 FlagTest = 0;

} //获取按键

keycode = Getkeyboard(); //有效键值0-15

if ((keycode<16)&&(FlagKeyPress==0)) {

FlagKeyPress = 1; } delay(20);

KeyPress(keycode); FlagKeyPress = 0;

四 硬件成品

4.1 焊接成品

手工焊接完成后的成品如下图所示。

图23 成品图

4.2 键盘操作说明

4*4矩阵键盘定义如下

7 8 9 10(清0) 4 5 6 11(删除) 1 2 3 12(未定义) 14(未定义) 0 15(.) 13(确定价格) 其中:

? 键0—9为数字键,用于单价设定。 ? 键15为小数点,也用于单价设定。

? 键10为清零键,每次测量之前,请先按清0键,以使重量和价格回零。 ? 键11为删除键,逐位删除敲错的单价。

? 键13为单价确定键,按下该键则设定的单价有效,开始计算总价。

4.3 常用使用步骤:

? 打开电源,屏幕显示电子秤初始化成功,此时重量和单价为0,金额

为空;

? 通过数字键和小数点键键入单价,完成后按下单价确定键。 ? 在支架上放上待称重物体,液晶屏显示重量(单位为kg),单价(单

位为元)和总金额(单位为元)。

? 称重量程为0—5kg,单价设定范围为0.01元—9999.99元,总金额显

示范围为0元—9999.99元。超过量程声光报警。

五 总结与感言

本课题在选题及研究过程中得到老师的悉心指导。黄老师多次询问研究进程,并为我们指点迷津,帮助我们开拓研究思路,精心点拨、热忱鼓励。黄老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,让我们受益无穷。对黄老师的感激之情是无法用言语表达的。

通过这次单片机课程设计,使我们得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。我们通过查资料问同学老师,获得了丰富的理论知识,极大地提高了实践能力,并对当前电了领域的研究状况和发展方向有了一定的了解,这对我今后进一步学习单片机的知识有极人的帮助。 参考资料

《单片机原理及接口技术》

本文来源:https://www.bwwdw.com/article/4var.html

Top