数字电子秤设计说明书(刘文斌)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
题目:数字电子秤设计
姓名:刘文斌
学号:0904705051
指导教师:段广云俞学兰
专业年级:机械设计及其自动化(机械电子工程方向)
09机电2班
所在学院和系:机械工程学院
完成日期:2012年6月29日
课程名称:机电一体化系统课程设计
目录
1绪论 (1)
1.1背景 (1)
1.2 设计要求 (2)
1.3 设计任务 (2)
2系统总体方案设计 (3)
2.1 方案设计 (3)
2.1.1电子秤的工作原理 (3)
2.1.2 设计思路 (3)
2.2芯片选择及简单介绍 (4)
3 系统硬件电路设计 (9)
3.1硬件电路设计框图 (9)
3.2 AT89C52最小系统电路 (9)
3.3传感器检测电路设计 (10)
3.3.1桥式电阻传感器及放大电路 (10)
3.3.2 ADC0832与A T89C52接口电路 (11)
3.4 显示电路设计 (12)
3.5键盘电路设计 (13)
3.6报警电路设计 (14)
4系统软件设计 (16)
4.1 系统主程序设计 (16)
4.2 A/D转换子程序设计 (17)
4.3显示子程序设计 (17)
4.4键盘扫描自程序设计 (18)
4.5系统仿真 (19)
5设计总结 (22)
参考文献 (23)
附录 (24)
1绪论
1.1背景
目前,台式电子秤在商业贸易中的使用已相当普遍,但存在较大的局限性:体积大、成本高、需要工频交流电源供应、携带不便、应用场所受到制约。
现有的便携秤为杆秤或以弹簧、拉伸变形来实现计量的弹簧秤,居民用户使用的基本是杆秤。
弹簧盘秤制造工艺要求较高,弹簧的疲劳问题无法彻底解决,一旦超过弹簧弹性限度,弹簧秤就会产生很大误差,以至损坏,影响到称重的准确性和可靠性,只是一种暂时的代用品,也被列入逐渐取消的行列。
微控制器技术、传感器技术的发展和计算机技术的广泛应用,电子产品的更新速度达到了日新月异的地步。
本系统在设计过程中,除了能实现系统的基本功能外,系统的微控制器部分选择了兼容性比较好的AT89系列单片机,在系统更新换代的时候,只需要增加很少的硬件电路,甚至仅仅删改系统控制程序就能够实现。
另外由于实际应用当中,称可以有一定量的过载,但不能超出要求的范围,为此我们还设计了过载提示和声光报警功能。
综上所述,本课题的主要设计思路是:利用桥式称重传感器(电阻应变式)采集因电阻变化产生的电压信号,经过电压放大电路放大,然后再经过模数转换器转换为数字信号,最后把数字信号送入单片机。
单片机经过相应的处理后,得出当前所称物品的重量及总额,然后再显示出来。
此外,还可通过键盘设定所称物品的价格。
主要技术指标为:称量范围0~5kg;分度值0.001kg。
这种高精度智能电子秤体积小、计量准确、携带方便,集质量称量功能与价格计算功能于一体,能够满足商业贸易和居民家庭的使用需求。
图1 数字电子秤基础实物模型
单片机以其功能强,体积小,功耗低,易开发等很多优势被广泛应用。
本次数字电子秤的设计就是需要通过选择合适的单片机来进行主控,再结合A/D转换、键盘、液晶显示、复位电路和蜂鸣器报警驱动电路的知识,同时在软件的设计过程中用到键盘扫描、液晶显示驱动、模数转换程序及汉字库的的设计,做到对我们所学数电、模电、单片机等知识的综合应用,最终实现所设计数字电子秤的各项功能,达到“巩固知识,培养技能,学而用之”的实践目的。
通过这次课程设计,不但要提高我们在工作中的学习能力、探究能力、应用能力和动手能力,还要历练我们不畏艰难、不懂便学、有漏必补的认真严谨的工作态度,强化我们的社会适应力和社会竞争力,为走向社会提前试水,完善自我。
本设计主要完成一个简单实用数字电子秤的硬件电路部分和软件部分的设计。
硬件部分包括数据采集、最小系统板、人机交互界面三大部分。
其中,数据采集部分由压力传感器和A/D 转换部分组成;人机界面部分为键盘输入、液晶显示。
软件部分应用单片机C 语言实现了本设计的全部控制功能。
本设计的数字电子秤要求能够显示商品的名称、价格、总量、总价等;能够自动完成商品的价格计算;能够储存几种简单商品的价格;能够具有超重提醒功能,一旦重量超出了自身重量的测量的范围,发出警报;同时对数字电子秤的测量范围要达到5KG,测量精度要求达到0.001。
1.2 设计要求
测量范围:0~5kg;
测量精度:0.001kg;
设有超限报警;键盘输入;数码显示。
1.3 设计任务
硬件设计:元器件选择、电路原理图绘制,
软件设计:编制程序完成硬件电路的仿真。
2系统总体方案设计
2.1 方案设计
2.1.1电子秤的工作原理
当被称物体放置在秤体的秤台上时,其重量便通过秤体传递到称重传感器,传感
器随之产生力-电效应,将物体的重量转换成与被称物体重量成一定函数关系(一般成
正比关系)的电信号(电压或电流等)。
此信号由放大电路进行放大、经滤波后再由模/
数(A/D)器进行转换,数字信号再送到微处器的CPU处理,CPU不断扫描键盘和各种
功能开关,根据键盘输入内容和各种功能开关的状态进行必要的判断、分析、由仪表的
软件来控制各种运算。
运算结果送到内存贮器,需要显示时,CPU发出指令,从内存贮
器中读出送到显示器显示,或送打印机打印。
一般地信号的放大、滤波、A/D转换以及
信号各种运算处理都在仪表中完成。
2.1.2 设计思路
本课程设计的电子秤以单片机为主要部件,利用半臂电桥替代压力传感器的测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(kg)即成为一台原始电子秤。
其中测量电路中最主要的元器件就是电阻应变式传感器。
电阻应变式传感器是传感器中应用最多的一种,本设计采用半桥测量电路,使系统产生的误差更小,输出的数据更精确。
而放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的要求。
模数转换的作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,最后由显示电路显示出测量结果。
本系统以单片机为主控芯片,外围附以称重电路、显示电路、报警电路、键盘电路
等构成智能称重系统电路板,从而实现自动称重系统的各种控制功能。
可以说,此设计
所完成的电子秤很大程度上满足了应用需求。
按照本设计功能的要求,系统由6个部分组成:控制器部分、测量部分、报警部分、数据显示部分、键盘部分、和电路电源部分,系统设计总体方案框图如下图所示。
图2 系统设计思路框图
2.2芯片选择及简单介绍
(1)控制器
单片机采用MCS-51系列单片机,由ATMEL公司生产的AT89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机以基本机型8051为内核,系统兼容性强,作为首选控制器。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
兼容MCS51指令系统· 8k可反复擦写(>1000次)Flash ROM
· 32个双向I/O口· 256x8bit内部RAM
· 3个16位可编程定时/计数器中断· 时钟频率0-24MHz
· 2个串行中断· 可编程UART串行通道
· 2个外部中断源· 共6个中断源
· 2个读写中断口线· 3级加密位
· 低功耗空闲和掉电模式· 软件设置睡眠和唤醒功能
图2 AT89C52芯片
(2)模数转换
本系统采用8位串行A/D转换器ADC0832
首先考虑用常用的模数转换芯片adc0809,由于本设计只需采集一路数据,adc0809为并行的8路数据采集芯片,且接线较复杂,因此考虑采用串行的AD转换芯片adc0832完成设计。
1.功能特点
ADC0832是NS(National Semiconductor)公司生产的串行接口8位A/D转换器,通过三线接口与单片机连接,功耗低,性能价格比较高,适宜在袖珍式的智能仪器仪表中使用。
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
芯片具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件连接和处理器控制变得更加方便。
通过DI 数据输入端,可以轻易的实现通道功能的选择。
其主要特点如下:
●8位分辨率,逐次逼近型,基准电压为5V;
●5V单电源供电;
●输入模拟信号电压范围为0~5V;
●输入和输出电平与TTL和CMOS兼容;
●在250KHZ时钟频率时,转换时间为32us;
●具有两个可供选择的模拟输入通道;
●功耗低,15mW。
2.外部引脚及其说明
ADC0832有DIP和SOIC两种封装,DIP封装的ADC0832引脚排列如图6.21所示。
各引脚说明如下:
●CS——片选端,低电平有效。
●CH0,CH1——两路模拟信号输入端。
●DI——两路模拟输入选择输入端。
●DO——模数转换结果串行输出端。
●CLK——串行时钟输入端。
●Vcc/REF——正电源端和基准电压输入端。
●GND——电源地。
3.单片机对ADC0832 的控制原理
一般情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO 端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO 和DI 并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。
当要进行A/D转换时,须先将CS端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 提供时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
图3 ADC0832芯片图
(3)显示器件
本系统采用AMPIRE128X64液晶屏器件,数据显示是电子秤的一项重要功能,是人机交换的主要组成部分,它可以将测量电路测得的数据经过微处理器处理后直观的显示出来。
数据显示部分可以有以下两种方案供选择。
的组成有以下两种方案可供选择:一是LED数码管显示,二是LCD液晶显示两种选择.LCD液晶显示器是一种极低功耗显示器,从电子表到计算器,从袖珍式仪表到便携式微型计算机以及一些文字处理机都广泛采用了液晶显示器,本系统采用LCD显示。
Proteus里面的12864就是我使用的12864屏,型号为:AMPIRE128X64,管脚一共18个。
CS1左半屏片选端,CS2右半屏片选端;VCC、GND就是VCC、GND,没啥好说的;V0液晶显示驱动电压,在网上找的仿真实例中有的这个脚就悬空,我是通过一个电位器接到VCC;RS数据指令选择信号,H为数据,L为指令,有的资料上也叫D/I,我估计是DATA和INSTRUCTIONS这两个单词的缩写;R/W读写选择信号,H为读,L为写,这肯定是READ和WRITE的缩写。
E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E 为H,DDRAM数据读到DB7-DB0,如果只写不读的话可
以接地处理。
DB0-DB7数据传输端口。
RST复位信号,不过还没弄明白是怎么回事,参考一些资料后接VCC处理。
-VOUT估计和V0差不多,液晶显示驱动电压。
图4 AMPIRE128X64液晶屏
(4)键盘器件
本系统采用KEYPAD-SMALLCALC4x4矩阵键盘。
由于电子秤需要设置单价(十个数字键),还具有确认、删除等功能,总共需设置16个键(包括一个复位键)。
本设计采用矩阵式键盘:矩阵式键盘的特点是把检测线分成两组,一组为行线,一组列线,按键放在行线和列线的交叉点上。
16个按键使用4×4矩阵式键盘。
图5 KEYPAD-SMALLCALC4x4矩阵键盘
3 系统硬件电路设计
3.1硬件电路设计框图
根据设计要求与设计思路,此电路由一块AT89C52、矩阵式键盘输入电路、时钟电路、复位电路、LCD显示段码驱动电路、LCD显示位码驱动电路、蜂鸣器及LED声光报警电路、AD0832模块、电阻应变式电桥模拟压力传感器及其放大电路模块组成。
图6 硬件电路设计框图
3.2AT89C52最小系统电路
AT89C52单片机的最小系统由时钟电路、复位电路、电源电路及单片机构成。
单片机的时钟信号用来提供单片机片内各种操作的时间基准,复位操作则使单片机的片内电路初始化,使单片机从一种确定的初态开始运行。
单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。
上电复位要求接通电源后,自动实现复位操作。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。
图7 单片机最小系统电路
3.3传感器检测电路设计
3.3.1桥式电阻传感器及放大电路
(1)传感器的选择:
传感器量程的选择可依据秤的最大称量值。
综合考虑,本设计采用电阻应变桥式传感器(半壁单桥),其最大量程为5 Kg,称重传感器由R8~R11各为 1千欧和一个电位器组合而成。
输出电压由下式计算出:
(2)放大电路选择:
采用反向放大器电路如上图所示:
图8 桥式电阻传感器及放大电路
3.3.2 ADC0832与AT89C52接口电路
ADC0832为8位串行A/D转换器。
本系统电路设计中外围传感放大电路的输出端直接与ADC0832的输入通道CH0相接,模数转换芯片的片选段(CS—片选端,低电平有效)与AT89C52的P3.5相接,DI—两路模拟输入选择输入端与DO—模数转换结果串行输出端相连接,并于AT89C52的P3.7相接,CLK—串行时钟输入端与该单片机的P3.6引脚相连接。
ADC0832转换芯片与AT89C52单片机接口电路如图9所示:
图9 ADC0832与AT89C52接口电路
3.4 显示电路设计
该系统采用LCD显示模式,采用AMPIRE128X64液晶屏显示器件,LCD显示器件与AT89C52的接口电路如图10所示。
AMPIRE128X64液晶屏的输入引脚DB0-DB7与AT89C52的P1.0-P1.7引脚通过外接上拉电阻相连,CS1左半屏片选端,CS2右半屏片选端。
V0液晶显示驱动电压,DB0-DB7数据传输端口。
RST复位信号。
RS数据指令选择信号,H为数据,L为指令,有的资料上也叫D/I,我估计是DATA和INSTRUCTIONS这两个单词的缩写;R/W读写选择信号,H为读,L为写,这肯定是READ和WRITE的缩写。
E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E 为H。
图10 LCD与AT89C52接口电路
3.5键盘电路设计
本系统采用KEYPAD-SMALLCALC4x4矩阵键盘。
键盘采用矩阵式键盘并采用中断工作方式。
键盘为4 X 4键盘,包括0、1、2、3、4、5、6、7、8、9、十个数字及符号键。
采用中断工作方式提高了CPU的利用效率,没键按下时没有中断请求,有键按下时,向CPU提出中断请求,CPU响应后执行中断服务程序,在中断程序中才对键盘进行扫描。
本设计中采用4*4矩阵是键盘,又称行列式键盘。
它有4条I/O线作为行线,用4条作为列线。
用AT89C51的并行口P1接4×4矩阵键盘,行线接P1.0-P1.3口,列线接P1.4-P1.7口。
矩阵式键盘的工作原理相见参考文献[5]。
图11就是键盘电路与AT89C52单片机接口电路图。
图11 矩阵式键盘接口电路
3.6报警电路设计
智能仪器一般都具有报警和通讯功能,报警主要用于系统运行出错、当测量的数据超过仪表量程或者是超过用户设置的上下限时为提醒用户而设置。
在本系统中,设置报警的目的就是在超出电子秤计数范围时,发出声光报警信号,提示用户。
超限报警电路是由单片机的I/O口来控制的,当称重物体重量超过系统设计所允许的范围时报警电路就发出声光报警信号作为警告提示。
本系统中物品重量通过调节半壁电桥一端的电位器使得电桥失去平衡而引起输出电压的变化来反映,而单价则通过键盘输入,当总额(重量x单价)数目大于256元时,即就是当重量调到最大值5kg时单价不能超过52元,否则报警电路发出声光报警作为提示,通过程序使单片机的I/O值为低电平,从而三极管导通,使蜂鸣器BUZZER发出报警声,同时使报警灯D1发光。
图12 报警电路与单片机接口电路
4系统软件设计
4.1 系统主程序设计
系统上电后,初始化程序将RAM 的30H~5FH内存单元清零,P3.1引脚置成高电平,防止误报警。
主程序模块主要完成编程芯片的初始化及按需要调用各模块(子程序),在系统初始化过程中,将系统设置成5Kg量程,并写5Kg量程标志。
设计流程图如图13所示。
整个设计中采用由下向上的设计思路。
主程序中主要完成对AMPIRE128X64、ADC0832、及键盘扫描程序的调用。
在编写程序的过程中,各变量统一采用全局变量方式命名,同时考虑到电子秤对精度的要求,本设计中的价格及总量相关的变量全部采用浮点数。
主程序流程图如图13所示。
图13 系统主程序流程图
4.2 A/D 转换子程序设计
单片机通过拉低CS 、拉高CLK 来启动ADC0832进行外部压力传感转换后的电压信号进行采样,每产生8个CLK 脉冲,DATA 获得一位完整的8bit 数据,此时单片机发送中断请求,拉高CS ,拉低CLK,并将数据DAT 返回。
ADC0832采样程序的程序流程图如图14所示。
图14 A/D 转换启动及数据读取程序流程图
4.3显示子程序设计
显示子程序主要是来判断是否需要显示,以及如何去显示,也是十分重要的程序之一。
而显示子程序是其他程序所需要调用的程序之一,因此,显示子程序的设计就显得举足轻重,设计的时候也要十分的小心和卖力。
设计显示子程序的流程图如下图15所示: AMPIRE128X64液晶显示驱动程序流程图如图15所示。
N
图15 液晶显示驱动程序流程图
4.4键盘扫描自程序设计
如图16所示:键盘电路设计成4X4矩阵式,由键盘编码方式可以得出0,1,2,3,4,5,6,7,8,9,各键对应键值:0D8H,0D0H,0D1H,0D2H,0C8H,0C9H,0CAH,0C0H,0C1H, 0C2H , 0C3H,0CBH,0D3H,0DBH,0DAH,0D9H 。
在程序中可以先判断按键编码,然后根据编码将键盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。
本设计中采用了4*4矩阵式键盘,单片机定时进行查询。
首先单片机发送行扫描代码,然后进行列扫描,当发现某一列出现了低电平时,即返回相应的键盘值。
若没有发现则说明当前行没有键按下,行扫描右移一位,继续执行列扫描。
单片机根据相应的键值,即可确定被按下的键。
4*4键盘程序如图16所示。
N
Y
图16 键盘程序流程图
4.5系统仿真
本系统采用硬件电路仿真软件Proteus与程序调试软件Keil uVision4对系统设计的数字电子秤进行仿真。
手动调节电桥传感器桥臂一端的电位器当LCD重量显示值为3.488kg时,通过矩阵式键盘输入单价值为15元,按下等号键,总价额显示计算结果为52.33元,仿真结果显示如图16所示。
在protues的ISIS 7.6sp4软件环境下画出电路原理图,接下来就是将设计的程序在Keil C51 μVision3开发集成环境上编译成机器语言,进入Proteus的ISIS,鼠标左键点击菜单“Debug”,选中“use romote debuger monitor”,便可实现KeilC与Proteus连接调试。
首先在
Proteus中双击单片机AT89C51,将KeilC下编程生成的.HEX文件导入到A T89C51中,可在Proteus中单击全速仿真运行按钮,进行现象的查看,能清楚地观察到芯片上每一个引脚的电平变化,红色代表高电平,蓝色代表低电平。
图17 仿真电路
5设计总结
随着集成电路和计算机技术的迅速发展,使电子仪器的整体水平发生巨大变化,传统的仪器逐步的被智能仪器所取代。
智能仪器的核心部件是单片机,因其极高的性价比得到广泛的应用与发展,从而加快了智能仪器的发展。
而传感器作为测控系统中对象信息的入口,越来越受到人们的关注。
本次设计中的半桥电子秤就是在以上仪器的基础上设计而成的。
因此,只有充分了解有关智能仪器、单片机、传感器以及各部分之间的关系才能达到要求。
首先是传感器的精密度,它将直接影响电子秤的称重准确度。
课设时由于传感器发出的信号不是很稳定,所以称重时误差很大。
如果使用精密度较高的传感器,效果会好的多。
其次是数据采集处理阶段,此阶段是对传感器发出的信号进行量化、采集,主要分为信号放大、采集,然后进行A/D转换。
该阶段需注意的地方是对传感器输出的信号进行放大时,应选取合适的运算放大电路。
最好是预先计算好应放大的倍数,以便选取。
还有就是进行数据处理时,选取适当的数据转换系数,使输出满足量程要求。
这次课程设计是对前面所学知识非常系统全面的一次检验。
通过这次课程设计与仿真,让我更明确的了解了一些芯片的用途功能,也熟练了对它们的运用。
在这个设计的过程中,我需要不断地思考,不断地请教,不断地寻找资料以借鉴,不断的用对知识的深入掌握去解决设计中存在的一些问题和调试时出现的一些故障。
虽然说这样的设计很难很烦很累人,但是确实是充实的,是让人感到有意义的。
这次课程设计,不但让我了解了一个数字电子秤,更让我收获了专业知识以外的东西,那就是学会了坚信、坚持,同时也磨砺了我的意志和耐心。
真的,作为一个本来对这个专业不是很感兴趣的学生,让我收获了一份从来没有过的成就感。
虽然到现在我对这个设计的部分原理还是不能用很专业的语言讲述出来,但是当我最初做成功这个设计的时候,我有一种说不出的激动,我写下一句话:“人很怪,上天给予每个人的都是公平的,没有谁没能力去做事,只是在于那个人愿不愿意去做,敢不敢去做,能不能坚持去做!”是的,这就是我这次课程设计之后最大的收获!
虽然对这个专业依旧不是很感兴趣,但是我还是想通过这份设计报告来建议老师,希望以后能多搞一些像这样很实际的实践课程,我们作为学生,的确需要好的成绩,但更需要用这种对知识非常全面统一的检验来考察自己,证明自己,坚持自己。
参考文献
[1]张毅刚.MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社.2003:
[2]李群芳.单片机微型计算机与接口技术[M].电子工业出版社.
[3]全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品汇编[J].北京理工大学出版社.2005.11
[4]杨欣.实例解读51单片机完全学习与应用[M].北京:电子工业出版社.2011.4
[5]陆彬.21天学通51单片机开发[M].北京:电子工业出版社.2011.9
附录
附录A 系统总电路图
附录B :主程序C代码
#include<reg52.h>
#include<LCD驱动程序.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="0123456789"; //数字
uchar code *weight="Weight: . Kg "; //要显示的第一行内容
uchar code *price="Price:";
uchar code *mone="Money:";
uchar code *runout="Runout";
uchar n,k,s,bb=0,data1,dip=0,dap=0; /*n用来显示总输入,k识别输入字符性质,dap识别显示方式,dip为小数识别,bb小数字位数识别*/
double sum,money,date,date1,date2; /*sum为重量,money为总金额, date为输入单价, date1单价整数*/
uchar str_TME[]={0,0,0,0,0}; //重量显示
uchar money1[]={0,0,0,0,0,0}; //金额显示
void jianpan() ; //键盘函数申明
sbit speak=P3^1; //报警
void main() //主程序
{ uchar temp;
lcd_init();
clear_screen(0);
lcd_display_hanzi(1,0,0,0);
lcd_display_hanzi(1,0,1,1);
lcd_display_shuzi(1,0,4,10);
lcd_display_hanzi(1,1,0,2);
lcd_display_hanzi(1,1,1,3);
lcd_display_shuzi(1,1,4,10);
lcd_display_hanzi(1,2,0,3);
lcd_display_hanzi(1,2,1,4);
lcd_display_shuzi(1,2,4,10);
k=0;
while(1)
{ ad();//模数转换
changs(); //重量数据处理
display();//重量数据显示
P1=0xf0; //按键判断
temp=P1;
temp=temp&0xf0;。