基于单片机的身高体重测量仪教材.docx
- 文档编号:24704102
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:53
- 大小:2.37MB
基于单片机的身高体重测量仪教材.docx
《基于单片机的身高体重测量仪教材.docx》由会员分享,可在线阅读,更多相关《基于单片机的身高体重测量仪教材.docx(53页珍藏版)》请在冰豆网上搜索。
基于单片机的身高体重测量仪教材
河北大学工商学院
本科生毕业论文(设计)
题目:
基于单片机的身高体重测量仪
学部信息科学与工程学部
学科门类工学
专业电子科学与技术
学号2010481027
姓名武立鑫
指导教师
2014年5月19日
基于单片机的身高体重测量仪
摘 要
本文介绍了一个基于单片机的身高体重测量仪,本设计以单片机为平台,利用金属应变片来感应人体的重量,传感器输出模拟量经AD转换器转换成数字量传入单片机。
利用超声波在介质中传播速度固定的原理可由超声波在空气中的传播时间算出传播距离,实现身高的测量。
通过串口电路实现了单片机与上位机的通信。
本设计硬件电路包括电源电路、单片机最小系统电路、液晶屏电路、串口通信电路、独立按键电路、蜂鸣器电路、超声波模块电路、AD转换器电路和全桥电路。
软件部分包括主程序、系统初始化程序、AD转换器通信程序、按键检测程序、超声波信号发射及接收程序、液晶屏驱动程序。
本设计可以同时测量人体的身高和体重,还可以将所测数据自动编号发送到上位机上显示或以文档的形式导出并保存。
基于单片机身高体重测量仪制作成本低,电路设计简单,显示清楚,基本满足设计要求。
关键词:
STC89C52;超声波;HX711;上位机
HeightandweightmeasurementinstrumentbasedonMCU
ABSTRACT
ThispaperintroducesaheightandweightmeasurementinstrumentbasedonMCU,ThedesignuseaMCUastheplatform,usingmetalstraingaugestoinductionoftheweightofthehumanbody.Becausetheultrasonicpropagationvelocityisfixed,soaccordingtothepropagationtimetocalculatethepropagationdistance,soastogettheheightinformation.ThroughtheserialportMCUcancommunicatewiththePC.Thehardwarecircuitincludespowercircuit,MCUminimumsystemcircuit,LCDcircuit,serialcommunicationcircuit,independentkeycircuit,abuzzercircuit,ultrasonicmodulecircuit,ADconvertercircuitandafullbridgecircuit.Thesoftwareincludesthemainprogram,thesysteminitializationprogram,ADconvertercommunicationprogram,buttondetectionprogram,theultrasonicsignalemittingandreceivingprocedures,LCDdriverprogram.
Thisdesigncansimultaneouslymeasurethebodyheightandweight,andcanalsosenddatatothehostcomputerdisplayorderivedformdocumentandsave.HeightandweightmeasurementinstrumentbasedonMCUoflowcost,simplecircuitdesign,cleardisplay,basicallymeetthedesignrequirements.
Keywords:
STC89C52;Ultrasonic;HX711;Hostcomputer
目 录
1 绪论
随着科技和社会的发展,电子产品已经渗透到了社会的各个领域,人们对个人的体质状况也越来越重视,在此背景下产生了许多用于测试人体健康标准的电子设备和器材,如血糖仪、电子体温计、身高体重测量仪等就是其中典型的例子。
传统的身高体重测量仪具有不便于携带、功能单一、智能化程度低等缺点,因此进一步研究身高体重测量仪有着非常现实的意义。
多功能、易携带、低功耗、智能化是未来身高体重测量仪的发展趋势。
身高体重测量仪以成为人们日常生活和生产中不可缺少的物品,它在医疗应用、学校体检、家庭应用等方面都有广泛的应用。
上世纪50年代中期电子技术的发展推动身高体重测量仪制造业的飞速发展,经过50余年的不断改进与完善,我国的身高体重测量仪从最初的全机械型到机电结合型再发展到现在的全电子型和数字智能型,计量方法从模拟测量向数字测量发展[1]。
未来的身高体重测量仪将与智能化接轨,与其他测量仪器集成在一起,形成多功能的测量仪。
随着科技的不断发展,身高体重测量仪将从具有单纯测量功能发展到具有数据传输功能、判断功能、记忆功能。
在新的时代里,面貌一新的身高体重测量仪将发挥更大的作用。
本设计制作了一个基于STC89C52RC单片机的身高体重测量仪,它可以同时测量人体的重量和高度,同时还可以将所测信息自动编号发送到上位机进行显示和保存,另外本设计还可以通过按键设置显示模式以及校准。
与传统的身高体重测量仪相比具有易携带、多功能、智能化程度高等优点。
2 身高体重测量仪总体方案设计
本课题的目标是设计一个基于单片机的身高体重测量仪,该系统所测量的身高允许范围为0.1m-2.5m,精度为±1cm,体重允许范围为0kg-200kg,精度为±0.5kg。
测量数据能够显示在液晶屏幕上还可以通过串口传输到上位机通过电脑进行显示和数据的存储。
2.1 设计方案的选定
(1)本次设计选用STC89C52单片机作为主控芯片,STC89C52与传统的51系列单片机相比功能更加强大,价格也更低。
利用Keil软件编译程序使开发更为简单,它可以支持串口直接下载程序,不需要专门的下载器,用ISP软件将程序下载到单片机中,单片机即可执行相应的功能,开发工具简单。
(2)系统所选器件均为5V供电,所以本设计电源模块选用LM2940三端稳压芯片,直流电压输入到LM2940的输入端,输出端输出5V作为整个系统的电源。
(3)本设计选用ZX12864R液晶屏来显示测量信息,ZX12864R液晶屏可显示汉字及图形,内置8192个中文汉字和128个字符。
模块具有光标显示、画面移位、自定义字符、睡眠模式等功能,模块有并行和串行两种连接方法[2]。
(4)体重的测量使用压力应变片,它可以将人体的体重转换为电压信号,模拟信号经AD转换器处理转换成数字值传入到单片机进行处理。
(5)身高的测量采用超声波传感器,传感器的发射器发出的超声波以固定速度υ在空气中传播,到达地面时被反射返回,由接收器接收,其往返时间为t,可由单片机的定时器测量,由s=vt/2即可算出传输距离即身高[3]。
(6)由于设计要求将测量信息发送到上位机上显示和保存,且STC89C52单片机在烧录程序时也使用串口,所以本设计中选用了MAX232芯片作为TTL电平与RS232电平转换的器件构成串口通信电路。
除上述主要器件以外系统的设计还增加了蜂鸣器、按键等模块来完善系统的设计,系统设计框图如图2-1所示。
图2-1 系统设计框图
2.2 身高体重测量仪的工作过程
本设计开机后液晶屏幕上会显示当前的重量以及身高信息,系统在硬件设计上留有四个独立按键,若按下电路板上的“发送”按键系统会将当前的身高和体重信息编号为一号发送到上位机进行显示,若再次按下“发送”按键则系统会将编号自动加一并再次向上位机发送最新更新的身高和体重信息。
若按下电路板上的“保持”按键系统会将当前测量的值显示在液晶屏幕上并保持不变同时液晶会显示当前处于保持显示的状态,在保持状态下再次按下“保持”按键系统会取消保持状态返回实时测量的状态,同时液晶显示回到正常测量的显示界面。
若在测量状态下按下“校准+”按键测量的重量值会加0.1kg,若按下“校准-”按键测量的重量值会减0.1kg,这两个按键用于人体秤的校准操作,即在没有被测物体放在称上时可将显示值调节为0kg,用以消除不确定性因素所引起的误差。
3 身高体重测量仪的硬件电路设计
身高体重测量仪的核心器件是STC89C52单片机,硬件电路包括电源电路、单片机最小系统电路、ZX12864R液晶屏电路、串口通信电路、独立按键电路、蜂鸣器电路、超声波模块接口电路、AD转换器接口电路以及由四个应变片组成的全桥电路。
3.1 电源电路
电源是一个系统能正常工作的基础,为系统的运行提供可靠的能源保证,因此电源模块的设计至关重要。
本设计采用LM2940三端稳压芯片,LM2940是一款三端低压型稳压器,最大输出电流为1A,最大输入电压26V,内部含静态电流降低电路、电流限制、过热保护、电池反接和反插入保护电路[4],输出电压为5v。
由于其电路简单且在本设计中单片机以及其他器件的工作电压均是5V,所以本设计的电源部分采用LM2940芯片作为稳压芯片,电源电路如图3-1所示。
图3-1 电源电路
3.2 单片机最小系统电路
STC89C52RC单片机与传统的8051系列单片机相比具有速度高、低功耗、抗干扰能力强、开发容易等特点,且指令代码完全兼容传统8051单片机。
ISP(在系统可编程)不需要专用的下载器,可以通过串口(RxD/P3.0,TxD/P3.1)下载用户编写的程序到单片机中。
STC89C52RC片上集成了512字节RAM和8k字节的用户程序存储空间[5],用户向其写入程序即可执行相应的功能。
单片机的第18和19引脚外接晶振,构成时钟电路,C7和C8是两个30pF的瓷片电容对晶振起微调的作用。
当EA端接高电平时,单片机则执行内部ROM中的指令。
通用IO口P1、P2、P3是准双向口/弱上拉,P0口是漏极开路输出,在本设计中P0作为液晶的数据总线接口,所以需外加上拉电阻。
VCC引脚为单片机的电源正极接5V电源电压,GND为单片机的电源地。
由上拉电阻、时钟电路、电源电路构成了单片机的最小系统。
单片机最小系统电路原理图如图3-2所示。
图3-2 单片机最小系统电路
3.3 串口通信电路
本设计中程序的烧录以及系统要与上位机进行通信所以本设计还包含串口通信电路,其主要器件是MAX232芯片。
标准的RS232电平比较高,而常用的TTL电平最高为5V,如果需要通信那么在硬件连接上必须进行两种电平的转换。
电脑USB口输出电压为12V,如果直接与单片机相连会烧坏单片机及周围器件,所以本设计选用MAX232芯片来进行电平转换。
MAX232的供电电压为5V,外围电路简单只有几个104瓷片电容。
MAX232芯片的13脚(R1in)、12脚(R1out)、11脚(T1in)、14脚(T1out)构成了该芯片的第一数据通道。
8脚(R2in)、9脚(R2out)、10脚(T2in)、7脚(T2out)构成第二数据通道。
TTL电平数据从T1in、T2in输入经MAX232芯片转换成RS232电平数据后从T1out、T2out输出。
RS232数据从R1in、R2in输入到MAX232芯片转换成TTL数据后从R1out、R2out输出[6]。
串口通信电路原理图如图3-3所示。
图3-3 串口通信电路
3.4 超声波模块接口电路
本设计使用HC-SR04超声波模块来测量人体的身高,该模块共有四个引脚,其中1脚为电源正极,其典型的工作电压为5V,4脚为电源地。
第二脚Trig为控制端口用于控制超声波脉冲的发射,3脚为超声波脉冲接收端,当模块接收到超声波脉冲后该引脚的电平会发生变化[7],所以这两个引脚也与单片机的普通IO口相连。
超声波模块接口电路如图3-4所示。
图3-4 超声波模块接口电路
3.5 独立按键电路
单片机P1、P2、P3端口是弱上拉端口,即P1、P2、P3端口内部带有上拉电阻,所以单片机复位后这几组端口输出均为高电平[8]。
本设计的按键接口如图3-5所示,在正常情况下按键所接的引脚均为高电平,当按键按下时单片机的引脚与电源地相连即其输入变为低电平,单片机通过检测引脚上的电平变化即可以检测按键是否按下[9]。
独立按键电路如图3-5所示。
图3-5 独立按键电路
3.6 液晶屏电路
本设计采用的是ZX12864R液晶模块。
ZX12864R液晶显示模块内置128个字符(8X16点阵)、8192个中文汉字(16X16点阵)及64X256点阵显示RAM(GDRAM),可以显示汉字或者图形。
数据总线可选择8位或4位并行/3位串行,电源电压3.3V-5V,具有光标显示、睡眠模式、自定义字符、画面移位等功能。
ZX12864R液晶屏模块的第1脚GND为模块的电源地,第2脚VCC为电源正极,两个电源引脚分别接在电源模块的5V输出上。
第3脚V0为对比度调节输入参考电压,在本设计中将其接在一个电位器的滑动端,通过调节电位器可以调节其滑动端输出电压,从而达到了调节液晶对比度的目的。
第4脚RS为并行的指令/数据选择信号,在串行模式下为片选信号。
第5脚RW为并行的读写选择端,串行模式下为数据端口。
第6脚E为并行的使能信号,在串行模式下做为同步时钟。
第7到第14引脚为八位并行数据端口,在本设计中液晶的工作模式为8位并行模式,所以这八个引脚与单片机的P0口相连。
第15脚PSB为并/串行接口选择,输入高电平为并行模式,输入低电平串行模式。
第17脚RST为复位引脚低电平有效。
第19引脚BLA和第20引脚BLK分别是液晶背光灯的正负极,在本设计中将其直接接到了电源的正负极上[2]。
第16脚和第18引脚空接。
液晶屏电路原理图如图3-6所示。
图3-6 液晶屏模块电路
3.7 蜂鸣器电路
蜂鸣器是一种电子讯响器,本设计采用蜂鸣器作为提示设备,用于在按键按下或进行其他操作时发出提示音。
蜂鸣器由单片机的普通IO端口控制,驱动电路主要是一个PNP型三极管对电流进行放大来驱动蜂鸣器工作[10]。
其电路原理图如图3-7所示。
图3-7 蜂鸣器电路
3.8 HX711AD转换器模块接口电路
本设计的AD转换器采用HX711模块,HX711AD转换器是一款专为电子秤而设计的高精度24位AD转换器芯片。
模块内部集成了时钟电路、稳压电源等外围电路,具有抗干扰能力强、响应速度快、集成度高等特点。
芯片内提供的稳压电源可以直接向外部全桥电路提供差分电压,所以系统设计上无需另外的模拟电源。
两路可选择差分输入,通道A模拟差分输入可直接与全桥电路的差分输出端相连。
由于全桥电路输出的差分电压信号比较小,HX711芯片还内置了差分信号放大电路,芯片内部有两个转换通道,A通道的可编程增益较大,可以选择128或64。
这些增益所对应的满量程差分输入电压分别是±20mV或±40mV,本设计中使用的是HX711模块的A通道。
串行通信管脚由SCK和DT组成,DT为数据输出引脚,SCK为时钟信号输入端[11]。
HX711AD转换器模块接口电路如图3-8所示。
图3-8 HX711模块接口电路
3.9 全桥电路
本设计使用四个压力传感器组成全桥电路,每个传感器的内部有两个500欧姆的压力应变片。
当传感器空载时每个传感器内部的两个电阻的阻值均相同,当有负载时传感器内部的两个电阻的阻值一个增大一个减小但总阻值保持不变。
每个传感器的量程为50kg,所以本设计的量程为50kgx4=200kg。
如图3-9-1为全桥电路实物连接图,E+和E-为差分电压的输入端,接在HX711AD转换器模块的电源输出上。
A+和A-为全桥电路差分信号输出端,接在HX711AD转换器模块的A通道的差分信号输入端。
当传感器空载时四个传感器内部的两个电阻阻值均相同,对应到图3-9-2全桥电路原理图中R1、R2、R3、R4的阻值均相同,所以A+和A-之间的差分电压为零。
若在传感器上放上负载则图3-9-1中每个传感器白色信号线与红色信号线之间的电阻和红色信号线与黑色信号线之间的电阻一个增大一个减小,对应到图3-9-2全桥电路原理图中对角线的两个电阻阻值的变化趋势相同,而相邻的两个电阻阻值变化趋势相反,从而A+和A-间的差分电压输出增大,所以负载的重量与输出的差分电压为线性关系。
图3-9-1 全桥电路实物连接图
图3-9-2 全桥电路原理图
3.10 总体硬件电路及其工作原理
整个系统由9V适配器供电经过LM2940稳压模块输出5V电源为整个系统供电,上电后电源指示灯点亮。
上电开机后若四个应变片所受压力发生变化那么全桥电路中各个电阻的阻值也会随之发生变化,从而差分输出就会发生变化,且与重量呈线性关系,差分输出连接到AD转换器的A通道上,AD转换器将差分输出电压由模拟量转化成数字量并通过固定的通信协议传送到单片机。
超声波传感器模块则直接与单片机相连,通过IO口控制其产生激励信号和读取返回信号。
单片机将所得到的信息处理后通固定的读写时序控制液晶模块显示。
通过检测单片机引脚的电平可以检测按键是否按下从而实现发送、保持、校准等功能,当按键按下时由单片机控制的蜂鸣器也会发出对应的提示音。
当“发送”按键按下时单片机会通过MAX232电路将电平转换,再将数据传送到上位机上。
电路的实物如图3-10所示。
图3-10 电路的实物图
4 软件设计
本设计逻辑相对复杂且代码量较大不宜使用汇编语言,所以采用C语言进行编程,程序设计采用模块化结构,即将不同模块的程序封装到不同的C文件中再将其中的函数、所用到的头文件、变量等在对应的头文件中声明。
软件部分包括主程序、系统的初始化程序、HX711AD转换器通信程序、按键检测程序、超声波信号发射及接收程序、液晶屏幕驱动程序。
4.1 主函数的编写
主程序中将各个模块初始化完成后进入循环,在主程序中主要包含了两个状态分别是正常测量的状态和保持显示的状态,当检测到“保持”按键按下后则在两个状态下相互跳转。
在正常测量状态下依次检测“校准”“发送”“保持”按键是否按下,若“校准”和“发送”按键按下单片机则执行相应的操作,若“保持”按键按下则进入保持状态。
在保持状态下则一直检测“保持”按键是否再次按下,若按下则返回正常测量的状态。
在正常测量状态下若没有按键按下那么系统则一直测量并显示当前的重量和高度值。
主程序的流程图如图4-1所示。
图4-1 主函数的流程图
主程序:
voidmain(void)
{
lcdreset();//初始化液晶屏
system_init();//初始化串口定时器
clrscreen();//清屏
while
(1)//循环
{
switch(pattern)//状态查询
{//正常测量模式
case1:
if(Key_Scan
(2)||weight>4000)//人体秤校准
Correct_w++;
if(Key_Scan(3))
Correct_w--;
if(Key_Scan
(1))//发送键按下
{
beep=0;//开蜂鸣器提示
Number++;//编号加1
for(i=0;i<4;i++)//发送数据到上位机
{
SBUF=Number_data[i];
while(!
TI);
TI=0;
}
beep=1;//关蜂鸣器提示音
}
if(Key_Scan(4))//”保持“按键按下
pattern=2;//状态变量变为保持状态
weight=Read_Count();//读取体重值
hzkdis(p);//显示体重值
height=sonic();//读取身高值
hzkdis(p);//显示身高值
break;
case2:
//保持状态
if(Key_Scan(4))//“保持”键按下
pattern=1;//状态变量变为正常状态
break;
default:
break;
}
}
}
4.2 系统初始化函数的编写
本设计中因为超声波模块需要用定时器来测量超声波脉冲的传播时间,另外系统工作时需要向上位机发送数据,所以在程序开始时需先初始化单片机定时器和串行端口相应的寄存器[12]。
系统的初始化程序如下:
voidsystem_init(void)
{
SM0=0; //设置串口工作模式
SM1=1;
TMOD=0x21;//设置定时器工作模式
TH1=0xfd;//设置波特率为9600
TR1=1;//开定时器1
}
4.3 HX711AD转换器通信函数的编写
HX711AD转换芯片的串行通讯线由管脚SCK和DT组成,DT为数据线,SCK用于时钟信号的输入和选择输入通道和增益的大小。
当HX711芯片数据输出管脚DT输出高电平时,表示AD转换器还没有准备好输出数据,此时时钟输入信号SCK应为低电平。
当DT变为低电平后,表示AD转换器准备好输出数据,这时SCK应输入25到27个不等的时钟脉冲。
第一个时钟脉冲的上升沿后可读取输出24位数据的最高位,直至第24个时钟脉冲完成,24位输出数据从最高位至最低位逐位输出完成。
第25到27个时钟脉冲用来选择下一次转换的输入通道和增益。
本设计使用AD转换器的A通道,增益为128,所以输入25个时钟脉冲[11]。
HX711AD转换器芯片的读写时序如图4-3所示。
图4-3 HX711读写时序
HX711AD转换芯片通信函数:
unsignedlongRead_Count(void)
{
unsignedlongCount;
unsignedchari;
ADSK=0;//先将时钟线拉低
Count=0;//将存储转换值的中间变量清零
while(ADDO);//等待HX711准备好输出数据
for(i=0;i<24;i++)//逐位读取24位AD转换器转换好的值
{
ADSK=1;//时钟线拉高
Count=Count<<1;//变量左移一位
ADSK=0;//信号线拉低
if(ADDO)//数据输入为高电平
{
Count++;//最低位置一
}
}
ADSK=1;//时钟线拉高
Count=Count^0x800000;//最高位取反
ADSK=0;//信号线拉低
Count=Count*0.00048;//转为实际的重量值
Count=Correct_w-Count;//调零
return(Count);//重量值返回
}
4.4 按键检测函数的编写
在本文3.5节可知,按键的检测主要是检测单片机IO是否出现低电平。
本设计中将所有按键的检测写在了一个函数中,函数的参数为要检测的按键的编号,返回值为真
(1)时说明相应的按键按下,返回值为假(0)时则说明按键没有按下。
在理想情况下若单片机的IO口出现低电平即可认为是对应的按键按下,但在实际情况下由于按键在闭合和断开的瞬间触点会存在抖动现象,所以按键所连接的IO口上就会出现一些杂波信号造成单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 身高 体重 测量仪 教材