当前位置:首页 >> 机械/仪表 >>

基于单片机的简易电子秤的设计


电子与信息工程学院

本 科 毕 业 论 文

论文题目 学生姓名 学 专 班 号 业 级

简易电子秤的设计 周 盼 073521029 电气工程及其自动化 073521 邓方雄

指导教师

2012 年 5 月




>




随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求, 为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化用在了电 子秤系统中。此电子秤很大程度上满足了应用需求,具有很大的应用前景。 本文以单片机 MCS-51 系列的 AT89C51 集成电路为信息处理核心,提出电子秤的 硬件设计方案,详细的分析了各单元的硬件电路,给出了仪器电路设计和软件流程, 及相关电路图、原理图,最后介绍了系统的硬件调试和软件调试。 关 键 词:电子秤;AT89C51;硬件设计;电路图

I

湖北科技学院学士学位论文

ABSTRACT
With the application of micro-electronics technology, traditional weighing tools used in market has been not satisfaction with hunman requirements already. In order to change the traditional weighing tools problems, in this design, I apply intelligent and automation to electronic scales system. This electronic scale is largely to meet the application requirements, and has great application prospects. This article take SCM MCS-51 series AT89C51 integrated circuit as information processing core,Put forward the scheme of hardware design of electronic scales,a detailed analysis of the various units of the hardware circuit, gives the instrument circuit design and software flow, and the related circuit diagram, schematic diagram, finally introduced the system of hardware debugging and software debugging. KEY WORDS: Electronic scale; AT89C51; Hardware design; Circuit diagram

II









1 绪论 ...................................................................................................................................... 1 1.1 选题的背景和意义 ....................................................................................................... 1 1.2 研究现状 ....................................................................................................................... 1 1.3 论文主要研究内容 ....................................................................................................... 1 2 总体方案设计 ...................................................................................................................... 2 2.1 电子秤整体方案 ........................................................................................................... 2 2.2 主控制器的方案 ........................................................................................................... 2 2.3 称重传感器的方案 ....................................................................................................... 3 2.4 放大器的方案 ............................................................................................................... 4 2.5 模数转换器的方案 ....................................................................................................... 5 2.6 键盘部分的方案 ........................................................................................................... 6 2.7 显示部分的方案 ........................................................................................................... 6 2.8 过载报警部分的方案 ................................................................................................... 7 3 电子秤的硬件设计 .............................................................................................................. 8 3.1 系统设计的总体思路 ................................................................................................... 8 3.2 单片机 AT89C51 最小系统 ......................................................................................... 8 3.3 放大电路 ....................................................................................................................... 9 3.4 模数转换器与单片机接口电路 ................................................................................. 10 3.5 显示电路与单片机接口电路 ..................................................................................... 11 3.6 键盘电路与单片机接口电路 ..................................................................................... 12 3.7 报警电路 ..................................................................................................................... 13 3.8 电源电路 ..................................................................................................................... 13 4 电子秤系统的软件设计 .................................................................................................... 15 4.1 主程序的设计 ............................................................................................................. 16 4.2 子程序的设计 ............................................................................................................. 16 4.2.1 模数转换子程序的设计 ...................................................................................... 17 4.2.2 键盘扫描子程序的设计 ...................................................................................... 18 4.2.3 显示子程序的设计 .............................................................................................. 19 4.2.4 价格计算子程序的设计 ...................................................................................... 20 4.2.5 报警子程序的设计 .............................................................................................. 21 5 系统调试 ............................................................................................................................ 22

III

湖北科技学院学士学位论文

5.1 软件调试 ..................................................................................................................... 22 5.2 硬件调试 ..................................................................................................................... 23 6 结论与展望 ........................................................................................................................ 24 6.1 论文的特点 ................................................................................................................. 24 6.2 研究展望 ..................................................................................................................... 24 致 附 附 附 附 谢 .................................................................................................................................... 25 录 1 系统原理图 ............................................................................................................ 27 录 2 仿真图 .................................................................................................................... 28 录 3 实物图 .................................................................................................................... 29 录 4 程序清单 ................................................................................................................ 30 即可) :Equation Chapter 1 Section 1 参考文献 ................................................................................................................................ 26

IV

1

绪论

1 绪论
1.1 选题的背景和意义
电子秤是日常生活中常用的称重器材,广泛应用于超市、大中型商场、物流配送 中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比 传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操 作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。电子秤 的设计首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。经放大 后的模拟电压信号经 A/D 转换电路转换成数字量被送入到主控微处理器中,再经过单 片机控制译码显示器,从而显示出被测物体的重量。

1.2 研究现状
电子秤不仅要向高精度、高可靠方向发展,而且更需向多种功能的方向发展。据悉, 目前电子秤的附加功能主要有以下几种:1.电子秤附加了处理机构计算机信息补偿装置, 可以进行自诊断、自校正和多种补偿计算和处理。2.具有皮重、净重显示等特种功能。 电子秤有些已具备了动物称量模式,即通过进行算术平均、积分处理和自动调零等方法, 消除上述的误差。 3.附加特殊的数据处理功能。 目前的电子秤有附加多种计算和数据处 理功能,以满足多种使用的要求。 今后,随着电子高科技的飞速发展,电子秤技术的发展定 将日新月异。同时,功能更加齐全的高精度、高智能的先进电子秤将会不断问世,其应用 范围也会更加拓宽。

1.3 论文主要研究内容
本文主要是设计的内容是简易电子秤,它用单片机作为处理核心,信号由压力传 感器感受后经放大器放大和模数转换后输入到单片机处理,同时该电子秤具有 LCD 显 示和键盘输入。 该电子秤具体实现的功能是能够测量一定质量内物体的质量,能够利用键盘输入 价格,具有清零,可以计算总价,并能通过 LCD 直接显示出来,超过所测重量时能够 报警。

1

湖北科技学院学士学位论文

2 总体方案设计
2.1 电子秤整体方案
电子秤设计的整体方案是:传感器采集到因压力变化产生的电信号,但是一般这 样产生的电信号很小,需要利用放大电路将其放大,放大的电信号通过模数转换器转 换为数字信号后送入到微处理器中处理,微处理器处理后输出信号控制显示器显示出 来。同时还需要键盘对物品单价等信息输到微处理器内部,还需要有过载报警装置。 其整体设计方案 如图 2-1 所示:
放大电路 A/D 转换器 报警电路

传感器

主控制器

键盘输入

LCD 显示 图 2-1 电子秤整体设计方案图

2.2 主控制器的方案
主控制器是电子秤的核心部分,它需要接受转换后的传感器信号,同时也能扫描 接受到键盘的输入信号,计算价格后控制显示器的输出,当超过称重量量程时还要控 制报警装置报警。主控制器的选择有两个如下两个方案。 方案一:单片机作为主控制器[1] 单片机控作为主控制器其优点有:可以做成专用的控制系统,程序被固化,可靠 性较高,操作简单,易于维护,并且成本低。在比较小型的控制系统中,最适合的应 是单片机作为控制核心。但在大型的控制系统中,控制系统各方面性能要求很高,或 者工作环境很恶劣,有很强的电噪声、电磁干扰、机械振动、极端温度和湿度很大的 环境中,如果利用单片机作为控制系统,其性能会受到相应的影响。 方案二:PLC 作为主控制器 PLC 作为主控制器应用广泛,它具有接线简单,通用性好,编程简单,使用方便, 可连接为控制网络系统,易于安装,便于维护,其主要应用在准确、精密、快速、稳 定和多点控制的系统中,但是其价格昂贵。 本文设计的简易电子秤精度不需要很高,它需要控制器及程序被固化,并且工作
2

2

总体方案设计

环境适宜。单片机作为处理器完全能够满足要求,并且单片机价格低廉,体积小,最 终我选择了市面上常见的 51 系列的单片机 AT89C51 作为主控制器。

2.3 称重传感器的方案
称重传感器按转换方法分为光电式、液压式、电磁力式、电容式、磁极变形式、 振动式、陀螺仪式、电阻应变式等 8 类,我选择应用最广泛的电阻应变式传感器。 电阻应变式称重传感器是利用电阻应变片变形时其电阻也随之改变的原理工作 的, 根据传感器理论可知,设长为 L、截面积为 S、电阻率为ρ 的电阻丝,已知其阻 值为: (2-1) S 当电阻丝两端有机械应力 F 时,ρ 、L、S 都会发生变化,从而导致电阻发生变化。 这种应变片式传感器是基于材料的电阻应变效应,电阻应变片即可单独作为传感 器使用,又能作为敏感元件结合弹性元件构成力学量传感器。电阻应变片把机械应变 信号转换为△R/R 后,由于应变量及相应电阻变化一般都很微小,难以直接精确测量, 且不便处理。因此,要采用转换电路把应变片的△R/R 变化转换成电压或电流变化。 其转换电路常用测量电桥[4]。如图 2-2 所示为常见的直流供电的平衡差动测量电桥:
R?

?L

R1-▲R1

R2+▲R2

Eout

R4+▲R4

R3-▲R3

Ein

图 2-2 直流供电的平衡差动测量电桥

图中,错误!未找到引用源。为供桥电源电压,当初始有错误!未找到引用源。 时,则电桥输出电压或电流为零,这时电桥处于平衡状态。其测量原理:用应变片测 量时,将其粘贴在弹性体上。当弹性体受力变形时,应变片的敏感栅也随同变形,其 电阻值发生相应变化,通过转换电路转换为电压或电流的变化。由于内部线路采用惠 更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式给出:
Eout ? R 2 ? R 4 ? ?R1 ?R2 ?R3 ?R4 ? ?? ? ? ? ? ? Ein ( R 2 ? R 4) ? R1 R2 R3 R4 ?

(2-2)

3

湖北科技学院学士学位论文

本文的目的是设计一简易电子秤,最大称重约为 2.5 千克,重量误差不大于±0.01 千克;考虑到与其相配置的各种电路的设计的难易程度和设计性价比,最终选择了 CZAF-605[8]电阻应变式称重传感器,其称重规模为 5kg。

2.4 放大器的方案
压力传感器感受重力转换后输出的信号一般电平较低;经由电桥等电路变换后的 信号亦难以直接用来显示、记录、控制或进行模数转换。为此,测量电路中需要模拟 放大环节。这一环节目前主要依靠由集成运算放大器的基本元件构成具有各种特性的 放大器来完成。 所采用的传感器输出电压振幅范围 0~10mV。而模数转换的输入电压要求为 0~ 2V,因此放大环节至少 200 倍的增益,此处我们需要放大 500 倍。根据本设计的实际 情况增列出了两种方案。 方案一:由高精度低漂移运算放大器构成差动放大器。 差动放大器具有高输入阻抗,增益高的特点,可以利用普通运放 ( 如 OP07) 做 成一个差动放大器,其内部电路图如图 2-3 所示。

图 2-3 差动放大器内部电路

电阻 R1、R2 电容 C1、C2、C3、C4 用于滤除前级的噪声,C1、C2 为普通小电 容,可以滤除高频干扰,C3、C4 为大的电解电容,主要用于滤除低频噪声。 优点:输入级加入射随放大器,增大了输入阻抗,中间级为差动放大电路,滑动 变阻器 R6 可以调节输出零点,最后一级可以用于微调放大倍数,使输出满足满量程 要求。输出级为反向放大器,所以输出电阻不是很大,比较符合应用要求。 缺点:此电路要求 R3、R4 相等,误差将会影响输出精度,难度较大。实际测量, 每一级运放都会引入较大噪声,对精度影响较大。 方案二:采用专用仪表放大器[12],如:INA128,INA129 等。 此类芯片内部采用差动输入,共模抑制比高,差模输入阻抗大,增益高,精度也 非常好,且外部接口简单。
4

2

总体方案设计

以 INA128 为例,引脚图如 3-3 所示:
7 1 + V R G R 6 G O U T IN5 IN+ REF -

图 2-4

INA128

INA128 引脚图

放大器增益 G=1+50k/Rg,通过改变 Rg 的大小来改变放大器的增益。因为放大的 倍数是 500,所以大致选用 100 欧姆的电阻就可以了。 基于以上分析,采用专用仪表放大器能跟好的满足要求,我最终选择了 INA128。

2.5 模数转换器的方案
称重传感器采集的压力信号是模拟量,单片机系统内部运算时用的都是数字量, 即 0 和 1, 因此对于单片机而言我们无法直接操作模拟量, 必须将模拟量转换为数字量。 这就需要在单片机前段加上模数转换器,模数转换器就是将输入的模拟信号转换成数 字信号。而模数转换器的数字信号提供给微处理器处理。 现在模数转换的基本方法有十几种,常用的有计数法、逐次比较法、双斜积分法 和并行转换法。由于逐次比较法模数转换具有速度快、分辨率高等特点,而且采用这 种方法的 ADC 芯片成本较低,所以我们选用逐次比较型模数转换集成芯片 ADC0832, ADC0832 是美国国家半导体公司生产的一种 8 位分辨率、双通道模数转换芯片,其 输入输出电平与 TTL/CMOS 相兼容,电源供电时输入电压在 0~5V 之间,工作频 率为 250KHZ 转换时间为 32μS,一般功耗仅为 15mW;由于它体积小,兼容性, 性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。图 3-4 为 AD0832 双列直插式封装引脚图。
8 1 VCC C 7 S CLK 6 CH0 D O 5 CH1 D I G N

V

图 2-5

ADC0832

ADC0832 引脚图

D

4

3

2

4

3

2

8

5

湖北科技学院学士学位论文

2.6 键盘部分的方案
键盘部分有两个可行的方案,第一是采用 3×4 的矩阵键盘结构的键盘接口电路, 第二是采用 4×4 的矩阵键盘结构的键盘接口电路[15]。 由于电子秤需要设置单价(十个数字键) ,还具有确认、清零等功能,总共需设置 13 个键(包括一个复位键) ,其中复位可以单独拿出来。所以我们采用 3×4 的矩阵键 盘结构的键盘接口电路。3×4 矩阵式键盘的特点是把检测线分成两组,一组为行线, 一组列线,按键放在行线和列线的交叉点上。图 2-6 给出了一个 3×4 的矩阵键盘结构 的键盘接口电路,图中的每一个按键都通过不同的行线和列线与主机相连这。3×4 矩 阵式键盘共可以安装 12 个键,但只需要 7 条测试线。

图 2-6 3×4 矩阵式键盘图

2.7 显示部分的方案
数据显示是电子秤的一项重要功能,是人机交换的主要组成部分,它可以将测量 电路测得的数据经过微处理器处理后直观的显示出来。数据显示部分可以有以下两种 方案供选择:一是 LED 数码管显示,二是 LCD 液晶。LED 显示每一个数码管只能显 示一个数字,电子秤系统需要许多数码管,会使线路变得复杂化。LCD 液晶显示器是 一种极低功耗显示器,其能够多行显示,并且能够显示汉字或英文字母,应用于电子 秤中能够更人性化,更容易操作。所以最终选择了两行显示的 LCD1602,LCD1602 的 引脚图如 2-7 所示。

图 2-7
6

液晶显示器 LCD1602

2

总体方案设计

2.8 过载报警部分的方案
智能仪器一般都具有报警和通讯功能,报警主要用于系统运行出错、当测量的数 据超过仪表量程或者是超过用户设置的上下限时为提醒用户而设置。在本系统中,设 置报警的目的就是在超出电子秤测量范围时,发出声光报警信号,提示用户,防止损 坏仪器。 超限报警电路是由单片机的 I/O 口来控制的,当称重物体重量超过系统设计所允 许的重量时,通过程序使单片机的 I/O 值为高电平,从而三极管导通,使蜂鸣器 SPEAKER 发出报警声,同时使二极管发光。

Equation Chapter (Next) Section 1

7

湖北科技学院学士学位论文

3 电子秤的硬件设计
3.1 系统设计的总体思路
物体放在压力传感器上,传感器发生形变,阻抗就发生变化,产生一个变化的模 拟信号,该信号需要有放大电路放大后输入到模数转换器,转换为数字信号后输入到 微处理器处理。微处理器根据键盘命令以及程序将结果输出到显示器,直到显示结果。 如下图所示 3-1 所示。
键 盘

压 力 传 感 器

放 大 电 路

模 数 转 换

微 处 理 器

x 0.8

=

LCD 显示

x
图 3-1 硬件设计的总体思路

=

0.8

3.2 单片机 AT89C51 最小系统
AT89C51 是一种带 4K 字节 FLASH 存储器的低电压、高性能 CMOS 8 位微处 理器,128 字节 RAM,32 个双向 I/O 口线,两个 16 位定时器/计数器,5 个中断源, 一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51 可降至 0Hz 的静态 x = 逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止 CPU 的工作,但允许 0.8 RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存 RAM 中的内容, 但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。 x = AT89C51 的 P0 口为一个 8 位漏级开路双向 I/O 口,P1、P2 和 P3 口是一个内部提供上 0.8 拉电阻的 8 位双向 I/O 口,同时 P3 口还作为 AT89C51 的一些特殊功能口[16]。

x 0.8

=

x
8

=

0.8

3
C 1

电子秤的硬件设计

2

2

p

F

2

12MHZ

1

9

3

X

1

P0.0

3

P0.1

3

C

2

1

1

8

P0.2

3

X

2

P0.3

3

2

2

p

F

P0.4

3

P0.5

3

C

3

9

P0.6

3

RESET

2

2

u

f

P0.7

2

2

9

P2.0

2

PSEN

S13

1

K

3

0

P2.1

2

ALE/P

3

1

P2.2

2

VCC

VCC

EA/VP

1

2

P2.3

2

INT0

1

3

P2.4

2

INT1

P2.5

2

1

P2.6

2

P1.0

2

3

P1.1

P2.7

1

P1.2

4

RXD

1

P1.3

5

TXD

1

P1.4

T

6

0

1

P1.5

T

7

1

1

P1.6

W

8

R

1

P1.7

R

图 3-2 AT89C52 最小系统的设计

AT89C51 是片内有 ROM/EPROM 的单片机,其最小系统简单、可靠,仅由时钟电 路、复位电路、电源电路构成。 1、时钟电路 AT89C51 虽然有内部振荡电路,但要形成时钟,必须外部附加电路。AT89C51 单 片机的时钟产生方法有两种。内部时钟方式和外部时钟方式。 本设计采用最常用的内部时钟方式,即用外接晶体和电容组成的并联谐振回路。 振荡晶体可在 1.2MHZ 到 12MHZ 之间选择。 电容取值对振荡频率输出的稳定性、 大小、 振荡电路起振速度有少许影响,可在 20pF 到 100pF 之间取值。所以本设计中,振荡晶 体选择 12MHZ,电容选择 22pF[11]。 2、复位电路 AT89C51 的复位电路是由外部的复位电路来实现的。只需给复位引脚 RST 加上大 于 2 个机器周期的高电平就可使其复位。复位电路通常采用上电自动复位和按键复位 两种方式。本设计就是用的按键手动复位。其中电平复位是通过 RST 端经电阻与电源 Vcc 接通而实现的。 3、电源电路 AT89C51 的电源脚分别为 20 脚 Vss 和 40 脚 Vcc (图中已默认连接, 未显示出来) 。 这两个脚分别接地和+5V 直流电源,31 脚 EA 为内外存储器的控制端,接+5V 允许访 问外部存储器。

3.3 放大电路
传感器检测电路的功能是把电阻应变片的电阻变化转变为电压输出,本设计中选
9

AT89C51

D

7

6

5

4

1

0

8

7

6

5

4

3

2

1

2

3

4

5

6

7

8

9

湖北科技学院学士学位论文

用的是 CZAF-605 电阻应变式称重传感器,因为通过其得到的电压信号很小,为所以 还需要放大器放大信号。考虑到干扰的作用,对传感器的信号进行了滤波处理,最终 设计如图 3-3。
VCC 1 0 K 7 1 1 + V R G R G 8 K 2 0 0 p F 1 0 0 p F

R

d

R

6

O

U

T

IN-

IN+

3

2

VCC

R

c

R

5

REF

-

V

4

1

0

INA128

2

0

0

p

F

1

0

0

p

图 3-3 传感器与放大器的接口电路

INA128 的 2 和 3 脚为信号输入端,4、5 和 7 脚为电源引脚。微弱信号放大后从 INA128 的第 6 脚输出。 通过调节 Rg 的阻值可以来改变放大倍数, 使得输出电压在 A/D 转换的基准电压要求范围之内。 根据要求,A/D 转换器的输入电压变化范围是 0V~4.999V, 传感器的输出电压信号 在 0~10mv, G ?
4.999 ? 499.9 ? 500 因此取放大器的放大倍数 500。因此代入公式 0.01 50 K ? 50k? , Rg ? G ? 1? ? 100.2? 。 Rg 499

3.4 模数转换器与单片机接口电路
ADC0832 为 8 位分辨率 A/D 转换芯片,其最高分辨可达 256 级,可以适应一般 的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在 0~5V 之间。芯片转换时间仅为 32μS,据有双数据输出可作为数据校验,以减少数据 误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制 变的更加方便。通过 DI 数据输入端,可以轻易的实现通道功能的选择[21]。 正常情况下 ADC0832 与单片机的接口应为 4 条数据线,分别是 CS、CLK、DO、 DI。但由于 DO 端与 DI 端在通信时并未同时有效并与单片机的接口是双向的,所以电 路设计时可以将 DO 和 DI 并联在一根数据线上使用。当 ADC0832 未工作时其 CS 输 入端应为高电平,此时芯片禁用,CLK 和 DO/DI 的电平可任意。当要进行 A/D 转换 时, 须先将 CS 使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转 换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟脉冲,DO/DI 端则使用 DI 端 输入通道功能选择的数据信号。 在第 1 个时钟脉冲的下沉之前 DI 端必须是高电平, 表 示启始信号。在第 2、3 个脉冲下沉之前 DI 端应输入 2 位数据用于选择通道功能[9]。
10

F

K

b

a

3

电子秤的硬件设计

作为单通道模拟信号输入时 ADC0832 的输入电压是 0~5V 且 8 位分辨率时的电压 精度为 19.53mV。如果作为由 IN+与 IN-输入的输入时,可是将电压值设定在某一个较 大范围之内,从而提高转换的宽度。但值得注意的是,在进行 IN+与 IN-的输入时,如 果 IN-的电压大于 IN+的电压则转换后的数据结果始终为 00H。ADC0832 与单片机的 接口电路如图 3-4。
VCC 1 5

8

T

1

VCC

C

1

6

7

S

W

R

CLK

1

7

6

CH0

R

D

D

O

5

CH1

D

I

G

N

图 3-4

ADC0832 与单片机的接口电路图

3.5 显示电路与单片机接口电路
本设计采用的是 LCD1602 显示,LCD1602 液晶也叫 1602 字符型液晶它是一种专 门用来显示字母、数字、符号等的点阵型液晶模块它有若干个 5×7 或者 5×11 等点阵 字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行 之间也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形。 1602LCD 是指显示的内容为 16×2,即可以显示两行, 每行 16 个字符液晶模块 (显 示字符和数字) 。 1602 采用标准的 16 脚接口,其中 1 和 2 脚为电源正负极,3 脚为对比度调整端, 4 脚 RS 为寄存器选择,5 脚 RW 为读写信号线,6 脚为使能端,7 到 14 脚为 8 为双向 数据端。15 和 16 脚为电源背光极。 LCD1602 与单片机的连接如图 3-5。
LCD1602 D D 0 1 2 3 4 5 6 S W 7

VSS

V

VEE

R

R

E

D

D

D

ADC0832

D

D

D

D

VCC

1

0

0

VCC

D

D

4

3

2

1

3

9

1

P0.0

3

8

1

P0.1

3

7

1

P0.2

3

6

1

P0.3

3

5

1

P0.4

3

4

1

P0.5

3

3

1

P0.6

3

2

1

P0.7

2

P2.0

2

P2.1

2

P2.2

3

2

1

图 3-5

单片机与 LCD1602 接线图
11

k

K

K

K

K

K

K

K

VCC

湖北科技学院学士学位论文

3 脚 VEE 接一个滑动变阻器,滑动变阻器两端接电源和地。调试欢动变阻器的值 可以改变 LCD 的对比度。因为 LCD 为共阳极,所以 D0 到 D7 有加入上拉电阻。

3.6 键盘电路与单片机接口电路
矩阵式键盘的结构与工作原理:在键盘中按键数量较多时,为了减少 I/O 口的占 用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不 直接连通,而是通过一个按键加以连接。这样,一个端口(如 P1 口)就可以构成 3× 4=12 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显, 比如再多加一条线就可以构成 16 键的键盘,而直接用端口线则只能多出一键。由此可 见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。 矩阵式键盘的按键识别方法 :确定矩阵式键盘上何键被按下介绍一种“行扫描 法”。行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别 方法,如上图所示键盘,介绍过程如下。判断键盘中有无键按下 将全部行线 Y0-Y3 置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下, 而且闭合的键位于低电平线与 4 根行线相交叉的 3 个按键之中。若所有列线均为高电 平,则键盘中无键按下。 判断闭合键所在的位置 在确认有键按下后,即可进入确定 具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时, 其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。 若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。 在本系统中键盘采用矩阵式键盘并采用中断工作方式。 键盘为 3×4 键盘, 包括 0、 1、2、3、4、5、6、7、8、9、十个数字及确认和清除键。采用中断工作方式提高了 CPU 的利用效率, 没键按下时没有中断请求, 有键按下时, CPU 提出中断请求, 向 CPU 响应后执行中断服务程序,在中断程序中才对键盘进行扫描。下图就是键盘电路与 AT89S52 单片机接口电路图。
VCC S 9 S 8 S 7 1

R

2

4.7K

2

S

6

S

5

S

4

3

4

R

3

4.7K

5

S

3

S

2

S

1

6

7

R

4

4.7K

S11

S

0

R

5

4.7K

图 3-6

键盘电路与单片机的连接图

12

S12

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

3

电子秤的硬件设计

3.7 报警电路
当电路检测到称重的物体超过仪器的测量限制时,将产生一个信号给报警电路。 使报警电路报警从而提醒工作人员注意,超限报警电路如下图所示。

1

K

PNP

Diode

1

RXD

0

图 3-7

报警电路图

它是有 AT89C52 的 RXD 口来控制的,RXD 本来为低电平,当超过设置的重量时 (5Kg) ,通过程序使 RXD 口值为高电平,从而使三极管导通,报警电路接通,使蜂 鸣器 SPEAKER 发出报警声,同时使报警灯 LED 发光。这一任务的实现主要靠程序来 完成。

3.8 电源电路
一般电网电压为交流 220V,而本文设计的电子秤系统需要的电压是直流 5V,显 然不能满足实际要求,所以需要设计一个直流稳压电源。 直流稳压电源一般由电源变压器、整流电路、滤波电路和稳压电路组成。基本框 图如 3-8 所示。

交流220V

电 源 变 压 器

整 流 电 路

滤 波 电 路

VCC

稳 压 电 路

Speaker

直流5V

图 3-8 直流稳压电源框图

电源变压器 T 将 220V 的交流电源变换成整流滤波电路所需要的 5V 交流电压。 5V 交流电压通过整流电路变换成 5V 的脉动电压,滤波电路滤除较大的波纹成分,输出较 小的波纹成分到稳压电路,稳压电路输出稳定的 5V 电压。 根据上述介绍,电源电路包括变压器、整流电路、滤波电路、稳压电路等模块组 成, 这里加入 LED 进行电源工作状态指示。稳压部分用 LM7805 三端稳压 IC 来组成 稳压电源,其优点是所需的外围元件极少,电路内部还有过流、过热及调整管的
13

湖北科技学院学士学位论文

保护电路,使用起来可靠、方便,而且价格便宜。具体的 5V 电源电路如图 3-9 所 示。
LM7805 1 V V O U I N T 2 SW-SPST +5V T 1 G N + D +

1

3

2

2

0

V

5

V

2

2

0

u

F

0.1uF

1

0

0

u















F

0.1uF

K

图 3-9 5V 直流稳压电源图

Equation Chapter (Next) Section 1

14

Diode

4

电子秤系统的软件设计

4 电子秤系统的软件设计
程序设计是一件复杂的工作,为了把复杂的工作条理化,就要有相应的步骤和方 法。其步骤可概括为以下三点: 首先需要分析系统控制要求,确定算法:对复杂的问题进行具体的分析,找出合 理的计算方法及适当的数据结构,从而确定编写程序的步骤。这是能否编制出高质量 程序的关键。 其次是根据算法画流程图: 画程序框图可以把算法和解题步骤逐步具体化,以减 少出错的可能性。 最后就是编写程序: 根据程序框图所表示的算法和步骤,选用适当的指令排列起 来,构成一个有机的整体,即程序。 程序数据的一种理想方法是结构化程序设计方法。 结构化程序设计是对利用到的 控制结构类程序做适当的限制,特别是限制转向语句(或指令)的使用,从而控制了程 序的复杂性,力求程序的上、下文顺序与执行流程保持一致性,使程序易读易理解, 减少逻辑错误和易于修改、调试。 根据系统的控制任务,监控软件采用模块技术设计,根据系统功能,将软件分为 若干个功能相对独立的模块, 为每一个模块设计程序流程图。该电子秤功能程序模块 包括: A/D 转换启动及数据读取程序设计、 显示子程序设计、 键盘扫描子的程序设计、 价格计算子程序设计、以及报警子程序设计等。

湖北科技学院学士学位论文

4.1 主程序的设计
主程序是系统信息处理的关键, 主程序模块主要完成编程芯片的初始化及按需要 调用各模块(子程序),在系统初始化过程中,初始化程序将 RAM 的 30H 到 5FH 单元清零,RXD 引脚置成低电平,防止误报警,同时将系统设置成 2.5Kg 量程,并 写 2.5Kg 量程标志。设计流程图如图 5-1 所示。 主程序主要完成编程芯片的初始化及按需要调用各子程序,上电启动后,系统初 始化,单片机读取模数转换器的数据,然后调用显示子程序显示重量,同时扫描键盘 子程序,调用价格计算子程序计算价格并显示出来。

开 始

初始化

读取数据

调用显示子程序

调用键盘子程序

价格计算子程序

显示价格

图 4-1 电子秤系统程序设计流程图

4.2 子程序的设计
主程序按需要调用各子程序。系统子程序主要包括 A/D 转换启动及数据读取程 序设计、显示子程序设计、键盘扫描子的程序设计、价格计算子程序设计、以及报警 子程序设计等。

16

4

电子秤系统的软件设计

4.2.1 模数转换子程序的设计
A/D 转换启动及数据读取子程序设计主要是上电运行后, ADC0832 完成初始化, 把经放大的称重传感器传递过来的模拟信号转换成数字信号并传递到单片机所涉及 到的程序设计设计流程图如图 4-2 所示。 ADC0832 进行模数转换时, 须现将 CS 是能端置于低电平并且保存低电平直到完 全结束。芯片开始转换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟脉冲, DO 和 DI 端则使用 DI 端输入通道功能选择的数据信号。 在第 1 个时钟脉冲的下沉之 前 DI 端必须是高电平,表示启始信号。在第 2、3 个脉冲下沉之前 DI 端应输入 2 位 数据用于选择通道功能, 到第 3 个脉冲的下沉之后 DI 端的输入电平就失去输入作用, 此后 DO/DI 端则开始利用数据输出 DO 进行转换数据的读取。从第 4 个脉冲下沉开 始由 DO 端输出转换数据最高位 DATA7,随后每一个脉冲下沉 DO 端输出下一位数 据。直到第 11 个脉冲时发出最低位数据 DATA0,一个字节的数据输出完成。从第 11 个字节的下沉输出 DATA0。随后输出 8 位数据,到第 19 个脉冲时数据输出 完成,也标志着一次 A/D 转换的结束 [23] 。最后将 CS 置高电平禁用芯片。
开 始

ADC0832初始化

启动模数转换

转换是否完成 Y 数据存储

N

数据显示

图 4-2 A/D 转换启动及数据读取程序流程图

湖北科技学院学士学位论文

4.2.2 键盘扫描子程序的设计
键盘扫描子程序主要是扫描键盘的输入, 调用显示子程序显示, 输出输入的参数, 计算总价是调用价格计算子程序计算总价格。 键盘电路设计成 3×4 矩阵式,由键盘编码方式可以得出 1、2、3、4、5、6、7、 8、9、0 及清零和计价各键对应的键值:0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39,0x3d,0x30,0x2e。在程序中可以先判断按键编码,然后根据编码将键 盘代表的数值送到相应的存储单元,再进行功能选择或数据处理。
3×4键盘

LCD初始化

字符显示

界面字符显示

有功能键按下 Y 输入完毕

N

原地跳转

调用LCD显示

Y 有返回键按下

N

原地跳转

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

18

4

电子秤系统的软件设计

4.2.3 显示子程序的设计
单片机应用系统通常都需要进行人—机对话。 其中包括人对应用系统的状态干预 与数据输入, 应用系统必须向操作者显示状态与运行结果等信息。显示器是单片机应 用系统中最常用的人—机交互设备 显示子程序是字符显示,首先初始化,输出一些基本信息,然后调用事先编好的 键盘显示子程序,输出显示命令,显示过程中还需要调用延时子程序。当输入通道采 集了一个信号, 或人为的键入一个值,或系统与仪表出现异常情况显示管理软件应及 时调用显示驱动程序模块,用来更新当前数据显示符号。 设计显示子程序的流程图如下图 4-4 所示:

开 始

LCD初始化

显示weight: price:

扫描键盘输入 Y Y 是否清零 N 称量

N

价格计算子程序

图 4-4

显示子程序流程图

湖北科技学院学士学位论文

4.2.4 价格计算子程序的设计
价格计算子程序由键盘计价键控制,当输入单价后,在没有清零的情况下,点计 价键,计算出总价后,调用显示子程序显示出中重量。 该子程序中利用各工作寄存器 2 组,数据存在以 40H 单元为首址的连续单元中。 价格计算公式总价=单价×重量。这个程序需要两次的数制转换,输入单价后需要将 单价转化为二进制后才能与二进制的重量进行计算。 计算后的结果必须转换为十进制 数显示出来。
开 始

输入单价

单位转化为二进制

取重量值

重量×单价=总价

单位转化为十进制

调用显示子程序





图 4-5 价格程序流程图

20

4

电子秤系统的软件设计

4.2.5 报警子程序的设计
因为压力传感器的所受压力有极限,所以称重量必须有在一定范围内,超过重量 时必须有报警程序。 主程序初始化设定阈值为 2.5Kg, 报警子程序将设定的阈值与实时显示的值进行比 较,先比较高位,若高位大,即设定值小于实时显示的值,这时将 RXD 置为 1,将发 光二极管点亮,且使蜂鸣器发出声音。若高位相等,就比较低位,同理若设定值低位 小于实际显示值,将 RXD 置为 1,将发光二极管点亮,且使蜂鸣器发出声音。这就需 要一段比较程序以及一小段置 1 清 0 程序。
开 始

A/D高位大 Y N 与阈值相等 N Y A/D低位大 Y N 与阈值相等 N Y 报 警





图 4-6

报警子程序流程图

湖北科技学院学士学位论文

5 系统调试
5.1 软件调试
在设计电子秤的过程中,先在软件中仿真,仿真成功后,再制作出实物。仿真采 用的是 proteus 软件,是一专门基于单片机的及其外围电路的仿真软件。仿真的第一步 是先进行软件调试,是通过对程序的汇编、连接、执行来发现程序中存在的语法错误 与逻辑错误并加以排除纠正错误的过程。软件调试的方法是先分块后组合。 在编出完整的程序并确保无误后进行综合调试。在调试程序之前,先检查各硬件 模块间的连接是否无误,有无断路现象。确认连接无误后就给系统通电进行调试。 正式调试时,首先进行总体调试,即观察系统的运行情况以便快速地发现存在的 问题。然后进行各硬件模块调试,主要针对有问题的硬件模块及其程序进行调试,以 便准确地查出问题的原因并解决问题。 我在实际仿真的时候出现了 LCD 无显示,最终找出原因是 LCD 是共阳极的需要 接上拉电阻。同时还发现蜂鸣器超重后都不报警但是 LED 发亮,最后发现是蜂鸣器的 响应时间设置太大产生的。软件调试如图 5-1 所示。

图 5-1 软件调试图
22

5

系统调试

5.2 硬件调试
按照设计好的电子秤系统原理图,计算出各个元器件的参数,选择相应的器件, 制作出了实际的电子秤系统后。首先检查连线是否与逻辑图一致,用万用表检查有无 短路、虚焊等现象。器件的型号、规格、规格、极性是否有误,插接方向是否正确。 检查完毕,可用万用表检测仪下电路板正负电源之间的电阻,排除电源短路的可能。 之后将生成的 hex 文件烧到单片机中,得到响应的实物,观察现象,并排除问题。 刚开始通电后,发现 LCD 显示画面不理想,之后调节上拉电阻后达到了满意的效果。 同时出现报警装置没有用,之后检查发现是因为实际买的三极管极性与理论图不一样。 换了正负极方向就可以了。同时测量的重物质量与实际相比严重偏大,之后修改程序 中的转换倍数后正常了。硬件调试如图 5-2。

图 5-2 硬件调试图

.

湖北科技学院学士学位论文

6 结论与展望
6.1 论文的特点
本论文主要研究的是简易电子秤的设计,主要是基于超市的电子秤,在小重量范 围的称量。具有如下的功能: 1、能用简易键盘设置单价,能够同时显示重量和金额; 2、重量显示:单位为千克;最大称重为 2.5 千克,重量误差不大于±0.01 千克; 3、具有清零功能和复位功能。 4、超出所测的重量时能够报警。 此电子秤采用 LCD1602 显示,能够同时显示重量价格,并且具有很高的性价比, 能够广泛的应用少于 2.5kg 重量的范围的交易。

6.2 研究展望
随着现代数字电子技术的发展,电子秤不仅要向高精度、高可靠方向发展,而且更 需向多种功能的方向发展。其发展的方向主要有:1 电子秤附加处理机构计算机信息补 偿装置,可以进行自诊断、自校正和多种补偿计算和处理。2 电子秤具备动物称量模式, 即通过进行算术平均、积分处理和自动调零等方法,消除上述的误差。3 附加特殊的数 据处理功能。其还有更高的性价比,更人性化的操作方式等。

.

24









经过半年的忙碌和工作,本次毕业设计终于完成了,作为一个本科生的毕业设计, 由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一 起工作的同学们的支持,想要完成这个设计是难以想象的。 在这里要感谢我的知道导师邓方雄老师。他平日里工作繁多,但在我做毕业设计 的每个阶段,从外出实习到查阅资料,设计草案的确定和修改,中期检查,后期详细 设计,装配草图等整个过程中都给予了我悉心的指导。我的设计较为复杂烦琐,但是 邓老师仍然细心地纠正图纸中的错误。除了敬佩邓老师的专业水平外,他的治学严谨 和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作。 最后还要感谢大学四年来所有的老师,为我们打下专业知识的基础;同时还要感 谢所有的同学们,正是因为有了你们的支持和鼓励。此次毕业设计才会顺利完成。

湖北科技学院学士学位论文

参考文献

[1] [2] [3] [4] [5] [6] [7] [8] [9]

张毅刚.单片机原理及应用[M].北京:高等教育出版社,2010. 康华光,邹寿彬.电子技术基础[M].北京:高等教育出版社,2009. 彭介华.电子技术课程设计指导[M].北京:高等教育出版社,2008. 陈杰,黄宏.传感器与检测技术[M].北京:高等教育出版社,2009. 陈大钦.电子技术基础实验[M].北京:高等教育出版社,2008. 李正军.计算机控制系统[M].北京:机械工业出版社,2010. 晁阳.单片机 MCS-51原理及应用开发教程[M].北京:清华大学出版社,2007. 何希才,薛永毅著.传感器及其应用实例[M].北京:机械工业出版社,2008. 常健生.检测与转换技术[M].北京:机械工业出版社,2004.

[10] 何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,2007. [11] 丁元杰.单片微机原理及应用[M].北京:机械工业出版社,2009. [12] 梁瑞林.传感器实用电路设计与制作[M].北京:科学出版社,2007. [13] 华中科技大学组委会.电子系统设计实践[J].湖北:华中科技大学出版社,2005. [14] 夏路易,石宗义.路原理图与电路板设计教程[M].北京:北京希望电子出版社,2002. [15] 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品汇编[J].北京:北京 理工大学出版社,2005. [16] 雷思孝.单片机系统设计及工程应用[M] .西安:西安电子科技大学出版社,2005. [17] 童诗白,华成英.模拟电子技术基础[M].北京:北京高等教育出社,2001. [18] 程林.超省电型电子秤的设计方案[J].福建:福建省计量科学技术研究所,2008. [19] 王港元.电工电子实践指导[M].江西:江西科学技术出版社,2005. [20] Jean J.Labrosse.Ucos-The real-Time kernel[M].CMP Books,2002 . [21] Jonathan Corbet.Linux Device Drivers,3rd Edition[M].O'Reilly Media/Inc,2005.02 . [22] Yuriy V. Analog-to-Digital and Digital-to-Analog Conversion with Memristive Devices D] IEEE [ . J. Sol.-State Circ., vol. 42, p.2011 . [23] Intel.Analog Device Corp[M].Data-acquisition Databook,2007 .

26

LM7805

+5V

1

2

V

V

I

N

O

U

T

SW-SPST

T

1

G

N

D

+

+

1

K

3

2

2

0

V

5

V

2

2

0

u

F

0.1uF

1

0

0

u

F

0.1uF















Diode

LCD1602

D

D S W

0

1

2

3

4

5

6

7

VSS

V

VEE

R

R

E

D

D

D

D

D

D

D

D



VCC

C

1

VCC

1

0

0

VCC

2

2

p

F

2

12MHZ 1 9 3 9 1 K

X

1

P0.0

3

8

1

K

P0.1

C 1

2

3

7

1

K

P0.2

1

8

3

6

1

K

X

2

P0.3

3

5

1

K

P0.4

2

2

p

F

3

4

1

K

P0.5

C

3

3

3

1

K

P0.6

9

3

2

1

k

RESET

P0.7

2

2

u

f

2

1

P2.0

2

9

2

2

PSEN

P2.1

附 录 1 系统原理图

S13 3 0 2 3

1

K

Speaker

ALE/P

P2.2

3

1

2

4

VCC

VCC

EA/VP

P2.3

1 Diode

2

2

5

INT0

P2.4

VCC

1

3

2

6

1

K

INT1

P2.5

S 2 7

9

S

8

S

7

PNP

录 1 系统原理图

P2.6

1

2

8

R

2

P1.0

P2.7

4.7K

2

VCC

P1.1

VCC

S 3 1 0

6

S

5

S

4

1

0

K

P1.2

RXD

4

1

1

7

1

1

K

R

3

P1.3

TXD

+

V

R

G

4.7K

5

1

4

VCC

8

P1.4

T

0

R

G

S 6 1 5 8

3

S

2

S

1

1

2

0

0

p

F

1

0

0

p

F

R

d

R

a

P1.5

T

1

VCC

C

S

7

1

6

7

2

6

2

R

4

P1.6

W

R

CLK

CH0

O

U

T

IN-

4.7K

8

1

7

6

3

3

P1.7

R

D

D

O

CH1

IN+

S11 5

S

0

S12

4

VCC

R

c

R

b

D

I

G

N

D

AT89C51

5

4

R

5

REF

-

V

4.7K

1

0

K

ADC0832

INA128

2

0

0

p

F

1

0

0

p

F

湖北科技学院学士学位论文



录 2 仿真图

28



录 3 实物图

29

湖北科技学院学士学位论文


.#include<reg51.h> #include<intrins.h> #include <absacc.h> #include <math.h> #define uchar unsigned char #define uint unsigned int #define BUSY 0x80 #define DATAPORT P0 sbit ADCS =P3^5; sbit ADDI =P3^7; sbit ADDO =P3^7; sbit ADCLK =P3^6; sbit LCM_RS=P2^0; sbit LCM_RW=P2^1; sbit LCM_EN=P2^2; uint x1,y1,z1=0,w1,j,temp1; uchar ad_data,k,n,m,e,num,s; sbit speaker=P3^0; char press_data; unsigned char ad_alarm; unsigned char press_ge=0; unsigned char press_shifen=0; unsigned char press_baifen=0; unsigned char press_qianfen=0;

录 4 程序清单

//常量定义

//采样值存储

//标度变换存储单元 //报警值存储单元 //显示值百位 //显示值十位 //显示值个位 //显示值十分位

uchar code str0[]={"Weight: . Kg "}; uchar code str2[]={"Price: "}; uchar code str3[]={"Total: "}; uchar code table2[]={0x37,0x38,0x39,0x34,0x35,0x36, 0x31,0x32,0x33,=0x3d,0x30,0x2e }; //键盘码 void delay(uint); void lcd_wait(void); void delay_LCM(uint); //LCD 延时子程序 void initLCM( void); //LCD 初始化子程序
30

void lcd_wait(void); //LCD 检测忙子程序 void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到 ICM 子函数 void WriteData LCM(uchar WDLCM); //写数据到 LCM 子函数 void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数 void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字 符子函数 void weishu(uint m); void weishu1(uint m); void display(void); uchar Adc0832(unsigned char channel); void alarm(void); void data_pro(void); /**********主程序************/ void main(void) { delay(500); //ad_data=0; initLCM( );

//系统延时 500ms 启动 //采样值存储单元初始化为 0

WriteCommandLCM(0x01,1); //清显示屏 DisplayListChar(0,0,str0); DisplayListChar(0,1,str2); while(1) { ad_data =Adc0832(0); //采样值存储单元初始化为 0 alarm(); data_pro(); display(); if(k==1) { DisplayOneChar((s+7),1,table2[num-1]); x1=m; y1=n; y1=y1*10+x1; } if(k=='*') { data_pro(); WriteCommandLCM(0x01,1); weishu(z1); k=0; } if(k=='=') { z1=z1*temp1;
31

湖北科技学院学士学位论文

WriteCommandLCM(0x01,1); DisplayListChar(0,1,str3); s=0; weishu1(temp1*n); k=0; j=temp1; } if(k==' ') { WriteCommandLCM(0x80+0x40,1); WriteCommandLCM(0x01,1); z1=0; s=0; //防止清零时指针后移动 } } }

/*********延时程序 K*1ms,12.000mhz**********/ void delay(uint k) { uint i,j; for(i=0;i<k;i++) for(j=0;j<100;j++); } /**********写指令到 ICM 子函数************/ void WriteCommandLCM(uchar WCLCM,uchar BusyC) { if(BusyC) lcd_wait(); DATAPORT=WCLCM; LCM_RS=0; // 选中指令寄存器 LCM_RW=0; LCM_RW=0; // 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0; }

32

/**********写数据到 LCM 子函数************/ void WriteDataLCM(uchar WDLCM) { lcd_wait( ); //检测忙信号 DATAPORT=WDLCM; LCM_RS=1; // 选中数据寄存器 LCM_RW=0; // 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=0; } /***********lcm 内部等待函数*************/ void lcd_wait(void) { DATAPORT=0xff; //读 LCD 前若单片机输出低电平,而读出 LCD 为高电平, 则冲突,Proteus 仿真会有显示逻辑黄色 LCM_EN=1; LCM_RS=0; LCM_RW=0; LCM_RW=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(DATAPORT&BUSY) { LCM_EN=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LCM_EN=1; _nop_(); _nop_(); _nop_();
33

湖北科技学院学士学位论文

_nop_(); _nop_(); _nop_(); _nop_(); } LCM_EN=0; } /**********LCM 初始化子函数***********/ void initLCM( ) { LCM_EN=0; DATAPORT=0; delay(15); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,0); delay(5); WriteCommandLCM(0x38,1); WriteCommandLCM(0x08,1); WriteCommandLCM(0x01,1); WriteCommandLCM(0x06,1); WriteCommandLCM(0x0c,1); TMOD=0x11; EA=1; ET1=1; TR1=1; k=0; x1=0; y1=0; z1=0; } /****显示指定坐标的一个字符子函数****/ void DisplayOneChar(uchar X,uchar Y,uchar DData) { Y&=0x01; X&=0x0f; if(Y) X|=0x40; //若 y 为 1(显示第二行) ,地址码+0X40 X|=0x80; //指令码为地址码+0X80 WriteCommandLCM(X,1);
34

//三次显示模式设置,不检测忙信号

//8bit 数据传送,2 行显示,5*7 字型,检测忙信号 //关闭显示,检测忙信号 //清屏,检测忙信号 //显示光标右移设置,检测忙信号 //显示屏打开,光标不显示,不闪烁,检测忙信号

WriteDataLCM(DData); } /*******显示指定坐标的一串字符子函数*****/ void DisplayListChar(uchar X,uchar Y,uchar code *DData) { uchar ListLength=0; Y&=0x01; X&=0x0f; while(X<16) { DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; } } /*****************系统显示子函数*****************/ void display(void) { WriteCommandLCM(0x0c,1); 闪烁,检测忙信号 DisplayListChar(0,0,str0); //DisplayListChar(0,1,str2);

//显示屏打开,光标不显示,不

DisplayOneChar(8,0,press_ge+0x30); DisplayOneChar(10,0,press_shifen+0x30); DisplayOneChar(11,0,press_baifen+0x30); DisplayOneChar(12,0,press_qianfen+0x30); delay(1000); } /************ 读 ADC0832 函数 ************/ //采集并返回 uchar Adc0832(unsigned char channel) { uchar i=0; uchar j; uint dat=0; uchar ndat=0; if(channel==0)channel=2; if(channel==1)channel=3;

//稳定显示

//AD 转换,返回结果

35

湖北科技学院学士学位论文

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;//形成一次时钟脉冲
36

_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; float press; if(0<ad_data<256) { int vary=ad_data; press=(0.012*vary); temp1=(int)(press*1000); 的计算 //放大 1000 倍,便于后面

press_ge=temp1/1000; //取压力值百位 press_shifen=(temp1%1000)/100; //取压力值十位 press_baifen=((temp1%1000)%100)/10; //取压力值个位 press_qianfen=((temp1%1000)%100)%10; //取压力值十分位 } } /*****************报警子函数*******************/ void alarm(void) { if(ad_data>223) speaker=0; else speaker=1; } void weishu(uint m)
37

//则启动报警

湖北科技学院学士学位论文

{ uchar wei4,wei3,wei2,wei1,wei0; wei4=m/10000; wei3=m%10000/1000; wei2=m%1000/100; wei1=m%100/10; wei0=m%10; DisplayOneChar(7,1,0x30+wei4); DisplayOneChar(8,1,0x30+wei3); DisplayOneChar(10,1,0x30+wei2); //DisplayOneChar(10,1,'.'); DisplayOneChar(11,1,0x30+wei1); DisplayOneChar(12,1,0x30+wei0); } void weishu1(uint m) { uchar wei5,wei4,wei3,wei2,wei1,wei0; wei5=m/100000; wei4=m%100000/10000; wei3=m%10000/1000; wei2=m%1000/100; wei1=m%100/10; wei0=m%10; DisplayOneChar(7,1,0x30+wei4); DisplayOneChar(8,1,0x30+wei3); DisplayOneChar(9,1,'.'); DisplayOneChar(10,1,0x30+wei2); //DisplayOneChar(10,1,'.'); DisplayOneChar(11,1,0x30+wei1); DisplayOneChar(12,1,0x30+wei0); } /*****************键盘扫描子程序*******************/ void temer1() interrupt 3 { uchar temp; EX1=0; P1=0xfe; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp)
38

{ case 0xee:num=1;n=7;k=1,s++;break; case 0xde:num=2;n=8;k=1,s++;break; case 0xbe:num=3;n=9;k=1,s++;break; case 0x7e:num=4;k='/',s++;break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } //DisplayOneChar((s+6),1,table2[num-1]); } } P1=0xfd; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xed:num=5;n=4;k=1;s++;break; case 0xdd:num=6;n=5;k=1;s++;break; case 0xbd:num=7;n=6;k=1;s++;break; case 0x7d:num=8;k='*';s++;break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } //DisplayOneChar(k+6,1,table2[num-1]); } } P1=0xfb; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0)
39

湖北科技学院学士学位论文

{ temp=P1; switch(temp) { case 0xeb:num=9;n=1;k=1;s++;break; case 0xdb:num=10;n=2;k=1;s++;break; case 0xbb:num=11;n=3;k=1;s++;break; case 0x7b:num=12;k='-';s++;break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } DisplayOneChar(k+6,1,table2[num-1]); } } P1=0xf7; temp=P1; temp=temp&0xf0; if(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7:num=13;k=' ';break; case 0xd7:num=14;n=0;k=1;s++;;break; case 0xb7:num=15;k='=';s++;break; case 0x77:num=16;k='+';s++;;break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } //DisplayOneChar(k+6,1,table2[num-1]); } } EX1=1; }

//

40


相关文章:
基于51单片机数字电子称的设计
基于51单片机数字电子称的设计_电子/电路_工程科技_专业资料。单片机 电子称 论文...上海友声衡器有限公司,产品特点:一、电路集成度高、简单可靠。采用 目前世界上...
基于单片机实现高精度电子秤的设计
基于单片机实现高精度电子秤的设计_信息与通信_工程科技_专业资料。实现高精度电子...整个 系统结构简单,使用方便。全文共分为五章,各章主要内容如下: 第一章为...
基于单片机的简易电子秤的设计_毕业论文_图文
基于单片机的简易电子秤的设计_毕业论文_工学_高等教育_教育专区。大学专科本科专业有关关于...的毕业论文范文下载(可在线预览) 摘 要 论文题目 简易电子秤的设计...
基于单片机的电子秤设计
26 3 基于单片机的电子秤系统设计 摘要 随着自动称量技术的不断发展,传统的模拟...电子称的发展过程与其他事物一样,也经历了由简单到复杂、又粗糙到精 密、由...
基于单片机的简易电子秤的设计_毕业设计_图文
基于单片机的简易电子秤的设计_毕业设计_工学_高等教育_教育专区。单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文 ...
基于单片机的简易电子秤的设计_毕业设计_图文
基于单片机的简易电子秤的设计_毕业设计_工学_高等教育_教育专区。单片机论文,毕业设计,毕业论文,单片机设计,硕士论文,研究生论文,单片机研究论文,单片机设计论文 ...
基于51单片机的电子称设计
毕业设计(论文)基于 51 单片机的双精度电子称设计 系 别 自动化工程系 测控...台秤和简易电子称为主的商 用电子秤,存在着精度差、易损坏、难维修等缺陷,...
基于单片机的电子称设计方案
数据采集 AD 转换 单片机处理 LED 显示 按键处理 此方案设计电子秤,可以实现称物计价功能,但是局限于数码管的功能,在显示时只 能显示单价、 购物总额以及简单的...
基于单片机的电子秤设计
分类号 密级 TH715 单位代码 学号 11395 1005270118 学生毕业设计(论文) 题作 目者 基于单片机的电子秤设计 XXXXX 能源工程学院 测控技术与仪器 赵鹏 2014年5月...
基于单片机的电子秤设计.doc
毕业设计论文 基于单片机的电子秤设计 系 别: 机电工程系 专业名称: 自动化 ...单片机控制的电子称结构简单,成本低廉,深受人们的喜爱,本文将对 此进行详细讨论...
更多相关标签:
基于单片机电子秤设计 | 单片机电子秤毕业设计 | 单片机电子秤设计 | 简易电子秤设计报告 | 简易电子秤的设计 | 简易数字电子秤的设计 | 简易电子秤设计 | 单片机简易电子琴设计 |