您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页基于单片机的电子秤设计HX711

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

来源:华佗健康网


安徽建筑大学毕业设计(论文)

目录

引言 ................................................................ - 1 - 第一章 系统的组成及工作原理 ....................................... - 2 - 1.1 系统的组成 .................................................... - 2 - 1.2 系统的工作原理 ................................................ - 3 - 第二章 系统硬件设计 ............................................... - 4 - 2.1主控芯片STCC52单片机基本系统 ................................. - 4 - 2.1.1 STCC52单片机性能介绍 ................................... - 4 - 2.1.2 STCC52单片机引脚功能 ................................... - 4 - 2.1.3 复位电路 ................................................. - 5 - 2.1.4 晶振电路 ................................................. - 6 - 2.2 A/D转换芯片HX711接口电路的设计 ................................ - 6 - 2,2.1 HX711引脚功能 ............................................ - 8 - 2.2.2 HX711管脚说明 ............................................ - 8 - 2.3 压电传感器的设计 .............................................. - 12 - 2.3.1 应变式电阻传感器 ......................................... - 12 - 2.3.2 应变片式电阻传感器的结构和原理 ........................... - 12 - 2.3.3 全桥测量电路 ............................................. - 14 - 2.4 显示电路设计 .................................................. - 15 - 2.4.1 LCD1602命令及时序 ......................................... - 18 - 2.5 键盘输入 ...................................................... - 20 - 第三章 系统软件设计 .............................................. - 21 - 3.1 C语言在单片机中的应用 ........................................ - 21 - 3.2 系统主程序流程图 ............................................. - 22 - 3.3 子程序设计 .................................................... - 23 - 3.3.1 A/D数据采集子程序 ........................................ - 23 - 3.3.2 显示子程序 ............................................... - 23 - 3.3.3 键盘扫描子程序 ............................................ - 24 - 第四章 系统的调试 ................................................. - 25 -

安徽建筑大学毕业设计(论文)

4.1 AD值反向转换重力值的参数计算 .................................. - 25 - 4.2 误差分析 ...................................................... - 25 - 总结 ............................................................... - 26 - 致谢 ............................................................... - 27 - 参考文献 ........................................................... - 28 - 附录1 系统原理图 ....................................... 错误!未定义书签。 附录2 系统程序清单 ................................................ - 30 - 附录3 实物图 ...................................................... - 39 -

安徽建筑大学毕业设计(论文)

安徽建筑大学毕业设计(论文)

基于单片机的电子秤设计

电子与信息工程学院 电子信息工程专业 2009级1班 唐杰

指导教师 吕虹

引言

随着人们生活水平的不断提高,商业水平越来越现代化,人们对商品的度量速度和精度也提出了新的要求。目前,商用电子计价秤的使用非常普及,逐渐会取代传统的杆秤和机械案秤。电子计价秤在秤台结构上有一个显著的特点:一个相当大的秤台,只在中间装置一个专门设计的传感器来承当物料的全部重量。为了满足电子秤的设计要求,本设计针对普通商业度量需要分析和设计。论述了系统的设计思想、方法及设计实施过程,详细分析了各个模块的选用、功能及实现方法,包括系统的硬件构成,传感器的选择,系统的运作流程图等,以及所用到的一些工具,工作环境。我们进行了各单元电路方案的比较论证及确定,最终选取以STCC52单片机为控制核心,传感器选用HL-8型悬臂梁式电阻应变式传感器。该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器进行编程。

- 1 -

安徽建筑大学毕业设计(论文)

第一章 系统的组成及工作原理

1.1 系统的组成

本数字电子秤系统可分为单片机控制电路、A/D转换电路、传感器、LCD显示、矩阵键盘、蜂鸣器模块等几部分,其系统组成如图1-1所示。

数据采集部分 称重传感器 HL-8型 单片机控制模块 电子秤专用24位高精度高增益传感器芯片HX711 单片机 STCC52 蜂鸣器报警模块 4*4矩阵键盘 点阵式1602型的LCD 人机交互界面 图1-1 系统的组成框图

- 2 -

安徽建筑大学毕业设计(论文)

1.2 系统的工作原理

系统原理如图1-1所示,系统通过传感器将压力这种物理量转化为电信号,即传感器内部的电阻应变片感应到压力后,电阻发生微小变化,通过全桥测量电路将电阻的微小变化转化成电压的微小变化,HX711将信号调整到A/D能采集的范围,然后由A/D进行采集,接着把采集到的24位高低电平通过DOUT送到单片机进行处理,单片机处理后,把数字信号输送到显示电路中,由显示电路输出测量结果。整个系统实现了用单片机来控制输出,在线性度的确定过程中,需要对程序进行反复的修改,最终实现设计的要求。

- 3 -

安徽建筑大学毕业设计(论文)

第二章 系统硬件设计

2.1主控芯片STCC52单片机基本系统 2.1.1 STCC52单片机性能介绍

STCC52是一种低功耗、高性能CMOS 8位微控制器,具有8K的在系统可编程闪烁存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上flash允许程序存储器在线可编程,也适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统上可编程闪烁存储单元,使得STCC52为众多嵌入式控制应用系统提供灵活、有效的解决方案。

STCC52具有以下标准功能:8K字节闪烁存储器,256字节读写存储器,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,STCC52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许读写存储器、定时器/计数器、串口、中断继续工作。掉电保护方式下,读写存储器内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

2.1.2 STCC52单片机引脚功能

VCC:电源。GND:地。

P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在闪烁编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。

P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。

P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能

- 4 -

安徽建筑大学毕业设计(论文)

驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。在访问外部程序存储器或用16位地址读取外部数据存储器时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送“1”。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。在闪烁编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流。

RST:复位输入。当晶振工作时,RST引脚持续2个机器周期高电平将使单片机复位。

EA/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接Vcc。在闪烁编程期间,EA也接收12伏VPP电压。

XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 2.1.3 复位电路

单片机上电时,当振荡器正在运行时,只要持续给出RST引脚两个机器周期的高电平,便可完成系统复位。外部复位电路是为提供两个机器周期以上的高电平而设计的。系统采用上电自动复位,上电瞬间电容器上的电压不能突变,RST上的电压是Vcc上的电压与电容器上的电压之差,因而RST上的电压与Vcc上的电压相同。随着充电的进行,电容器上的电压不断上升,RST上的电压与Vcc上的电压相同。随着充电的进行,电容器上的电压不断上升,RST上的电压就随着下降,RST脚上只要保持10ms以上高电平,系统就会有效复位。电容C1可取10~33μF,R取10kΩ,充电时间常数为10×10-6×10×103=100ms。

复位电路的实现可以有很多种方法,但是从功能上一般分为两种:一种是电源复位,即外部的复位电路在系统通上电源之后直接使单片机工作,单片机的起停通过电源控制;另一种方法是在复位电路中设计按键开关,通过按键开关触发复位电平,控制单片机的复位。本设计使用了第二种方法,其电路图如图2-1

- 5 -

安徽建筑大学毕业设计(论文)

所示。

图2-1 STCC52单片机复位电路,晶振电路图

2.1.4 晶振电路

STCC52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端,外接石英晶体或陶瓷振荡器以及补偿电容C2、C3构成并联谐振电路。当外接石英晶体时,电容C2、C3选30pF±10pF;当外接陶瓷振荡器时,电容C2、C3选40pF±10pF。STCC52系统中晶振频率一般在1.2~12MHz选择。外接电容C2、C3的大小会影响振荡器频率的高低、振荡频率的稳定度、起振时间及温度稳定性。在设计电路板时,晶振和电容应靠近单片机,以便减少寄生电容,保证振荡器稳定可靠工作。在本系统中,选择了12MHz石英晶振,电容C1、C2为30pF。其电路图如图2-1所示。 2.2 A/D转换芯片HX711接口电路的设计

根据设计要求,系统要求输出的电流信号为20~1000mA,步进为1mA,且要求显示数值,因此,给定量的执行元件A/D转换器至少需要12位的转换精度。结合系统的设计要求,并考虑到单片机的I/O接口资源紧张等因素,最终确定选用HX711量化精度能达到1/4096<1/1000,完全能达到设计的精度要求。HX711接口电路如图2-2所示。

- 6 -

安徽建筑大学毕业设计(论文)

图2-2 HX711接口图

HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点、降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B则为固定的增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接部件。上电自动复位功能简化了开机的初始化过程。

- 7 -

安徽建筑大学毕业设计(论文)

2,2.1 HX711引脚功能

表2-1 HX711引脚功能

管脚名称 号 1 VSUP 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

性能 电源

描述

BASE AVDD VFB AGND VBG INA INA+ INB INB+ PD-SCK DOUT X0 X1 RATE DVDD

稳压电路供电电源:2.6-5.5V(不用稳压电路时接AVDD)

模拟输出 稳压电路控制输出(不用稳压电路时为无连接) 电源 模拟电源:2.6-5.5V 模拟输入 稳压电路控制输入(不用稳压电路时应接地) 地 模拟地 模拟输出 参考电源输入 模拟输入 通道A负输入端 模拟输入 通道A正输入端 模拟输入 通道B负输入端 模拟输入 通道B正输入端 数字输入 断电控制(高电平有效)和串口时钟输入 数字输出 串口数据输出

数字输入输晶振输入(不用晶振时为无连接) 出

数字输入 外部时钟或晶振输入,0:使用片内振荡器 数字输入 输出数据速率控制,0:10Hz;1:80Hz 电源 数字电源:2.6-5.5V

2.2.2 HX711管脚说明

模拟输入

通道A模拟差分输入可直接与桥式传感器的差分输出相接。由于桥式传感器输出的信号较小,为了充分利用A/D转换器的输入动态范围,该通道的可编程增益较大,为128或。这些增益所对应的满量程差分输入电压分别±20mV或±40mV。通道B为固定的增益,所对应的满量程差分输入电压为±40mV。通道B应用于包括电池在内的系统参数检测。

供电电源

数字电源(DVDD)应使用与MCU芯片相同的数字供电电源。HX711芯片内额稳压电路可同时向A/D转换器和外部传感器提供模拟电源。稳压电源的供电电压(VSUP)可与数字电源(DVDD)相同。稳压电源的输出电压值(VAVDD)由外部

- 8 -

安徽建筑大学毕业设计(论文)

分压电阻R1、R2和芯片的输出参考电压VBG决定(图1),VAVDD=VBG(R1+ R2)/ R2。应选择该输出电压比稳压电源的输入电压(VSUP)低至少100mV。如果不使用芯片内的稳压电路,管脚VSUP和管脚AVDD应相连,并接到电压为2.6~5.5V的低噪声模拟电源。管脚VBG上不需要外接电容,管脚VFB应接地,管脚BASE为无连接。

时钟选择

如果将管脚XI接地,HX711将自动选择使用内部时钟振荡器,并自动关闭外部时钟输入和晶振的相关电路。这种情况下,典型输出数据速率为10Hz或80Hz。如果需要准确的输出数据速率,可将外部输入时钟通过一个20pF的隔直电容连接到XI管脚上,或将晶振连接到XI和XO管脚上。这种情况下,芯片内的时钟振荡器电路会自动关闭,晶振时钟或外部输入时钟被采用。此时,若晶振频率为11.0592MHz,输出数据速率为准确的10Hz或80Hz。输出数据速率与晶振频率以上述关系按比例增加或减少。使用外部输入时钟,外部时钟信号不一定需要为方波。可将MCU芯片的晶振输出管脚上的时钟信号通过20pF的隔直电容连接到XI管脚上,作为外部时钟输入。外部时钟输入信号的幅值可低至150 mV。

HX711管脚说明如图2-3所示

图2-3 HX711管脚说明

- 9 -

安徽建筑大学毕业设计(论文)

串口通讯

串口通讯线由管脚PD-SCK和DOUT组成,用来输出数据,选择输入通道和增益。当数据输出管脚DOUT为高电平,表明A/D转换器还未准备好输出数据,此时串口时钟输入信号PD-SCK应为低电平。当DOUT从高电平变低电平后,PD-SCK应输入25至27个不等的时钟脉冲(图二)。其中第一个时钟脉冲的上升沿将读出输出24位数据的最高位(MSB),直至第24个时钟脉冲用来选择下一个A/D转换的输入通道和增益,输入通道和增益说明如表2-3所示。

表2-2 主要电气参数

参数

条件及说明

最小值典型值最大值

单位

满额度差分输入范围 V(inp)-V(inn) 输入共模电压范围

±0.5(AVDD/GAIN)

AGND+0.6 AVDD-0.6

使用片内振荡器,RATE=0 10 输出数据速率 使用片内振荡器,80

RATE=DVDD

外部时钟或晶振,RATE=0 fclk/1,105,920 外部时钟或晶振,fclk/138,240 RATE=DVDD

输出数据编码 二进制补码 800000

7FFFFF(HEX)

输出稳定时间(1) RATE=0 400

RATE=DVDD 50

输入零点漂移 增益=128 0.2

增益= 0.8

输入噪声 增益=128,RATE=0 50

增益=128,RATE= DVDD 90

温度系数 输入零点漂移(增益=128) ±7

增益漂移(增益=128) ±3

输入共模信号抑制比 增益=128,RATE=0 100 电源干扰抑制比 增益=128,RATE=0 100 输出参考电压(VBG) 1.25 外部时钟或晶振频率 1 11.0592 30 电源电压 DVDD 2.6 5.5

AVDD,VSUP 2.6 5.5

模拟电源电路 正常工作 1600 (含稳压电路) 断电 0.3 数字电源电路 正常工作 100

断电 0.2

- 10 -

V

V Hz

mv nV(rms) nV/℃ ppm/℃ dB dB V MHz V uA uA

安徽建筑大学毕业设计(论文)

表2-3 输入通道和增益选择 PD-SCK 脉冲数输入通增益

25 A 128 26 B

27

A

PD-SCK的输入时钟脉冲数不应少于25或多于27,否则会造成串口通讯错误。当A/D转换器的输入通道或增益改变时,A/D转换器需要4个数据输出周期才能稳定。DOUT在4个数据输出周期后才会从高电平变低电平,输出有效数据。如图2-4所示。

图2-4 数据输入,输出通道和增益选择时序图

表2-4 四个周期选择说明

符号 T1 T2

说 明

DOUT下降沿到PD-SCK脉冲上升沿 PD-SCK脉冲上升沿到DOUT数据有效 T3 T4

复位和断电

当芯片上电时,芯片内的上电自动复位电路会使芯片自动复位。管脚PD-SCK输入来控制HX711的断电。当PD-SCK为低电平时,芯片处于正常工作状态。

- 11 -

最小值 最大值 单位 0.1

0.1

us us

PD-SCK正脉冲电平时间 PD-SCK负脉冲电平时间

0.2 0.2

50

us us

安徽建筑大学毕业设计(论文)

断电控制:60us断电 正常工作

图2-5 断电控制

如果PD-SCK从低电平变高电平并保持在高电平超过60 us,HX711即进入断电状态。如果使用片内稳压电源电路,断电时,外部传感器和片内A/D转换器会被同时断电。当PD-SCK重新回到低电平时,芯片会自动复位后进入正常工作状态。芯片从复位或断电状态后,通道A和增益128会被自动选择为作为第一次A/D转换的输入通道和增益。随后的输入通道和增益选择由PD-SCK的脉冲数决定,参见串口通讯一节。芯片从复位或断电状态进入正常工作状态后,A/D转换器需要4个数据输出周期才能稳定。DOUT在4个数据输出周期后才会从高电平变为低电平,输出有效数据。 2.3 压电传感器的设计 2.3.1 应变式电阻传感器

应变片式电阻传感器是以应变片为传感器元件的传感器。它具有以下优点:1.精度高,测量范围广;2.使用寿命长,性能稳定可靠。3.结构简单、尺寸小、重量轻,因此在测量时,对工件工作状态及应力分布影响小;4.频率响应特性好。应变片响应时间约为100ns;5.可在高低温、高速、高温、强烈振动、强磁场、核辐射和化学腐蚀等恶劣环境条件下工作;6.应变片种类繁多,价格便宜。电阻应变片的工作原理是基于电阻应变效应,即在导体产生机械形变时,它的电阻值相应发生变化。应变片式电阻传感器应用很广。本设计采用的是梁式力传感器,该传感器结构简单、灵敏度高。适用于小压力测量。 2.3.2 应变片式电阻传感器的结构和原理

电阻应变式传感器是将被测量的力,通过它产生的金属弹性变形转换成电阻变化的原件。由电阻应变片和测量电路两部分组成。常用的电阻应变片有两种:电阻应变片和半导体应变片,本设计采用的是电阻应变片,为获得高电阻值,电

- 12 -

安徽建筑大学毕业设计(论文)

阻丝排成网状,并贴在绝缘的基片上,电阻丝两端引出导线,线珊上面有覆盖层,起保护作用。

电阻应变片也有误差,产生的因素很多,所以在测量时我们一定要注意。其中的温度的影响最重要,环境温度影响电阻值变化的原因主要是:A:电阻丝温度系数引起的。B:电阻丝与被测原件对桥接零点和输出,灵敏度的影响,即使采用同一批应变也会因应变片之间稍有温度特性之差而引起误差,所以对要求精度较高的传感器,必须进行温度补偿,解决的办法是在被粘贴的基片上采用适当及温度系数的自动补偿,并从外部对它加以适当的补偿。非线性误差是传感器特性中最重要的一点。产生非线性误差的原因很多,一般来说主要由结构设计决定,通过线性补偿,也可以得到改善。滞后和蠕变是关于应变片及粘合剂的误差。由于粘合剂为高分子材料,其特性随温度变化较大,所以称重传感器必须在规定的温度范围内使用。

电阻应变片的工作原理是基于电阻应变效应,即在导体产生机械形变时,它的电阻值相应发生变化。

设有一根电阻丝,如图所示。它在未受力时的原始电阻值为

R=l S式中 :

——电阻丝的电阻率;

l——电阻丝的长度; S——电阻丝的面积。

电阻丝在外力的作用下,将引起电阻变化R,且有

RlS= RlS令电阻丝的轴向效应为l/l,由材料力学可知r/rl/l,

u为电阻丝材料的泊松系数,经整理可得 R12/ R通常把单位应变所引起的电阻相对变化称作电阻线的灵敏系数,其表达式为

R/R/ k012从上式可以明显看出,电阻丝灵敏系数k0由两部分组成:12表示受力

- 13 -

安徽建筑大学毕业设计(论文)

后由材料的几何尺寸变化引起的;属材料,

//表示由材料电阻变化所引起的。对于金

项的阻值要比12小得多,可以忽略,故k0=12。大量实

验证明,在电阻丝拉伸比例极限内,电阻的相对变化与应变成正比,即k0=1.7~3.6。上式可写成

2.3.3 全桥测量电路

应变式传感器常用的测量电路有单臂电桥、差动半桥和差动全桥,其中差动全桥可提高电桥的灵敏度,消除电桥的非线性误差,并可消除温度误差等共模干扰。一般在测量中都使用4片应变片组成差动全桥,本设计所采用的传感器就是全桥测量电路。其电路图如图3-6所示。桥式测量电路有四个电阻,其中任何一个都可以是电阻应变片电阻,电桥的一个对角线接入工作电压U,另一个对角线位输出电压Uo。其特点是:当四个桥臂电阻达到相应关系时,电桥输出为零,或则就有电压输出,可用灵敏检流计来测量,所以电桥能够精确地测量微小的电阻变化。应变电阻作为桥臂电阻接在电桥电路中。无压力时,电桥平衡,输出电压为零;有压力时,电桥的桥臂电阻值发生变化,电桥失去平衡。 全桥测量电路中,将受力性质相同的两片应变片接入电桥对边。其输出灵敏度比半桥提高了一倍,非线性误差和温度误差均得到了改善。

Rk0。 R

图2-6 全桥测量电路

- 14 -

安徽建筑大学毕业设计(论文)

2.4 显示电路设计 方案一:LED显示

LED就是light emitting diode ,发光二极管的英文缩写,简称LED。它是一种通过控制半导体发光二极管的显示方式,用来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。

LED显示器结构:

基本的半导体数码管是由七个条状发光二极管芯片排列而成的。可实现0~9的显示。其具体结构有“反射罩式”、“条形七段式”及“单片集成式多位数字式”等

LED显示器与显示方式:

LED显示块是由发光二极管显示字段的显示器件。通常使用的是七段LED。这种显示块有共阴极与共阳极两种。共阴极LED显示块的发光二极管阴极共地。当某个发光二极管的阳极为高电平时,发光二极管点亮;共阳极LED显示块的发光二极管阳极并接。

在设计中使用LED显示块构成N位LED显示器。N位LED显示器有N根位选线和8*N根段选线。根据显示方式不同,位选线与段选线的连接方法不同。段选线控制字符选择,位选线控制显示位的亮、暗。

LED显示器有静态显示与动态显示两种方式。我们使用的为动态显示方式。在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由响应的I/O口线控制。其中两片74LS244分别用于段信号和位信号的驱动,74LS273用于段信号的锁存,其锁存地址为7FFFH。

- 15 -

安徽建筑大学毕业设计(论文)

图2.7 LED数码管显示方式

方案二: LCD显示

LCD 液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。比LED要好的多,但是价钱较其贵。

在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在前面章节已经介绍过,在此不作介绍,本章重点介绍字符型液晶显示器的应用。

在单片机系统中应用晶液显示器作为输出器件有以下几个优点: (1)显示质量高:由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。

(2)数字式接口:液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。

- 16 -

安徽建筑大学毕业设计(论文)

(3)体积小、重量轻:液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。

(4)功耗低:相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。 液晶显示器各种图形的显示原理

(1)线段的显示:点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和暗线组成的虚线。这就是LCD显示的基本原理。

(2)字符的显示:用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。

(3)汉字的显示:汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、5……右边为2、4、6……根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加1,送第二个字节,换行按列对齐,送第三个字节……直到32B显示完就可以LCD上得到一个完整汉字。

- 17 -

安徽建筑大学毕业设计(论文)

1602字符型LCD简介

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。我们以1602LCD字符型液晶显示器为例。1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,1602LCD主要技术参数:显示容量:16×2个字符,芯片工作电压:4.5—5.5V,工作电流:2.0mA(5.0V),模块最佳工作电压:5.0V,字符尺寸:2.95×4.35(W×H)mm[19]。

由于本次设计的显示模块需要显示多位数字,如果采用数码管显示的话将会占用多个单片机I/O口,使得电路变得更为复杂。所以选用液晶显示,1602LCD符合基本条件,能够采用。

2.4.1 LCD1602命令及时序

1602液晶模块的引脚连线如图2-8。其中,第1、2脚为液晶的驱动电源;第三脚VL为液晶的对比度调节,通过在VCC和GND之间接一个10K多圈可调电阻,中间抽头接VL,可实现液晶对比度的调节;液晶的控制线RS、R/W、E分别接单片机的P0.5、P0.6、P0.7;数据口接在单片机的P2口;BL+、BL-为液晶背光电源。

图2-8 1602液晶模块的接线图

1602液晶模块的初始化过程: 延迟15ms

写指令38H(不检测忙信号) 延迟5ms

- 18 -

安徽建筑大学毕业设计(论文)

写指令38H(不检测忙信号) 延迟5ms

写指令38H(不检测忙信号)

(以后每次写指令、读/写数据操作之前均需检测忙信号) 写指令38H:显示模式设置 写指令08H:显示关闭 写指令01H:显示清屏 写指令06H:显示光标移动设置 写指令0CH:显示开及光标设置

1602液晶模块的读操作时序如图2-9所示。

图2-9 1602液晶模块的读操作时序

1602液晶模块的写操作时序如图2-10所示。

图2-10 1602液晶模块的写操作时序

- 19 -

安徽建筑大学毕业设计(论文)

2.5 键盘输入

键盘输入是人机交互界面中重要的组成部分,它是系统接受用户指令的直接途径。操作者通过键盘向系统发送各种指令或置入必要的数据信息。因此键盘模块设计的好坏,直接关系到系统的可靠性和稳定性。键盘是由若干个按键开关组成,键的多少根据单片机应用系统的用途而定。键盘由许多键组成,每一个键相当于一个机械开关触点,当键按下时,触点闭合,当键松开时,触点断开。单片机接收到按键的触点信号后作相应的功能处理。因此,相对于单片机系统来说键盘接口信号是输入信号。 方案一:专用芯片式设计

专用键盘处理芯片一般功能比较完善,芯片本身能完成对按键的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示接口功能。列如Intel8279是一种为8位微处理器设计的比较成熟的通用键盘/显示器接口芯片,其功能有:接收来自键盘的输入数据,并作预处理;数据显示的管理和数据显示器的控制。专用键盘处理芯片的优点很明显,可靠性高,口简单,使用方便,适合处理按键较多的情况。但在很多应用场合,考虑成本因素,可能并不是最佳选择。 方案二:矩阵式键盘设计

矩阵式键盘又叫行列式键盘。用I/O口线组成行、列结构,按键设置在 行列的交点上。例如,用2×2的行列结构可构成4个键的键盘,4×4行列结构可构成16个键的键盘。因此,在按键数量较多时,可以节省I/O口线。相对于专用芯片式可以节省成本,且更为灵活。缺点就是需要用软件处理消抖、重键等问题。

图2-11 4×4矩阵键盘

考虑到成本方面,我决定采用矩阵键盘。

- 20 -

安徽建筑大学毕业设计(论文)

第三章 系统软件设计

在单片机应用系统的开发中,软件的设计是最复杂和困难的,大部分情况下工作量都较大,特别是对那些控制系统比较复杂的情况。如果是机电一体化的设计人员,往往需要同时考虑单片机的软硬件资源分配。本系统的软件设计主要分为系统初始化、按键、显示处理及信号频率输入处理。 程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方法。其步骤可概括为以下三点:

⑴ 分析系统控制要求,确定算法:对复杂的问题进行具体的分析,找出合理的计算方法及适当的数据结构,从而确定编写程序的步骤。这是能否编制出高质量程序的关键。

⑵ 根据算法画流程图:画程序框图可以把算法和解题步骤逐步具体化,以减少出错的可能性。

⑶编写程序:根据程序框图所表示的算法和步骤,选用适当的指令排列起来,构成一个有机的整体,即程序。

程序数据的一种理想方法是结构化程序设计方法。结构化程序设计是对利用到的控制结构类程序做适当的,特别是转向语句(或指令)的使用,从而控制了程序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解,减少逻辑错误和易于修改、调试。根据系统的控制任务,本系统的软件设计主要由主程序、初始化程序、显示子程序、数据采集子程序和延时程序等组成。 3.1

C语言在单片机中的应用

C语言是一种通用的计算机程序设计语言,在国际上非常流行。它既可以用

来编写计算机的系统程序,也可以用来编写一般的应用程序。以前计算机的系统软件主要用汇编语言编写,单片机应用系统更是如此。C语言是当前最流行的程序设计语言,它像其它高级语言一样,面向用户,面向解题的过程,编程者不必熟悉具体的计算机内部结构和指令;C语言又像汇编语言一样,可以对机器硬件进行操作。如进行端口I,0操作、位操作、地址操作,并可内嵌汇编指令,将汇编指令当作它的语句一样。我们知道,汇编语言将涉及计算机硬件,所以C语言又像低级语言一样,可以对计算机硬件进行控制,因此人们把它称为介于高

- 21 -

安徽建筑大学毕业设计(论文)

级语言与低级语言之间的一种中级语言。正是因为C语言具有这样的特性,所以很适合编写要对硬件进行操作的软件程序。本文采用C语言进行编写.因为此系统软件比较,其存储量较大,因此必须应用C语言编程了。

3.2 系统主程序流程图

在系统通电后,主程序首先完成系统初始化,其中包括系统变量定义和给系统变量赋初值等,然后调用A/D采集函数,将A/D采集模块输出的24位二进制串行数据转化为十进制,接着进行调零和定标,最后分离出四位十进制数据的千位、百位、十位和个位,调用液晶显示函数,将对应的数值送到对应的液晶上进行显示。系统主函数流程图如图3-1所示。

图3-1 主程序流程图

- 22 -

安徽建筑大学毕业设计(论文)

3.3 子程序设计

3.3.1 A/D数据采集子程序

A/D数据采集子程序主要是采集压电传感器的输出小信号,前24个ADSK脉冲采集24位串行二进制数据,接下来的1~3个ADSK脉冲选择下次A/D采集的通道和增益,本设计采用1个ADSK脉冲,选择通道A,增益为128。其流程图如图3-2所示。

开始 A/D端口初始化 采集4位串行数据 选择下次采集通道和增益 输出数据编码 返回 图3-2 A/D数据采集子函数流程图

3.3.2 显示子程序

显示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之一。设计流程图如图3-3所示。

- 23 -

安徽建筑大学毕业设计(论文)

图3-3 显示子程序流程图

3.3.3 键盘扫描子程序

键盘电路设计成4X4矩阵式,在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。设计流程图如图3-4所示。

图3-4 键盘扫描子程序流程图

- 24 -

安徽建筑大学毕业设计(论文)

第四章 系统的调试

系统硬件调试比较简单,首先检查电路的焊接是否正确,用万用表检测电路板是否存在短路或者断路。经检测后再接上电源,用万用表测量电源部分的各个输出电压值,经调试正常后方可接到各部分电路。先按下单片机复位键将系统复位,调用液晶显示子函数显示1234,显示无误后,接上传感器和由24位串行A/D转换芯片构成的调理电路和A/D转换电路,将全部的程序烧到芯片中,观察液晶上是否显示0000,如果没有显示,即进行软件调零工作,待调零完成后,用手给传感器慢慢施加压力,看数液晶的数值是否也跟随增大,当放手后,看液晶的数值是否回到0000附近。

4.1 AD值反向转换重力值的参数计算

满量程输出电压=激励电压*灵敏度1.0mv/v,例如:供电电压是5v 乘以灵敏度2.0mv/v=满量程10mv。相当于有10Kg 重力产生时候产生10mV 的电压。

假设重力为 AKg, (x<10Kg),测量出来的 AD 值为 y, 10Kg传感器输出,发送给 AD 模块儿的电压为 AKg* 8.6mV /10Kg =0.86A mV 经过128倍增益后为 128 *0.86A = 110.08AmV

转换为24bit 数字信号为 110.08A mV *224/4.3V =429496. 7296A 所以 y =429496. 7296A /100 = 4294.967296 A 因此得出 A = y /4294.967296 Kg ≈ y / 4.30 g 所以得出程序中计算公式

Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/4.30+0.05);

4.2 误差分析

由于所采用的传感器灵敏度很高,如果传感器在水平方向固定的不是很好,会存在一定的误差。另外传感器的引线也很灵敏,稍微触动一下,也会产生误差。

- 25 -

安徽建筑大学毕业设计(论文)

总结

随着集成电路和计算机技术的迅速发展,使电子仪器的整体水平发生巨大变化,传统的仪器逐步的被智能仪器所取代。智能仪器的核心部件是单片机,因其极高的性价比得到广泛的应用与发展,从而加快了智能仪器的发展。而传感器作为测控系统中对象信息的入口,越来越受到人们的关注。传感器好比人体“五官”的工程模拟物,它是一种能将特定的被测量信息(物理量、化学量、生物量等)按一定规律转换成某种可用信号输出的器件或装置本次设计中的全桥电子称就是在以上仪器的基础上设计而成的。因此,只有充分了解有关智能仪器、单片机、传感器以及各部分之间的关系才能达到要求。

经过几个月的努力,终于按照毕业设计进度要求如期完成了实用电子秤控制系统的硬件设计任务。在做毕业设计的过程中,虽然碰到了不少的困难,但是在老师的指导以及自己的努力下,终于取得了一定成果。

一、 主要工作及结论

1、熟悉STCC52单片机功能及工作特性,掌握其接口扩展方法。 2、通过对数据采集的分析,了解了各种传感器、放大器及A/D转换器有了更深的认识。

3、对键盘和显示器进行选型比较,得出各种型号优劣比。 4、采用面向对象的思想,分层次、分模块构建设计的总体框架。 二、 存在的问题

1、系统设计不够优化,有待改善。比如系统的超量程信号直接由单片机送入报警电路,没有设计保护电路再入单片机处理后送入报警电路。

2、没有扩展更多电路,如日历时钟电路、通讯接口电路等。日历时钟电路可以显示购货日期,通讯接口电路可以与上位机(PC机)进行通讯,从而将大量的商品数据存于上位机,然后通过串口或并口通讯与电子称相连,达到远距离控制的目的。

3、对各种实用芯片价格了解不够,选择上任有欠缺,如所选的称重传感器价格较贵。

这些都为我今后的学习和工作留下了积极的影响。

- 26 -

安徽建筑大学毕业设计(论文)

致谢

大学生涯即将结束,临近毕业,我感慨良多。在论文的设计过程中,我查阅了许多有关压电传感器、A/D转换和C程序设计方面的文献资料,使我对压电传感器的设计和使用有了更深的认识。从论文选题到完成论文,吕虹老师付出了大量心血。设计过程中,他从多方面进行指导,不断对论文提出修改意见。吕虹老师渊博的知识、严谨的治学态度,求实的精神,时刻感染着我。在此,我要衷心地感谢吕虹老师!论文的完成,不仅是我大学四年知识积累的体现,而且也是电信学院所有老师悉心教导的结果,感谢他们让我掌握了一定的专业知识,专业技能和一些做人的道理。同时,我也要感谢周围不断鼓励、支持、帮助我的同学们,是你们的友情、关心、爱心让我倍感生活的精彩和温暖。最后,我要特别感谢我的家人,他们辛勤的付出,无私的关爱让我体会到亲情的伟大,为我茁壮成长提供了良好的环境。

- 27 -

安徽建筑大学毕业设计(论文)

参考文献

[1] Chen Guang,Wang Yong,Wu Gang.Frequency domain identification of

[2]

[3] [4]

[5]

flexible structure with the resistance strain gauge sensor[A].Intelligent Control and Automation, 2004. WCICA 2004. Fifth World Congress [C].2004.

D. Macnamara,D. Thiel.Optimizing piezo-resistive strain gauge characteristics for intelligent strain sensing applications[A].Microelectronics:Design,Technology,and Packaging II[C].2006.

Clarence W. de Silva.Signal Conditioning and Modification: Bridge Circuits[A].Vibration and Shock Handbook[C].2005.

Sifuentes, E,Casas, O.Direct interface circuit to linearise resistive sensor bridges[J].Sensors and Actuators. A, Physical,2008,147(1):52-.

M.K. Patra,K. Manzoor,M. Manoth.Nanotechnology Applications for Chemical and Biological Sensors[J].Defence Science Journal,2008,58(5):636-9.

[6] 王建华,敬大德,曹少飞.基于双悬臂梁结构的应变测量传感器研究[J].传

感技术学报,2005,18(3):5-8.

[7] 陈杰,黄鸿.传感器与检测技术[M].北京:高等教育出版社,2002. [8] 陈杰,陈绿深.传感器与检测技术[M].北京:北京理工大学出版社,1987. [9] 王洪业,传感器技术[M].长沙:湖南科学出版社,1985. [10] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2003.

[11] 周荷琴.微型计算机原理与接口技术[M].合肥:中国科学技术大学出版

社,2008.

[12] 周明德,蒋本珊.微机原理与接口技术(第2版)[M].北京:人民邮电出版

社,2007.

[13] 康华光.电子技术基础数字部分(第五版)[M].北京:高等教育出版

社,2005.

[14] 谭浩强.C程序设计[M].北京:清华大学出版社,2005.

[15] 郑阿奇.MATLAB实用教程(第2版)[M].北京:电子工业出版社,2007. [16] 楼然苗.单片机课程设计指导[M].北京: 北京航空航天大学出版社,2007. [17] 彭介华.电子技术课程设计指导[M].北京:高等教育出版社,1977.

- 28 -

安徽建筑大学毕业设计(论文)

- 29 -

安徽建筑大学毕业设计(论文)

附录2 系统程序清单

///////////////////////////////////////////////////////////////////////////////////////////

#include #include #include #include

#define uchar unsigned char #define uint unsigned int #define ulong unsigned long int weight; double money; uint temp; uchar button; sbit lcdrs=P2^4; sbit lcdwr=P2^5; sbit lcden=P2^6;

sbit hx711_dout=P2^0; sbit hx711_sck=P2^1; sbit spk=P2^2;

///////////////////////////////////////////////////////////////////////////////////////////////

//LCD1602显示程

////////////////////////////////////////////////////////////// void delayms(uint k) { uint i,j;

for(i=k;i>0;i--) for(j=110;j>0;j--); }

void write_com(uchar com)//写命令 {

lcdrs=0; P0=com; delayms(5); lcden=1; delayms(5); lcden=0; }

void write_date(uchar date)//写数据 {

lcdrs=1; P0=date; delayms(5); lcden=1;

- 30 -

安徽建筑大学毕业设计(论文)

delayms(5); lcden=0; }

void init_1602() {

lcden=0; lcdwr=0;

write_com(0x38);//设置16x2 显示5x7点阵,8位数据接口 write_com(0x0c);//设置开显示,不显示光标 write_com(0x06);//写一个字符后地址指针加1 write_com(0x01);//显示清0,数据指针清0 }

void displaywpm(void) {

uchar num;

uchar code table[]=\"W:kgP:$Money:$\"; write_com(0x80);

write_date(table[0]); write_date(table[1]); write_com(0x80+0x07); write_date(table[2]); write_date(table[3]);

write_com(0x80+0x0a); write_date(table[4]); write_date(table[5]); write_com(0x80+0x0f); write_date(table[6]);

write_com(0x80+0x40); for(num=0;num<6;num++) write_date(table[num+7]);

write_com(0x80+0x4a); write_date(table[13]); }

void weight_shuzhi(uint aaa) {

uchar idata weighttable[4]={0,0,0,0}; weighttable[3]=aaa%10; weighttable[2]=aaa/10%10; weighttable[1]=aaa/100%10;

- 31 -

安徽建筑大学毕业设计(论文)

weighttable[0]=aaa/1000;

write_com(0x80+0x02); //设置显示位置 write_date(0x30+weighttable[0]);

write_com(0x80+0x03); //设置显示位置 write_date('.');

write_com(0x80+0x04); //设置显示位置 write_date(0x30+weighttable[1]);

write_com(0x80+0x05); //设置显示位置 write_date(0x30+weighttable[2]);

write_com(0x80+0x06); //设置显示位置 write_date(0x30+weighttable[3]); write_com(0x0c); //不显示光标 }

////////////////////////////////////////////////////////////////////////////////////

///////////////////hx711程序////////////////////////////////////////////////// void Delay__hx711_us(void) {

_nop_(); _nop_(); }

ulong ReadCount(void) //增益128 {

ulong count; uchar i;

hx711_dout=1; Delay__hx711_us(); hx711_sck=0; count=0;

while(hx711_dout); for(i=0;i<24;i++) {

hx711_sck=1; count=count<<1; hx711_sck=0; if(hx711_dout) count++; }

hx711_sck=1;

Delay__hx711_us(); hx711_sck=0; return(count);

- 32 -

安徽建筑大学毕业设计(论文)

}

/////////////////////////////////////////////////////////////////// /////////////皮重,获得重量的程序//////////////////////////////////// void get_pizhong() //获取皮重,秤盘重量 {

uint j;

ulong hx711_dat; for(j=0;j<5;j++) delayms();

hx711_dat=ReadCount(); //HX711AD转换数据处理

temp=(uint)(hx711_dat/100); //缩放long数据为int型,方便处理 }

void get_weight() //获取被测物体重量 {

ulong hx711_data,a; uint get,aa;

hx711_data=ReadCount(); //HX711AD转换数据处理 get=(uint)(hx711_data/100);

if(get<(temp+4)) //判断是否有正向重量 {

while(1) {

weight=0;

weight_shuzhi(weight);//显示重量

hx711_data=ReadCount(); //HX711AD输出数据处理 get=(uint)(hx711_data/100); if(get>(temp+4))break; } }

a=ReadCount();

aa=(uint)(a/100)-temp;

weight=(uint)((float)aa/2.15+0.05);//重量转换函数,传感器型号不同此函数要适当修改 }

/////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////键盘扫描程序//////////////////////////////////// uchar keyscan() {

uint tem;

uchar key='a'; P3=0xfe; tem=P3;

- 33 -

安徽建筑大学毕业设计(论文)

tem=tem&0xf0; if(tem!=0xf0) {

delayms(10); P3=0xfe; tem=P3;

tem=tem&0xf0; if(tem!=0xf0) { tem=P3; switch(tem) {

case 0x7e: key='0'; break; case 0xbe: key='1'; break; case 0xde: key='2'; break; case 0xee: key='3'; break; }

while(tem!=0xf0) {

tem=P3;

tem=tem&0xf0; } } }

P3=0xfd; tem=P3;

tem=tem&0xf0; if(tem!=0xf0) {

delayms(10); P3=0xfd; tem=P3;

tem=tem&0xf0; if(tem!=0xf0) { tem=P3;

- 34 -

安徽建筑大学毕业设计(论文)

switch(tem) {

case 0x7d:key='4';break; case 0xbd:key='5';break; case 0xdd:key='6';break; case 0xed:key='7';break; }

while(tem!=0xf0) {

tem=P3;

tem=tem&0xf0; } }

}

P3=0xfb; tem=P3;

tem=tem&0xf0; if(temp!=0xf0) {

delayms(10); P3=0xfb; tem=P3;

tem=temp&0xf0; if(tem!=0xf0) { tem=P3; switch(tem) {

case 0x7b: key='8'; break; case 0xbb: key='9'; break; case 0xdb: key='.'; break; case 0xeb: key=' '; break; }

while(tem!=0xf0)

- 35 -

安徽建筑大学毕业设计(论文)

{

tem=P3;

tem=tem&0xf0; }

}

}

P3=0xf7; tem=P3;

tem=tem&0xf0; if(tem!=0xf0) {

delayms(10); P3=0xf7; tem=P3;

tem=tem&0xf0; if(tem!=0xf0) { tem=P3; switch(tem) {

case 0x77: key='.'; break; case 0xb7: key='w'; break; case 0xd7: key='p'; break; case 0xe7: key='m'; break; }

while(tem!=0xf0) {

tem=P3;

tem=tem&0xf0; } }

}

- 36 -

安徽建筑大学毕业设计(论文)

return key; }

void displayprice() //显示price {

static uchar bufferprice[4]={' ',' ',' '}; //把bufferprice定到能保存4个字符型数据,主要是为了在做清零时方便 static uchar buffermoney[4]; uint j;

static char ii;//这里不能用uchar型数据,静态数据必须加 button=keyscan();

if(button!='a') //如果有键按下 {

if(button=='m') {

money=atof(bufferprice)*weight/1000;//atof将字符串转换为浮点型

sprintf(buffermoney,\"%f\将浮点型转换为字符串 write_com(0x80+0x46); for(j=0;j<4;j++)

write_date(buffermoney[j]); }

else if(button=='p')//单价 {

for(j=0;j<3;j++) bufferprice[j]=' '; write_com(0x80+0x0c); ii=0; }

else if(button==' ') //清零 {

ii=ii-1; //因为会减到-1,所以i不能用uchar型 if(ii<=0)ii=0;

bufferprice[ii]=' '; } else {

bufferprice[ii]=button; ii++;

if(ii>=3)ii=3; }

- 37 -

安徽建筑大学毕业设计(论文)

}

write_com(0x80+0x0c); //price for(j=0;j<3;j++)

write_date(bufferprice[j]);//price }

//////////////////喇叭函数/////////////////// void delayus(uint z) {

while(z--) {

_nop_(); } }

void sound() {

uint j;

for(j=0;j<200;j++) {

delayus(200); spk=!spk; }

spk=0;

for(j=0;j<200;j++) {

delayms(1); //spk=!spk; } }

void main() {

get_pizhong(); init_1602(); displaywpm(); while(1) {

get_weight();//得到重量 if(weight>0)

{weight_shuzhi(weight);}//显示重量 else

{weight_shuzhi(0);}

displayprice(); //扫描键盘,并显示price if(weight>2000)sound(); }

- 38 -

安徽建筑大学毕业设计(论文)

附录3 实物图

- 39 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务