简易多功能液体容器

【main.c】

#include "REG52.h"
#include "oled.h"
#include "HX711.h"
/*******************************************************************************/
sbit Trig = P2^1;
sbit Echo = P2^0;
sbit KEY2 = P3^3;//¼ì²âÈÜÒº
sbit KEY1 = P3^2;//ȥë



unsigned int  time=0;
float S=0;
bit   flag =0;
/*******************************************************************************/
unsigned long HX711_Buffer = 0;
float Weight_Maopi = 0;
float Weight_Shiwu = 0;
unsigned int Temp_Buffer = 0;
bit Flag_ERROR = 0;
#define GapValue 373
extern float salinity=0.000;
/*******************************************************************************/

float density(void)	
{
   	
	float i;
	i=Weight_Shiwu/(1.724*(353-S));
	return(i);
}

int category(void)
{
   
	int i;
	if((density()<1.000)&&(density()>0.500))		
	{
   
		i=1;//´¿¾»Ë®
	}
	else if(density()>1.010)
	{
   
		if(salinity==0)
		{
   
			i=2;//ÑÎË®
		}
		else
		{
   
			if(salinity<=density())
				i=3;//ŨÑÎË®
			else
				i=4;//µ­ÑÎË®
			salinity=density();
		}
	}
  	
	return(i);
}

void display_category()
{
   
	switch(category())
	{
   
		case 1:		OLED_ShowCHinese(58,6,15);//Àà
							OLED_ShowCHinese(74,6,16);//Àà
							OLED_ShowCHinese(90,6,17);//Àà
							OLED_ShowCHinese(106,6,37);//Àà
	            break;
		
		case 2:		OLED_ShowCHinese(58,6,18);//Àà
							OLED_ShowCHinese(74,6,19);//Àà
							OLED_ShowCHinese(90,6,37);//Àà
							OLED_ShowCHinese(106,6,37);//Àà

		          break;
							
		case 3:		OLED_ShowCHinese(58,6,19);//Àà
							OLED_ShowCHinese(74,6,21);//Àà
							OLED_ShowCHinese(90,6,22);//Àà
							OLED_ShowCHinese(106,6,37);//Àà

	            break;
				
		case 4:		OLED_ShowCHinese(58,6,23);//Àà
							OLED_ShowCHinese(74,6,24);//Àà
							OLED_ShowCHinese(90,6,25);//Àà
							OLED_ShowCHinese(106,6,37);//Àà

	            break;
				
}
	}




void OLED_dispaly()
{
   
		OLED_ShowCHinese(1,0,0);//¼ò
		OLED_ShowCHinese(15,0,1);//Ò×
		OLED_ShowCHinese(29,0,2);//¶à
		OLED_ShowCHinese(43,0,3);//¹¦
		OLED_ShowCHinese(57,0,4);//ÄÜ
		OLED_ShowCHinese(68,0,5);//Òº
		OLED_ShowCHinese(85,0,6);//Ìå
		OLED_ShowCHinese(99,0,7);//ÈÝ
		OLED_ShowCHinese(113,0,8);//Æ÷
		
		OLED_ShowCHinese(10,2,9);//Òº
		OLED_ShowCHinese(26,2,10);//λ
		OLED_ShowChar(42,2,':');//:
		OLED_ShowNum(50,2,353-S,4,16);
		OLED_ShowString(82,2,"mm");

		
		
		OLED_ShowCHinese(10,4,11);//ÖØ
		OLED_ShowCHinese(26,4,12);//Á¿
		OLED_ShowChar(42,4,':');//:
		OLED_ShowNum(58,4,Weight_Shiwu*10/1000,1,16);
		OLED_ShowNum(66,4,(int)(Weight_Shiwu*10)/100%10,1,16);
		OLED_ShowNum(74,4,(int)(Weight_Shiwu*10)/10%10,1,16);
		OLED_ShowString(82,4,".");
		OLED_ShowNum(90,4,(int)(Weight_Shiwu*10)%10,1,16);
		OLED_ShowString(98,4,"g");

		
		
		OLED_ShowCHinese(10,6,13);//ÖÖ
		OLED_ShowCHinese(26,6,14);//Àà
		OLED_ShowChar(42,6,':');//
		//OLED_ShowNum(66,6,(int)(density()*10)/10,1,16);
		//OLED_ShowString(74,6,".");
		//OLED_ShowNum(82,6,(int)(density()*100)/10,1,16);
		//OLED_ShowNum(98,6,(int)(density()*1000)/10,1,16);
	//	OLED_ShowNum(114,6,(int)(density()*1000)%10,1,16);
		

}


void Conut(void)
	{
   
	 time=TH0*256+TL0;
	 TH0=0;
	 TL0=0;
	
	 S=(time*1.85)/10.0;   
	 
	}

void zd0() interrupt 1 		
  {
   
    flag=1;							 
  }
	
 void  StartModule() 		       
  {
   
	  Trig=1;			                     
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_();
	  _nop_(); 
	  _nop_(); 
	  _nop_(); 
	  _nop_();
	  Trig=0;
  }

/*******************************************************************************/
 void main()
 {
   	

	 	TMOD=0x01;		  
		TH0=0;
		TL0=0;          
		ET0=1;            
		EA=1;				 	
		OLED_Init();			//³õʼ»¯OLED  
		OLED_Clear(); 
				

	 		Get_Maopi();				//³ÆëƤÖØÁ¿				
			while(1) 
	{
   			Get_Weight();			//³ÆÖ	 
				OLED_dispaly();
				Scan_Key();
/**********************************************************************************/
			 StartModule();
	     while(!Echo);		//?RX?????
	    TR0=1;			    //????
			 while(Echo);			//?RX?1?????
	     TR0=0;				//????
      Conut();			//??
/**********************************************************************************/		

	}	  
}


void Scan_Key()
{
   
	if(KEY1 == 0)
	{
   
		Delay_ms(5);
		if(KEY1 == 0)
		{
   
			while(KEY1 == 0);
			Get_Maopi();			//ȥƤ
		}	
	}
	if(KEY2 ==0)
	{
   
		Delay_ms(5);
		if(KEY2 == 0)
		{
   
			display_category();
		}	
	}
}

//****************************************************
//³ÆÖØ
//****************************************************
void Get_Weight()
{
   
	Weight_Shiwu = HX711_Read();
	Weight_Shiwu = Weight_Shiwu - Weight_Maopi;		//»ñÈ¡¾»ÖØ
	if(Weight_Shiwu > 0)			
	{
   	
		Weight_Shiwu = Weight_Shiwu/GapValue; 	//¼ÆËãʵÎïµÄʵ¼ÊÖØÁ¿
																		
																		
		if(Weight_Shiwu > 5000)		//³¬Öر¨¾¯
		{
   
			Flag_ERROR = 1;	
		}
		else
		{
   
			Flag_ERROR = 0;
		}
	}
	else
	{
   
		Weight_Shiwu = 0;
		Flag_ERROR = 1;				//¸ºÖر¨¾¯
	}
	
}

//****************************************************
//»ñȡëƤÖØÁ¿
//****************************************************
void  Get_Maopi()
{
   
	Weight_Maopi = HX711_Read();	
} 


//****************************************************
//MSÑÓʱº¯Êý(12M¾§ÕñϲâÊÔ)
//****************************************************
void Delay_ms(unsigned int n)
{
   
	unsigned int  i,j;
	for(i=0;i<n;i++)
		for(j=0;j<123;j++);
}

【oled.h】

#include "REG52.h"
#ifndef __OLED_H
#define __OLED_H			  	 
#define  u8 unsigned char 
#define  u32 unsigned int 
#define OLED_CMD  0	//дÃüÁî
#define OLED_DATA 1	//дÊý¾Ý

sbit OLED_CS=P0^4; //Ƭѡ
sbit OLED_RST =P0^2;//¸´Î»
sbit OLED_DC =P0^3;//Êý¾Ý/ÃüÁî¿ØÖÆ
sbit OLED_SCL=P0^0;//ʱÖÓ D0£¨SCLK£
sbit OLED_SDIN=P0^1;//D1£¨MOSI£© Êý¾Ý


#define OLED_CS_Clr()  OLED_CS=0
#define OLED_CS_Set()  OLED_CS=1

#define OLED_RST_Clr() OLED_RST=0
#define OLED_RST_Set() OLED_RST=1

#define OLED_DC_Clr() OLED_DC=0
#define OLED_DC_Set() OLED_DC=1

#define OLED_SCLK_Clr() OLED_SCL=0
#define OLED_SCLK_Set() OLED_SCL=1

#define OLED_SDIN_Clr() OLED_SDIN=0
#define OLED_SDIN_Set() OLED_SDIN=1;



#define SIZE 16
#define XLevelL		0x02
#define XLevelH		0x10
#define Max_Column	128
#define Max_Row		64
#define	Brightness	0xFF 
#define X_WIDTH 	128
#define Y_WIDTH 	64	    						  
//-----------------OLED¶Ë¿Ú¶¨Òå----------------  					   
void delay_ms(unsigned int ms);
//OLED¿ØÖÆÓú¯Êý
void OLED_WR_Byte(u8 dat,u8 cmd);	    
//void OLED_Display_On(void);
//void OLED_Display_Off(void);	   							   		    
void OLED_Init(void);
void OLED_Clear(void);
void OLED_DrawPoint(u8 x,u8 y,u8 t);
void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
void OLED_ShowChar(u8 x,u8 y,u8 chr);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2);
void OLED_ShowString(u8 x,u8 y, u8 *p);	 
void OLED_Set_Pos(unsigned char x, unsigned char y);
void OLED_ShowCHinese(u8 x,u8 y,u8 no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
#endif  

[OLEDFONT.h]

#ifndef __OLEDFONT_H
#define __OLEDFONT_H 	   
//³£ÓÃASCII±í
//Æ«ÒÆÁ¿32
//ASCII×Ö·û¼¯
//Æ«ÒÆÁ¿32
//´óС:12*6
/************************************6*8µÄµãÕó************************************/
const unsigned char code F6x8[][6] =		
{
   
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值