基于AT89S52的数字电子称.docx
- 文档编号:10162524
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:17
- 大小:124.87KB
基于AT89S52的数字电子称.docx
《基于AT89S52的数字电子称.docx》由会员分享,可在线阅读,更多相关《基于AT89S52的数字电子称.docx(17页珍藏版)》请在冰豆网上搜索。
基于AT89S52的数字电子称
基于AT89S52的数字电子秤
班级:
电子08-1
姓名:
学号:
0806040110
摘要
本系统采用单片机AT89S52控制核心,实现电子秤的基本控制功能。
系统的硬件部分包括最小系统板部分、模拟信号采集放大部分、人机交互界面三大部分。
最小系统部分主要由单片机、晶体振荡电路、ISP下载口、复位电路、电源指示灯组成;模拟信号采集放大部分由压力传感器、信号放大、A/D转换电路组成;人机交互部分由键盘输入、八位八段共阴数码管及其驱动电路、蜂鸣器及其驱动电路组成。
软件部分应用单片机C语言实现了本设计的全部控制功能。
包括A/D转换电路的编程、数码管动态显示、独立键盘扫描、蜂鸣器超重报警等,进而达到电子称重的目的。
关键字:
压力传感器;放大;数码管;单片机
Abstract
ThecontrolsystemusesmicrocontrollerAT89S52core,toachievethebasiccontrolfunctionsofelectronicscales.Systemhardwareincludesthesmallestpartofthesystemboard,amplifiedanalogsignalacquisitionpart,man-machineinterfaceofthreeparts.Thesmallestpartsofthesystemmainlybythesingle-chip,thecrystaloscillatorcircuit,ISPdownloadport,resetcircuit,powerindicatorcomposition;analogsignalacquisitionandamplificationinpartbythepressuresensor,signalamplification,A/Dconversioncircuit;human-computerinteractioninpartbythekeyboardinput,eightoutofeightfemaleanddrivingdigitalcircuits,buzzerandthedrivecircuit.SoftwarepartoftheapplicationmicrocontrollerClanguageimplementationofthedesignofallcontrolfunctions.IncludingA/Dconvertercircuitprogramming,digitaldynamicdisplay,separatekeyboardscan,alarmbuzzeroverweight.Betweenthehostcomputerandthefunctionofthecircuitcanbeinterlinkedandcoordinatedtoachieveaunifiedsystemasawhole,harmoniouseffect,andthusachievethepurposeofelectronicweighing.
Keywords:
Pressuresensor;Enlarge;digitalLED;MCU
目录
摘要I
AbstractI
目录II
1方案论证与比较1
1.1传感器1
1.2前级放大器部分1
1.3A/D转换器2
2硬件详细设计4
2.1MCU中央控制部分4
2.1.1AT89S52的功能特性描述4
2.1.3AT89S52的管脚排列4
2.1.5AT89S52单片机的工作过程和工作方式6
2.2A/D转换器6
2.2.1ADC0809特性6
2.2.2ADC0809的基本工作原理7
2.2.3系统中ADC0809的应用8
2.3按键部分8
3.4数码管部分8
2.5前端信号处理9
2.6电源电路部分10
2.7声光指示报警电路10
3系统软件详细设计:
11
3.1定时器初始化模块11
3.2转换模块初始化11
3.3重量计算模块11
3.4程序流程图12
参考文献13
附录14
一、程序14
二、原理图17
1方案论证与比较
1.1传感器
为了使得电子称更具有实用性,本系统设定称重范围在10Kg之内,重量误差不大于
0.005Kg。
考虑到秤台自重、振动和冲击分量,还要避免超重损坏传感器,所以传感器量程必须大于额定称重10Kg。
根据现有日常使用情况和互联网上可选择的简单型号,我选择的是L-PSIII型传感器,量程10Kg,精度为0.01%,满量程时误差
0.002Kg。
可以满足本系统的设定精度要求。
其原理如图1-1所示。
称重传感器主要由弹性体、电阻应变片电缆线等组成,内部线路采用惠更斯电桥,当弹性体承受载荷产生变形时,输出信号电压可由下式给出[1]:
图1-1传感器原理图
1.2前级放大器部分
压力传感器输出的电压信号为毫伏级,所以对运算放大器要求很高。
我们考虑可以采用以下几种方案可以采用:
方案一、利用普通低温漂运算放大器构成多级放大器。
普通低温漂运算放大器构成多级放大器会引入大量噪声。
由于A/D转换器需要很高的精度,所以几毫伏的干扰信号就会直接影响最后的测量精度。
所以,此中方案不宜采用。
方案二、由高精度低漂移运算放大器构成差动放大器。
差动放大器具有高输入阻抗,增益高的特点,可以利用普通运放(如OP07)做成一个差动放大器。
图1-2
如图1-2所示电阻R1、R2电容C1、C2、C3、C4用于滤除前级的噪声,C1、C2为普通小电容,可以滤除高频干扰,C3、C4为大的电解电容,主要用于滤除低频噪声。
优点:
输入级加入射随放大器,增大了输入阻抗,中间级为差动放大电路,滑动变阻器R6可以调节输出零点,最后一级可以用于微调放大倍数,使输出满足满量程要求。
输出级为反向放大器,所以输出电阻不是很大,比较符合应用要求。
缺点:
此电路要求R3、R4相等,误差将会影响输出精度,难度较大。
实际测量,每一级运放都会引入较大噪声。
对精度影响较大。
方案三:
采用专用仪表放大器,如:
INA126,INA121等。
此类芯片内部采用差动输入,共模抑制比高,差模输入阻抗大,增益高,精度也非常好,且外部接口简单。
以INA126为例,接口如图1-3所示:
图1-3
放大器增益
,通过改变
的大小来改变放大器的增益。
基于以上分析,我们决定采用制作方便而且精度很好的专用仪表放大器INA126。
1.3A/D转换器
方案一、逐次逼近型A/D转换器,如:
ADC0809、ADS7804等。
逐次逼近型A/D转换,一般具有采样/保持功能。
采样频率高,功耗比较低,是理想的高速、高精度、省电型A/D转换器件。
方案二、双积分型A/D转换器:
如:
ICL7135、ICL7109等。
双积分型A/D转换器精度高,但速度较慢(如:
ICL7135),具有精确的差分输入,输入阻抗高(大于
),可自动调零,超量程信号,全部输出于TTL电平兼容。
双积分型A/D转换器具有很强的抗干扰能力。
对正负对称的工频干扰信号积分为零,所以对50HZ的工频干扰抑制能力较强,对高于工频干扰(例如噪声电压)已有良好的滤波作用。
只要干扰电压的平均值为零,对输出就不产生影响。
尤其对本系统,缓慢变化的压力信号,很容易受到工频信号的影响[2]。
但是作为电子秤,系统对AD的转换速度要求并不高,精度上8位的AD足以满足要求。
它比双积分型A/D转换器虽然有着低廉的成本。
综合的分析其优点和缺点,我最终选择了ADC0809。
2硬件详细设计
2.1MCU中央控制部分
2.1.1AT89S52的功能特性描述
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
[3]
2.1.3AT89S52的管脚排列
AT89S52的管脚排列如图2-1。
图2-1AT89S52管脚图
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,作为输出口,每位可驱动8个TTL逻辑电平。
当P0口的管脚第一次写1时,被定义为高阻输入,P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平,当P2口被写1时,其管脚被内部上拉电阻拉高,且作为输入,并因此作为输入时,P2口的管脚被外部拉低,将输出电流,这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容,P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平,当P3口写入1后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入,当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许端的输出电平用于锁存地址的地址字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号端。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效,但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.1.5AT89S52单片机的工作过程和工作方式
单片机工作过程遵循现代计算机的工作原理(冯.诺依曼原理),即程序存储和程序控制。
存储程序是指人们必须事先把计算机的执行步骤序列(即程序)及运行中所需的数据,通过一定的方式输入并存储在计算机的存储器中。
程序控制是指计算机能自动地逐一取出程序中的指令,加以分析并执行规定的操作。
单片机的工作方式有:
复位、程序执行、掉电保护和低功耗、编程、校验与加密等方式[4]。
2.2A/D转换器
2.2.1ADC0809特性
本设计用到的模数转换器是有8路输入通道和、8位输出的A/D转换器ADC0809。
在自动控制领域中,除数字量外经常会遇到另一种物理量,即模拟量,例如:
温度、速度、压力、电流、电压等。
而由于计算机只能识别并处理数字信号,因此计算机系统中凡遇到有模拟信号的地方,就需要将模拟信号转换成数字信号的,在单片机的应用系统中,经常会用到模数转换电路,也就出现了单片机的模/数(A/D)转换的接口问题。
目前这些转换电路及其接口都已集成化,具有体积小、功能强、可靠性高、误差小、功耗低等特点,并能很方便地与单片机连接。
A/D转换器与单片机的接口是单片机应用系统的重要接口,任何型号的ADC芯片都能与单片机连接,但接口形式与ADC芯片型号、转换速度以及分辨率的要求不同有所差异。
从ADC接口电路结构来看ADC芯片与单片机连接有如下形式:
⑴与单片机总线直接连接。
⑵用三态门与单片机连接。
⑶通过I/O接口与单片机
2.2.2ADC0809的基本工作原理
ADC0809可实现8路模拟信号的分时采集,转换后的数字量输出是三态的(总线型输出),可直接与单片机数据总线相连接。
ADC0809采用+5V电源供电,外接工作时钟。
本系统中,ADC0809工作时钟为500KHz,其转换时间为128μs。
1)输入为8个可选通的模拟量IN0~IN7。
至于ADC转换器接收哪一路输入由地址A、B、C控制的8路模拟开关实现。
同一时刻,ADC0809只接收一路模拟量输入,不能同时对8路模拟量进行模数转换。
2)模/数转换
转换开始时,将逐次逼近寄存器清0,这时,D/A转换器输出也为0。
启动转换后,先使逐次逼近寄存器的最高位D7置1,经过D/A转换后,得到一个模拟电压Vs。
把Vs和输入模拟电压Vi进行比较,若Vi大于Vs,则该位为1,反之为0。
然后使逼近寄存器的D6位置1,经过D/A转换后再与Vi进行比较,决定D6为1还是0。
重复上述过程,经过8次比较后,逐次逼近寄存器中得到的数值就是转换后的数据。
这个数据送入缓冲寄存器,从而得到数字量输出。
3)输出
A/D转换器可以将输入的模拟量转化为8位数字信号。
模数转换开启时刻由START端控制。
2.2.3系统中ADC0809的应用
在本系统中,ADC0809的ST、ALE、EOC、OE、CL依次与单片机的P30-P34相连接,进行对芯片的控制命令,并行数字数据读取端与单片机的P1口相连接,在编程的时候,只要从P0口读出数字信号即可,图2-2为0809在本系统中的应用原理图。
图2-2
2.3按键部分
由三个按键组成,每个按键的一端接地,另一端直接接单片机的IO口上,当按键被按下时,单片机通过实时扫描可以判断出按键被按下,用此来输入命令。
系统中三个按键分别接P35、P36、P37口。
3.4数码管部分
LED显示器的工作原理:
LED显示是用发光二极管显示字段的显示器件,也可称为数码管,其外形结构如图所示,由图可见它由8个发光二极管构成,通过不同的组合可用来显示0~9、A~F及小数点,如图2-3。
图2-3共阴“8”字型数码管
LED显示器分为共阴极和共阳极,共阴极是将8个发光二极管阴极连接在一起作为公共端,而共阳极是将8个发光二极管的阳极连接在一起作为公共端。
我们这次就是采用的共阴极LED,所以这里要介绍共阴极数码管。
LED显示器有静态和动态显示两种方式,本系统使用动态显示。
动态显示是将所有位的段选线相应的并联在一起,由一个8位的I/O口控制,形成段选线的多路复用。
而各位的阴极分别由相应的I/O口控制,实现各位的分时选通。
要LED能够显示相应的字符,就必须采用动态扫描方式,只要每位显示的时间足够短,则可造成多位同时显示的假象,达成显示的目的。
在数字电路中常常要把数据或运算结果通过半导体数码管、液晶数码和荧光数码管,用十进制数显示出来。
发光二极管的工作电压为1.5-3.0伏,工作电流为己毫安到几十毫安,寿命很长。
半导体数码管将十位数分成七个字段,每段为一个发光二极管,其字形结构如图所示,选择不同的字段发光,可显示出不同的字型。
例如:
当a、b、c、d、e、f、g七个字段同时亮时,显示8,b、c段亮时,显示出1。
系统中,通过对八位数码的动态显示,如图2-4。
来显示实时值。
当重物放上去后,数码管显示当前重量。
因为八位数码管需要的电流要大些,普通51单片机的IO口拉电流与灌电流均不满足需求,而且,八位数码管的位选正常接法的话会占用很多IO口,所以我们用74hc138三八译码器来对位选端进行控制与驱动。
用74ls245三态八路锁存器来增加端选的驱动能力,这样,数码管可以既清晰、又剩IO口的工作。
图2-4
2.5前端信号处理
INA126构成的放大器电路如图2-5。
图2-5
通过调节Rg的阻值来改变放大倍数。
微弱信号被分别放大后从INA126的第6脚输出。
A/D转换器ADC0809的输入电压变化范围是0~+5V,传感器的输出电压信号在0~20mv左右,因此放大器的放大倍数在200~250左右,可将Rg接成
的滑动变阻。
2.6电源电路部分
系统中的芯片工作电压需要5v供电,为了保证系统的稳定供电,系统采用直接接外部5v稳定电源。
在电源处为了使得更清晰的反映系统的电源上电情况,用一枚发光二级管来指示,用自锁开关控制整个板的供电。
2.7声光指示报警电路
由于本设计中的压力传感器有一定的量程,超过量程会造成压力传感器随坏,所以,在设计中设定当超过警戒重量的时候采用声光报警,报警电路图如下,采用三极管驱动的蜂鸣器与发光二级管互相配合报警。
3系统软件详细设计:
3.1定时器初始化模块
voidinit()
{
TMOD=0x02;//定时器0为工作方式2:
8位初值自动重装
TH0=250;//高位装初值
TL0=250;//低位装初始
EA=1;//开启总中断
TR0=1;//开启定时器中断0
ET0=1;//定时器中断开始工作
}
在这个函数中寄存器TMOD选择位定时器1,工作方式2,8位初值自动重装,初值设置装为250,这样可以在程序中调用定时器来为ADC0809提供一个大约500k的方波信号,作为它的工作时钟。
用这种方法既减少了搭建外部晶振电路的复杂度,又可以满足ADC0809转换的需要,转换时,系统正常工作。
3.2转换模块初始化
voidstartabc()//0809初始化函数
{
ST=0;
ALE=0;
ST=1;
ALE=1;
delay
(1);
ST=0;
ALE=0;
}
在这个函数中,按照芯片手册中其工作时序要求,将ST升为高电平的时候,ALE拉高,这样就使adc0809准备工作。
3.3重量计算模块
if(EOC==1)
{
OE=1;
du=~P1;//得到AD值
weight=du*39;//0-256每一个是39克:
100000/256此结果是克
wei8=du/10000000;
wei7=du/1000000%10;
wei6=du/100000%100%10;
wei5=du/10000%1000%100%10;
wei4=du/1000%10000%1000%100%10;
wei3=du/100%100000%10000%1000%100%10;
wei2=du%100/10;
wei1=du%10;
startabc();
OE=0;
check();
}
此程序是软件部分的核心,根据压力传感器的两成值,可以其量程在0-10kg,二将其进行模数转换后,采集到的数值应该与其一一对应,本系统中所采用的模数转换芯片的精度是8位,所以意味着将0-10kg的值分成了28,所以100000g/256=39g,所以对于转换后的数字结果,每增加1,其质量增加了39g,所以在程序中,经过模数转换后的结果du在乘以39后就是重量值,把它赋值给double型变量weight中,取这个变量的每一位的值并存到wei1、wei2……中就得到重量值,最后将重量值赋给数码管显示函数,即可在硬件系统上正确的显示出重量数值。
本系统值得改进的地方,由于本系统中所选用的重量传感器以及数模转换传感器的精度不是很高,所以重量值得精度还是欠缺。
3.4程序流程图
参考文献
[1]郁有文,常健,程继红.传感器原理及工程应用[M]第二版.西安:
电子科技大学出版社,2003.
[2]纪宗南.单片机外围器件实用手册[M]第一版.北京:
北京航空航天大学出版社,2000.
[3]何立民.单片机应用技术选编[M]第一版.北京:
北京航空航天大学出版社,2000.
[4]梅立凤,王艳秋,张军.单片机原理与接口技术[M]第一版.北京:
清华大学出版社,2006.
附录
一、程序
#include
sbitST=P3^4;//ADC0809控制端
sbitALE=P3^3;
sbitEOC=P3^2;
sbitOE=P3^1;
sbitCLK=P3^0;
sbitLHJ_A=P0^0;//数码管位选
sbitLHJ_B=P0^1;
sbitLHJ_C=P0^2;
sbitaoao=P3^7;
sbitled=P3^6;
doubleweight=0;
intwe8=0;intwe7=0;intwe6=0;intwe5=0;intwe4=0;intwe3=0;intwe2=0;intwe1=0;
codeunsignedchars[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//数码管编码
#defineSMG_1LHJ_C=0;LHJ_B=0;LHJ_A=0
#defineSMG_2LHJ_C=0;LHJ_B=0;LHJ_A=1
#defineSMG_3LHJ_C=0;LHJ_B=1;LHJ_A=0
#defineSMG_4LHJ_C=0;LHJ_B=1;LHJ_A=1
#defineSMG_5LHJ_C=1;LHJ_B=0;LH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 AT89S52 数字 电子称