基于STC89C52单片机的智能电子称检测系统的设计(含参考论文、源码与焊接注意事项)

本篇文章论述的是基于STC89C52单片机的智能电子称检测系统的设计的详情介绍,如果对您有帮助的话,还请关注一下哦,如果有资源方面的需要可以联系我。

摘要

压力是工业生产过程中的重要参数之一。压力的检测或控制是保证生产和设备安全运行必不可少的条件。实现智能化压力检测系统对工业过程的控制具有非常重要的意义。本设计主要通过单片机及专用芯片对传感器所测得的模拟信号进行处理,使其完成智能化功能。介绍了智能压力传感器外围电路的硬件设计,并根据硬件进行了软件编程。

本次设计是基于STC89C52单片机的测量与显示。是通过压力传感器将压力转换成电信号,再经过运算放大器进行信号放大,送至24位A/D转换器,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。而在显示的过程中通过键盘,向计算机系统输入各种数据和命令,让单片机系统处于预定的功能状态,显示需要的值。

本设计的最终结果是,将软件下载到硬件上调试出来了需要显示的数据,当输入的模拟信号发生变化的时候,通过A/D转换后,LED将显示不同的数值。

关键词: 压力;STC89C52单片机;压力传感器;A/D转换器;LED显示;

元件清单


原理图


PCB图


实物图


代码


#include <reg52.h>	         //调用单片机头文件
#define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
#define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535
#include <intrins.h>

//数码管段选定义      0     1    2    3    4    5	6	 7	  8	   9	
uchar code smg_du[]={0x28,0xe1,0x32,0xa2,0x54,0xa1,0x21,0xea,0x20,0xa0,
				  	 0x60,0x25,0x39,0x26,0x31,0x71,0xff};	 //断码
//数码管位选定义
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
uchar dis_smg[8] = {0};	
uchar smg_i = 4;    //显示数码管的个位数
sbit beep = P2^3;   //蜂鸣器IO口定义

bit flag_lj_en;		 //按键连加使能
bit flag_lj_3_en;	 //按键连3次连加后使能  加的数就越大了 
uchar key_time,key_value;      //用做连加的中间变量
bit key_500ms  ;

bit flag_300ms ;
uchar menu_1;       //菜单设计的变量
uint t_high = 300;	   //上限报警值 

sbit hx711_dout=P2^7; 
sbit hx711_sck=P2^6; 

long weight;

unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;

uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;
uchar flag_200ms ;

#define GapValue 437.0

uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;

/***********************1ms延时函数*****************************/
void delay_1ms(uint q)
{
	uint i,j;
	for(i=0;i<q;i++)
		for(j=0;j<120;j++);
}

/***********************数码显示函数*****************************/
void display()
{
	static uchar i;   
	i++;
	if(i >= smg_i)
		i = 0;	
	P1 = 0xff;			 //消隐 
	P3 = smg_we[i];	 		 //位选
	P1 = dis_smg[i];		 //段选	        
}


/*************定时器0初始化程序***************/
void time_init()	  
{
	EA   = 1;	 	  //开总中断
	TMOD = 0X01;	  //定时器0、定时器1工作方式1
	ET0  = 1;		  //开定时器0中断 
	TR0  = 1;		  //允许定时器0定时
}

/********************独立按键程序*****************/
uchar key_can;	 //按键值

void key()	 //独立按键程序
{
	static uchar key_new;
	key_can = 20;                   //按键值还原
	P2 |= 0x07;
	if((P2 & 0x07) != 0x07)		//按键按下
	{
		if(key_500ms == 1)	//连加
		{
			key_500ms = 0;
			key_new = 1;
		}
		delay_1ms(1);	     	//按键消抖动
		if(((P2 & 0x07) != 0x07) && (key_new == 1))
		{						//确认是按键按下
			key_new = 0;
			switch(P2 & 0x07)
			{
				case 0x06: key_can = 3; break;	   //得到k2键值
				case 0x05: key_can = 2; break;	   //得到k3键值
				case 0x03: key_can = 1; break;	   //得到k4键值
			}
			flag_lj_en = 1;	 //连加使能
		}			
	}
	else 
	{
		if(key_new == 0)
		{
			key_new = 1;
			flag_lj_en = 0;		//关闭连加使能
			flag_lj_3_en = 0;	//关闭3秒后使能
			key_value = 0;		//清零
			key_time = 0;
			key_500ms = 0;
		}
	}	
}

/****************按键处理数码管显示函数***************/
void key_with()
{
	if(key_can == 1)	  //设置键
	{
		menu_1 ++;
		if(menu_1 >= 2)
		{
			menu_1 = 0;
			smg_i = 4;		  //数码管显示3位
			flag_300ms = 1;
		}
	}
	if(menu_1 == 1)			//设置高温报警
	{
		smg_i = 4;		  //数码管显示4位
		if(key_can == 2)
		{
			if(flag_lj_3_en == 0)
				t_high += 10 ;		//按键按下未松开自动加三次	
			else 
				t_high += 100;	//按键按下未松开自动加三次之后每次自动加10
			if(t_high > 9990)
				t_high = 9990;
		}
		if(key_can == 3)
		{
			if(flag_lj_3_en == 0)
				t_high -= 10 ;		//按键按下未松开自动减三次	
			else 
				t_high -= 100;	//按键按下未松开自动减三次之后每次自动减10
			if(t_high <= 10)
				t_high = 10;
		}
		dis_smg[0] = smg_du[t_high / 10 % 10];	           //取小数显示
		dis_smg[1] = smg_du[t_high / 100 % 10] ;  //取个位显示
		dis_smg[2] = smg_du[t_high / 1000 % 10] & 0xdf;	   //取十位显示
		dis_smg[3] = 0x64;	 //H
	}	
}  

/****************报警函数***************/
void clock_h_l()
{
	static uchar value;
	if(weight >= t_high)
	{
		value ++;  //消除实际距离在设定距离左右变化时的干扰
		if(value >= 2)
		{
			beep = ~beep; 	  //蜂鸣器报警			
		}	
	}
	else
	{
		beep = 1;	
	}			
}


void Delay__hx711_us(void)
{
	_nop_();
	_nop_();
}

unsigned long HX711_Read(void)	//增益128
{
	unsigned long count; 
	unsigned char i; 
  	hx711_sck=0; 
	Delay__hx711_us();
  	hx711_dout=1; 
  	while(hx711_dout==0); 
  	for(i=0;i<24;i++)
	{ 
		hx711_sck=0; 
	  	count=count<<1; 
	  	hx711_sck=1; 
	  	if(hx711_dout)
			count++; 
	} 
 	hx711_sck=1; 
    count=count^0x8000;//下降沿来时,转换数据
	Delay__hx711_us();
	hx711_sck=0;  
	return(count);
}

void get_weight()	  //获取被测物体重量
{
	weight = HX711_Read();
	weight = weight - Weight_Maopi;		//获取净重
	if(weight > 0)			
	{	
		weight = (unsigned int)((float)weight/GapValue); 	//计算实物的实际重量																	
	}
	else
	{
		weight = 0;
	}
}

/*************定时器0中断服务程序***************/
void time0_int() interrupt 1
{	
	static uchar value;			 //定时2ms中断一次
	TH0 = 0xf8;
	TL0 = 0x30;     //2ms
	value++;	  
	if(value >= 100)
	{
		value = 0;	  
		flag_300ms = 1;
	}
	if(flag_lj_en == 1)	   //按下按键使能
	{
		key_time ++;
		if(key_time >= 250) //500ms
		{
			key_time = 0;
			key_500ms = 1; //500ms
			key_value ++;
			if(key_value > 3)
			{
				key_value = 10;
				flag_lj_3_en = 1; //3次后1.5秒连加大些
			}						
		}
	}
}

参考论文


Design of pressure detecting system based on single-chip

Abstract

Pressure is one of the important parameters in the process of industrial production. Pressure detection or control is an essential condition to ensure production and the equipment to safely operating, which is of great significance. The single-chip is infiltrating into all fields of our lives, so it is very difficult to find the area in which there is no traces of single-chip microcomputer. In this graduation design, primarily through by using single-chip and dedicated chip, handling of analog signal measured by the sensor to complete intelligent function. This design illustrates external hardware circuit design of intelligent pressure sensor, and conduct software development to the hardware.

The design is based on measurement and display of STC89C52 single-chip. This

is the pressure sensors will convert the pressure into electrical signals. After using operational amplifier, the signal is amplified, and transferred to the 8-bit A/D converter. Then the analog signal is converted into digital signals which can be identified by single-chip and then converted by single-chip into the information which can be displayed on LED monitor, and finally display output. In the course of show, through the keyboard to input all kinds of data and commands into the computer, the single-chip will locate in a predetermined function step to display required values.

The end result of this design is that by downloading software to the hardware, it will get the data which is required to display by debugging. When the input analog signals change, the LED monitor will display different values through the A/D converting.

Key words: pressure; STC89C52 single-chip; pressure sensor; A/D converter; LED monitor;

1.1 研究背景

近年来,随着微型计算机的发展,他的应用在人们的工作和日常生活中越来越普遍。工业过程控制是计算机的一个重要应用领域。其中由单片机构成的嵌入式系统已经越来越受到人们的关注。现在可以毫不夸张的说,没有微型计算机的仪器不能称为先进的仪器,没有微型计算机的控制系统不能称其为现代控制系统的时代已经到来。

压力测量对实时监测和安全生产具有重要的意义。在工业生产中,为了高效、安全生产,必须有效控制生产过程中的诸如压力、流量、温度等主要参数。由于压力控制在生产过程中起着决定性的安全作用,因此有必要准确测量压力。为了测到不同位置的压力值,本次设计为基于单片机智能压力测量系统。通过压力传感器将需要测量的位置的压力信号转化为电信号,再经过运算放大器进行信号放大,送至8位A/D转换器,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。基于单片机的智能压力检测系统,选择的单片机是基于STC89C52单片机的测量与显示,将压力经过压力传感器变为电信号,再通过三运放放将电信号放大为标准信号为0-5V的电压信号,然后进入A/D转换器将模拟量转换为数字量,我们所采样的A/D转换器为ADC0832,ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI数据输入端,可以轻易的实现通道功能的选择。 

正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。 

为了提高单片机系统I/O口线的利用效率,利用单片机AT87C51的串行口和串行移位寄存器74LS164扩展输出多位LED显示.

键盘是单片机系统实现人机对话的常用输入设备。我们通过键盘,向计算机系统输入各种数据和命令,亦可通过使用键盘,让单片机系统处于预定的功能状态。要想实现压力的显示需硬件与软件配合,最终调试出来。

1.2 基于单片机的智能压力检测的原理   

本次设计是以单片机组成的压力测量,系统中必须有前向通道作为电信号的输入通道,用来采集输入信息。压力的测量,需要传感器,利用传感器将压力转换成电信号后,再经放大并经A/D转换为数字量后才能由计算机进行有效处理。然后用LED进行显示,而键盘的作用是改变输入量的系数的。它的原理图如图1.1所示。

图1.1 压力测量仪表原理方框图

我们这次主要做的是A/D转换,单片机键盘和显示,我们选用的A/D转换器是ADC0832,单片机为STC89C52,键盘为4乘4的键盘,显示为4位数码管显示。根据硬件电路编程,调试出来并显示结果。

1.2.1 压力的概念

压力是工业生产中的重要参数之一,为了保证生产正常运行,必须对压力进行测量和控制,但需说明的是,这里所说的压力,实际上是物理概念中的压强,即垂直作用在单位面积上的力。

在压力测量中,常用绝对压力、表压力、负压力或真空度之分。所谓绝对压力是指被测介质作用在容器单位面积上的全部压力,用符号pj表示。用来测量绝对压力的仪表称为绝对压力表。地面上的空气柱所产生的平均压力称为大气压力,用符号pq表示。用来测量大气气压力的仪表叫气压表。绝对压力与大气压力之差。称为表压力,用符号pb表示。即pb=pj-pq。当绝对压力值小于大气压力值时,表压力为负值(即负压力),此负压力值的绝对值,称为真空度,用符号pz表示。

压力是工业生产中的重要参数,如高压容器的压力超过额定值时便是不安全的,必须进行测量和控制。在某些工业生产过程中,压力还直接影响产品的质量和生产效率,如生产合成氨时,氮和氢不仅须在一定的压力下合成,而且压力的大小直接影响产量高低。此外,在一定的条件下,测量压力还可间接得出温度、流量和液位等参数。

1643年,意大利人托里拆利首先测定标准的大气压力值为760毫米汞柱,奠定了液柱式压力测量仪表的基础。1847年,法国人波登制成波登管压力表,由于结构简单、实用,很快在工业中获得广泛应用,一直是常用的压力测量仪表。

二十世纪上半叶出现了远传压力表和电接点压力表,从而解决了压力测量值的远距离传送和压力的报警、控制等问题。60年代以后,为适应工业控制、航空工业和医学测试等方面的要求,压力测量仪表日益向体积轻巧、耐高温、耐冲击、耐振动和数字显示等方向发展。

1.2.2 测量压力的意义

压力是过程生产中四大重要参数之一,它在检测生产过程能否完全可靠正常运行的重要参数指标,尤其在化工生产过程中压力这一参数更显得尤为重要。

在化工生产过程中,压力即影响物料平衡,也影响化学反应速速,是标志生产过程能否正常进行的重要参数。

安全生产的需要,从确保安全生产的角度,压力检测也是非常重要的。如:确保压力容器内的压力在安全指标之内,确保易燃易爆介质的压力不超标。

在其他工业生产中压力检测于控制也非常重要。常可见到一些工业装置上都有压力表。如:汽包压力,当压力过高容易爆炸,压力低动力不足;还有炉膛压力;一般维持在0mmH2O,高了炉门缝冒烟尘,低了膛内出现负压降低温度。若维持在10 mmH2O,节能20%。

压力也是间接测量物位的手段,用孔板测量流量仅能产生差压,而这个差压考压力检测的方法来测取才能最终求出流量。液面的高度可以靠测取压力的大小来表示。

总之,压力检测是一般成产过程所不可缺少的环节,只有按工艺要求保持压力的稳定,才能维持生产的正常进行。所以压力准确测量在实际过程是非常重要的。

第三章 软件设计

3.1 A/D转换器的软件设计

HX711是一款专为高精度电子秤而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A 或通道B,与其内部的低噪声可编程放大器相连。通道A 的可编程增益为128 或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B 则为固定的64 增益[9],用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D 转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。

3.2 单片机与键盘的接口程序设计

STC89C52单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线P1.0-P1.3分别接有4个上拉电阻到正电源+5V,并把列线P1.0-P1.3设置为输入线,行线P1.4-P.17设置为输出线。4根行线和4根列线形成16个相交点。检测当前是否有键被按下。检测的办法是P1.4-P1.7输出全“0”,读取P1.0-P1.3的状态,若P1.0-P1.3为全“1”,则无键闭合,不然有键闭合。 去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。 若有键被按下,应识别出是哪一个键闭合。办法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出: P1.7 1 1 1 0   P1.6 1 1 0 1   P1.5 1 0 1 1   P1.4 0 1 1 1 在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,不然有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。为了保证键每闭合一次CPU仅作一次处理,必须却除键释放时的抖动。

 从以上分析得到单片机键盘扫描程序的流程图如图3.2所示。程序如下

   

图3.2单片机矩阵式键盘接口流程图

3.4 LED数码管显示程序设计

利用单片机内部的串行接口,可以实现静态的显示处理。这样不仅可以节省单片机的并行接口资源,而且在大多数不使用串行接口的情况下,可以减少或是免去扩展接口。

在这种设计中,串行口工作于方式0,数据的输入输出都通过RxD实现,移位脉冲则由TxD发出。每次传送一个字节数据。每输出一个字节数据,单片机自动使串行中断请求标志TI置。通过测试该状态,即可确定该字节是否发送完毕。由硬件电路图可知,74LS164是串行输入并行输出的移位寄存器。它具有两个串行输入端和8位并行输出端(QA~QH)。

当显示数据从RxD端输出到移位寄存器74LS164的输入端AB时,74LS164将串行数据转换成8位输出码QA~QH,然后加到共阳极LED显示器上。究竟在哪一位上显示,还要P1口的状态而定。当某一位为低电平时,该位LED显示,其他位不显示。由于接口电路中显示模型输出地址和位选信号可一次选中,故只要一次输出即可显示一位。

图3.3 LED的显示流程图

参考文献

【1】 李朝青编著.单片机原理及接口技术.北京[M]:北京航天航空大学出版社,1994

【2】 何立民编著.单片机应用系统设计.北京[M]:北京航天航空大学出版社,1994

【3】 潘新民,王燕芳编著.微型计算机与传感器.北京[M]:人民邮电出版社,1998

【4】 徐爱卿,孙涵芳编著 MCS-51单片机原理及应用.北京[M]:北京航天航空大学出版社,1993

【5】 于时亮,张友德编著.单片微机控制技术.上海[M]:复旦大学出版社,1994

【6】 李华主编.MCS-51系列单片机及实用接口技术.北京[M]:北京航天航空大学出版社,1993

【8】吴勤勤主编,电动控制仪表及装置.上海[M]化学工业出版社,1990

【9】 王化祥,张淑英,传感器应用及原理.天津[M]:天津大学出版社,1991

【10】杜维,过程检测技术及仪表.北京[M]:中国电力出版社,1998


资源下载


如果有需要这个系统的源码、仿真、论文等资源的可以私信我。感谢你的阅读~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝奶茶的喵喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值