基于MCS51单片机的压力测量
系统的设计与实现
班级;
学号:
姓名:
指导老师:
摘要
以STC-51单片机为核心,应用变阻式应变片测量压力并通过ADC0809的转换,经过单片机处理后在数码管模块显示的智能压力测量系统。
是变阻式应变片和51单片机相结合的一个很典型的应用,本系统包括信号采集及转换电路、单片机最小系统、显示模块三个最基本的核心模块。
外围扩展了键盘模块、蜂鸣器报警模块,用以调节系统的测量和显示范围。
经试验证明,系统能正常工作且误差在允许误差范围内,符合所有技术指标。
1.方案设计
通过应变片,将机械形变变为电压信号,再通过三级集成放大电路把信号放大,之后,ADC0809把模拟信号转化为数字信号,输入到单片机中,通过按键的控制,将电压的信号输出以数码管的形式显示出来,如果电压信号超出报警上线,蜂鸣
器就发出报警信号。
2.硬件系统设计与分析
(1)应变片与信号放大器的电路分析
应变片运用的是电阻式应变片,原理是吸附在基体材料上的应变电阻随机械性形变而产生电阻变化的现象,即它可以将被测件上的应变变化转化成一种电信号。
桥式电路的输入信号是0~10v,经过电路后,输出的电压经过集成运放电路放大后,输入到A/D的In0口,完成信号的输入与传
(2)AD转换分析
A/D转换器是将模拟信号转化为数字信号,start与ale信号接到51到单片机的的p2.6接口,完成信号的输出,而clock接口接到74ls74d的2q接口, D0~D7接到单片机的p1.0~p1.7接口.
(3)单片机最小系统分析
单片机的RST是复位接口,刚开始时是低电平,闭合s1开关,接通电源,获得高电平,完成复位。
Xtal1与xtal2是晶振电路,为单片机提供工作频率,为12m。
P0.0~p0.7接到74hc573的段锁存器,完成数码管的段选择,p2.4~p2,7接到位锁存器,完成数码管的位选择。
(4)按键分析
(5)数码管分析
74hc573的段锁存器的a~g引脚连接到数码管的a~g引脚,完成数码管的段选择,来确定哪个数字亮;而位锁存器连接到w1~w4,完成位选择,选择哪个数码管亮,最终完成数码管的显示。
3.软件系统设计
#include<reg51.h>
unsigned char code table[]={
0x3f,0x06,0x5b,0x4f, //不带小数点的编码
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0xbf,0x86, //带小数点的编码
0xdb,0xcf,0xe6,0xed,
0xfd,0x87,0xff,0xef};
sbit DL=P2^4;
sbit WL=P2^5;
sbit Beep=P2^7;
sbit d1=P2^0;
sbit d2=P2^1;
sbit d3=P2^2;
sbit d4=P2^3;
sbit START=P2^6;
sbit MOVE=P3^7;
sbit UP=P3^6;
sbit DOWN=P3^5;
sbit OK=P3^4;
unsigned char pos=0;
unsigned int shan=0;
void delay(unsigned int t)
{
while(t--);
}
void display(unsigned int t) {
char c=shan/15;
shan++;
P0=table[t/1000];
if((pos==1)&&(c%2))
P0=0x00;
DL=1;
DL=0;
d1=0;
WL=1;
WL=0;
d1=1;
delay(500);
P0=table[t%1000/100+10];
if((pos==2)&&(c%2))
P0=0x00;
DL=1;
DL=0;
d2=0;
WL=1;
WL=0;
d2=1;
delay(500);
P0=table[t%1000%100/10];
if((pos==3)&&(c%2))
P0=0x00;
DL=1;
DL=0;
d3=0;
WL=1;
WL=0;
d3=1;
delay(500);
P0=table[t%1000%100%10];
if((pos==4)&&(c%2))
P0=0x00;
DL=1;
DL=0;
d4=0;
WL=1;
WL=0;
d4=1;
delay(500);
}
int set_value=50;
void main(void)
{
unsigned int adc_value=0;
IT0=1;
EX0=1;
EA=1;
while(1)
{
START=1;
START=0;
if(pos==0)
{
adc_value=P1;
adc_value=adc_value*1.9;
display(adc_value);
if(adc_value>set_value)
Beep=0;
else
Beep=1;
}
else
display(set_value);
// if(t>100)
// Beep=0;
// else
// Beep=1;
// t=t*1.9;
}
}
void init()interrupt 0 {
if(!MOVE)
{
pos++;
if(pos==5)
pos=1;
}
if(!UP)
{
if(pos==1)
set_value+=1000;
if(pos==2)
set_value+=100;
if(pos==3)
set_value+=10;
if(pos==4)
set_value+=1;
if(!DOWN)
{
if(pos==1)
set_value-=1000;
if(pos==2)
set_value-=100;
if(pos==3)
set_value-=10;
if(pos==4)
set_value-=1;
}
if(!OK)
{
pos=0;
}
if(set_value>9999)
set_value=set_value%10000;
if(set_value<0)
set_value=0;
}
4.系统调试
按照实验原理图连线,连接好线路后,打开电源,一个砝码一个砝码放,观察万能表示数与数码示数是否一致,并观察电压示数变化是否为定值。
通过实验发现两者示数基本一致,误差为0.01,在误差允许范围内,非常准确。
(实验模板)
(所焊板子及电压显示)
(所焊板子背面)
5.分析总结
通过此次三周左右的实验,弄懂了反向放大电路及单片机最小系统等等各方面的知识,并在同学和老师的帮助下,深刻理解了压力测量系统的工作原理,克服种种困难,最终焊出电路板,完成实验。
虽然完成了实验,但也发现了自己许多的不足,让自己在以后的学习中必须更加刻苦,认真,实践是理论最好的老师,养成自己多动手能力。
最后,感谢同学们的帮助及老师的耐心指导。