应变片压力传感器+直流电机

#include "reg51.h"
#include <intrins.h>
#include <math.h> 

#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long

uint num=0,sum=0,i=0,weigth=0,m=0;
float k=0;
unsigned int weigth1=0,weigth2=0,key=0,signal=1070;

sbit IN1=P1^0;			  //???????о????
sbit IN2=P1^1;
sbit EN1=P1^2;


sbit ADC_DI=P1^3;		//?????CH0,CH1
sbit ADC_DO=P1^3;		//?????
sbit ADC_CLK=P1^5;		//????
sbit ADC_CS=P1^4;		//????


//???n??12MHz??
void delay_s(unsigned int n)
{ 
	unsigned int i=0,j=0;
	 for(i=0;i<n;i++) 
		for(j=0;j<21738;j++); 
}

//???n????
void delay_ms(unsigned int n)
{ 
	unsigned int i=0,j=0;
	 for(i=0;i<n;i++) 
	for(j=0;j<123;j++);
}




void ADC_init()		   //ADC0832?????
{
	ADC_CS=1;		   //?????????????Ч
	ADC_CLK=1;		   //????
	ADC_DI=1;		   //?????
	_nop_();_nop_();
}

						 
void ADC_start()	   //ADC0832???
{
	ADC_CS=0;			//????
	_nop_();_nop_();
	ADC_CLK=0;			//???????????????
	_nop_();_nop_();
	ADC_DI=1;			//?????????
	_nop_();_nop_();
	ADC_CLK=1;			//?????????????????????????????
	_nop_();_nop_();				
}

void ADC_select_channel()	//ADC0832??????????????CH0
{
	ADC_CLK=0;					//???????????????
	_nop_();_nop_();
	ADC_DI=0;				//DI?1?????????????????????DI?
	_nop_();_nop_();
	ADC_CLK=1;					//?????????????????????????????
	_nop_();_nop_();
	
	ADC_CLK=0;					//????????????????
	_nop_();_nop_();
	ADC_DI=0;				//???????????DI?0???CH0????DI?1?????
	_nop_();_nop_();
	ADC_CLK=1;					//???????????????????????????????
	_nop_();_nop_();		
}

uchar ADC0832()
{
	uchar dat1,dat2,i;	   //???????????dat1?????8λdat2?????8λ
	ADC_CLK=0;				   //?????????????????
	_nop_();_nop_();
	ADC_DI=0;				   //???????
	_nop_();_nop_();
	ADC_DO=1;				   //??????
	_nop_();_nop_();
	ADC_CLK=1;				   //???????????????????????????????壩
	_nop_();_nop_();

	for(i=0;i<8;i++)	   //???8????????????ε???????
	{
		ADC_CLK=0;			   //???????????????
		_nop_();_nop_();
		dat1=dat1<<1;	   //????dat1???????????λ??dat1???λ?????λ7λ??0λ
		if(ADC_DO==1)		   //?ж????????????
		{
			dat1=dat1|0x01;   //???????????????????dat1???λ???1
		}
		ADC_CLK=1;			   //?????????????????????????????
		_nop_();_nop_();
	}

	for(i=0;i<8;i++)		  //???8?????????????ε???????
	{
		dat2=dat2>>1;		  //????dat2???????????λ?????dat2???λ????λ0λ????7λ??
		if(ADC_DO==1)		  //?ж????????????
		{
			dat2=dat2|0x80;	   //???????????????????dat2???λ??1
		}
		ADC_CLK=0;			   //????????????????
		_nop_();_nop_();
		ADC_CLK=1;			   //???????????????????????????????
		_nop_();_nop_();
	}

	ADC_CS=1;				  //??????
	_nop_();_nop_();

	if(dat1==dat2)			  //?ж????????????
	{
		return dat1;		   //???????????uchar ADC0832()=dat1
	}
	else
	{
		return 0;			  //?????????????0
	}
}

//??????涨???????
void exter() interrupt 0
{
	i++;																	   
	if(i==key)
	{
		EN1=1;
		IN1=1;
		IN2=1;
		i=0;	
	}
} 


void main()
{
	ADC_init();
	ADC_start();
	IT0=1;
	EA=1;
	EX0=1;

	while(1)
	{
		ADC_select_channel();
		while(1)							//?
		{
			weigth1=ADC0832();
			delay_s(20);
			weigth2=ADC0832();
			if(weigth1>=60)
				{
					if(abs(weigth2-weigth1)/weigth2<=0.1)	
						break;
				}
		}
		if(weigth2<=90)						//60-90kg???????
			{
				k=(weigth2/5-12)*signal/1.5;	
				key=ceil(k);
				IN1=1;
				IN2=0;
				EN1=1;
				delay_ms(4000);							
			}
		else								//????
			{
				key=signal*4;
				IN1=1;
				IN2=0;
				EN1=1;
				delay_ms(4000);
			}

		while(1)							//????????????С??5kg??
		{ 
			ADC_init ();
			ADC_start ();
			weigth1=ADC0832();
//			weigth1=10,weigth2=10;				 	 //test	 
			if(weigth1<=20)
			{
				delay_ms(1500);
				ADC_init ();
				ADC_start ();
				weigth2=ADC0832();
				if(weigth2<=20)
					{						
						IN1=0;
						IN2=1;
						EN1=1;
						i=0;
						delay_ms(4000);
//						weigth1=90,weigth2=90; 	//test
			 			break;
					}
			}
		}
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值