[小项目]行李箱(蓝牙解锁、称重)

  1 #include <reg52.h>  2 #include "hx711.h"  3   4 sbit Led0=P0^0;       //ó?ò???D?μ?μ?áá?e′ú±í??μ??a1?  5 sbit Led1=P1^0;       //ó?D?μ?±íê?DDà?μ???á?£???ò???D?μ?′ú±í300g£?12????D?μ?  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 //3??? 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×éêy?Y£?ò?×?′óμ?ò???êy?Y?a???¤??á? 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?a?£ê?2£?×??a2¨ì??ê·¢éú?116     SCON=0x50;                //éè??′??ú·?ê?2117     TL1=0xFd;                //24002¨ì??êμ?3??μ,°?×óê1ó?12M?§??£?3??μ=256-12000000/32/12/2400118     TH1=0xFd;                //119     TR1=1;                    //???ˉ2¨ì??ê·¢éú                                                                                                            120     TH0=0xf8;      //?¨ê±2ms121     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)        //2é?ˉê?·?óDêy?Y?óê?131         {                  132             ldat=SBUF;        //êy?Y?Y′?óú±?á??D133             RI=0;                    //??D???0μè′y?óê?134             SBUF=ldat;        //???óê?μ?μ?êy?Y·¢?í3?è¥135             while(!TI);        //μè′y·¢?ííê3é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 1147 {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.代码检查无误,后来换用核心板对蓝牙模块进行测试,发现功能正常运行。很多时候在用开发板搭建电路的时候,在代码确定无误情况下若出现功能无法正常实现,应更换核心板进行功能测试。由于开发板内部连接一定的外设,所以会对引脚造成一定影响,从而影响正常的功能。

流转的时光,都成为命途中美丽的点缀,

[小项目]行李箱(蓝牙解锁、称重)

相关文章:

你感兴趣的文章:

标签云: