1 #include <reg52.h>
  2 #include "hx711.h"
  3 
  4 sbit Led0=P0^0;       //ÓÃÒ»¿ÅСµÆµÄÁÁÃð´ú±íËøµÄ¿ª¹Ø
  5 sbit Led1=P1^0;       //ÓÃСµÆ±íʾÐÐÀîµÄÖØÁ¿£¬Ã¿Ò»¸öСµÆ´ú±í300g£¬¹²Îå¿ÅСµÆ
  6 sbit Led2=P1^1;
  7 sbit Led3=P1^2;
  8 sbit Led4=P1^3;
  9 sbit Led5=P1^4;
 10 
 11 unsigned long HX711_Buffer = 0;
 12 unsigned int Weight_Maopi = 0,Weight_Shiwu = 0;
 13 unsigned int i=0;
 14 
 15 void init_led()
 16 {
 17    Led0=0;
 18      Led1=0;
 19      Led2=0;
 20      Led3=0;
 21      Led4=0;
 22      Led5=0;
 23 }
 24 //****************************************************
 25 //³ÆÖØ
 26 //****************************************************
 27 void Get_Weight()
 28 {
 29     HX711_Buffer = ReadCount();
 30     HX711_Buffer = HX711_Buffer/100;
 31     if(HX711_Buffer > Weight_Maopi)            
 32     {
 33         Weight_Shiwu = HX711_Buffer;
 34         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;               
 35         Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/2.08+0.05);      
 36         Weight_Shiwu=Weight_Shiwu/2;    
 37     
 38     }
 39 }
 40 
 41 void Get_Maopi()
 42 {
 43     unsigned char i = 0;
 44     unsigned int Temp_Weight = 0;
 45 
 46     Weight_Maopi = 0;
 47 
 48     for( i = 0 ; i < 10 ; i++)                 //È¡10×éÊý¾Ý£¬ÒÔ×î´óµÄÒ»¸öÊý¾ÝΪëƤÖØÁ¿
 49     {
 50         HX711_Buffer = ReadCount();
 51         Temp_Weight = HX711_Buffer/100;
 52 
 53         if( Temp_Weight > Weight_Maopi)
 54         {
 55             Weight_Maopi = Temp_Weight;     
 56         }
 57     }        
 58 } 
 59 
 60 void alarm()
 61 {
 62      if(Weight_Shiwu>=300&&Weight_Shiwu<600)
 63          {
 64             Led1=1;
 65               Led2=0;
 66               Led3=0;
 67               Led4=0;
 68               Led5=0;
 69          }
 70          if(Weight_Shiwu>=600&&Weight_Shiwu<900)
 71          {
 72             Led1=1;
 73               Led2=1;
 74               Led3=0;
 75               Led4=0;
 76               Led5=0;
 77          }
 78          if(Weight_Shiwu>=900&&Weight_Shiwu<1200)
 79          {
 80             Led1=1;
 81               Led2=1;
 82               Led3=1;
 83               Led4=0;
 84               Led5=0;
 85          }
 86          if(Weight_Shiwu>=1200&&Weight_Shiwu<1500)
 87          {
 88             Led1=1;
 89               Led2=1;
 90               Led3=1;
 91               Led4=1;
 92               Led5=0;
 93          }
 94          if(Weight_Shiwu>=1500)
 95          {
 96             Led1=1;
 97               Led2=1;
 98               Led3=1;
 99               Led4=1;
100               Led5=1;
101          }
102      if(Weight_Shiwu<300)
103          {
104             Led1=0;
105               Led2=0;
106               Led3=0;
107               Led4=0;
108               Led5=0;
109          } 
110 }
111 void main()
112 {
113     unsigned char ldat;
114     init_led();
115     TMOD=0X21;                //ÉèÖö¨Ê±Æ÷1Ϊģʽ2£¬×öΪ²¨ÌØÂÊ·¢ÉúÆ
116     SCON=0x50;                //ÉèÖô®¿Ú·½Ê½2
117     TL1=0xFd;                //2400²¨ÌØÂʵijõÖµ,°å×ÓʹÓÃ12M¾§Õñ£¬³õÖµ=256-12000000/32/12/2400
118     TH1=0xFd;                //
119     TR1=1;                    //Æô¶¯²¨ÌØÂÊ·¢Éú                                                                                                            
120     TH0=0xf8;      //¶¨Ê±2ms
121     TL0=0x30;
122     TR0=1;
123     EA=1;
124     ES=1;
125     ET0=1;
126     Get_Maopi();
127     while(1)
128     {
129 
130         if(RI)        //²éѯÊÇ·ñÓÐÊý¾Ý½ÓÊÕ
131         {                  
132             ldat=SBUF;        //Êý¾ÝÔÝ´æÓÚ±äÁ¿ÖÐ
133             RI=0;                    //ÖØÐÂÇå0µÈ´ý½ÓÊÕ
134             SBUF=ldat;        //½«½ÓÊÕµ½µÄÊý¾Ý·¢ËͳöÈ¥
135             while(!TI);        //µÈ´ý·¢ËÍÍê³É
136             TI=0;
137             if(ldat=='A')
138                 Led0=1;
139             if(ldat=='B')
140                 Led0=0;
141       }
142     alarm();
143     }
144 }
145 
146 void int0()interrupt 1
147 {
148    i++;
149      if(i==400)
150      {
151        Get_Weight();
152          i=0;
153      }
154      TH0=0xf8;
155      TL0=0x30;
156 }
main
 1 #ifndef __HX711_H__
 2 #define __HX711_H__
 3 
 4 
 5 #include <reg52.h>
 6 #include <intrins.h>
 7 
 8 sbit ADDO=P3^4; 
 9 sbit ADSK=P3^5; 
10 
11 unsigned long ReadCount(void);
12 
13 #endif
HX711.H
 1 #include "HX711.h"
 2 
 3 unsigned long ReadCount(void)
 4 {
 5 unsigned long Count;
 6 unsigned char i;
 7 ADSK=0; 
 8 Count=0;
 9 while(ADDO); 
10 for (i=0;i<24;i++)
11 {
12 ADSK=1; 
13 Count=Count<<1; 
14 ADSK=0; 
15 if(ADDO) Count++;
16 }
17 ADSK=1;
18 Count=Count^0x800000;
19 ADSK=0;
20 return(Count);
21 }
HX711.c

由于条件限制原材料不足以及个人比较慵懒,所以没用数码管来显示称出来的重量,也没有用机械锁,而是都用LED代替了相应的部分。 

这次项目中出现了几个问题:

1.刚开始用数码管显示重量时,本应该四个数码管同时显示,出现的结果却是一个个循环显示。

2.称出来的质量有时候直接从0变到5900多这个值。

3.在确认代码正常的情况下,蓝牙模块调试过程中,手机可以连接蓝牙模块,开发板却无法按照正常指令响应。

 

解决方法:

1.分析可能是因为CPU要处理的HX711 AD转换模块传过来的数值过大,因此计算需要耗费CPU大量资源,由于处理函数和显示函数都在main函数中,所以出现这种情况。最后,将HX711传过来的AD值放到定时器中断中处理,且每800毫秒处理一次。数码管得以正常显示。

2.分析可能由于硬件原因使得Get_Weight()函数中HX711_Buffer<Weight_Maopi,因而(此处需更改)

3.代码检查无误,后来换用核心板对蓝牙模块进行测试,发现功能正常运行。很多时候在用开发板搭建电路的时候,在代码确定无误情况下若出现功能无法正常实现,应更换核心板进行功能测试。由于开发板内部连接一定的外设,所以会对引脚造成一定影响,从而影响正常的功能。 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程

3954 0元 50元 限免