【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,