找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 336|回复: 0
打印 上一主题 下一主题
收起左侧

基于51单片机HX711压力检测程序及手机蓝牙APP控制

[复制链接]
跳转到指定楼层
楼主
HX711压力检测,用LCD1602,包含app的e4a文件源码
通过51单片机检测压力,将数据通过编写的蓝牙APP发送到手机显示,同时手机可以控制设定的压力值。

电路原理图如下:


e4a源码:

制作出来的HX711压力检测实物图如下:


单片机源程序如下:
  1. #include<reg51.h>
  2. #include "HX711.h"
  3. #include "LCD1602.h"
  4. #include "eeprom52.h"

  5. // char UART_data;
  6. // char shuju;
  7. /**********按键定义*********/
  8. sbit SKY_1=P1^3;//校准
  9. sbit SKY_2=P1^4;//加
  10. sbit SKY_3=P1^5;//减
  11. bit  SKY_1_flag=0;//防抖标志位
  12. bit  SKY_2_flag=0;
  13. bit  SKY_3_flag=0;
  14. sbit SKY_4=P1^6;//减
  15. /*********蜂鸣器***********/
  16. sbit BEEP=P1^0;
  17. /***********称重定义区***********/
  18. unsigned long Weight_Maopi = 0;
  19. long Weight_Shiwu = 0;
  20. long Weight_Warn=2000;//报警值
  21. /********向app发送数据字符串定义区****/
  22. uchar see_add=0;//
  23. bit sendFlag=0;
  24. uchar saa[13];
  25. uchar UART_data; //定义串口接收数据变量
  26. //校准参数
  27. //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
  28. //当发现测试出来的重量偏大时,增加该数值。
  29. //如果测试出来的重量偏小时,减小改数值。
  30. //该值可以为小数
  31. #define GapValue 410
  32. //****************************************************
  33. //MS延时函数(12M晶振下测试)
  34. //****************************************************
  35. void Delay_ms(unsigned int n)
  36. {
  37.         unsigned int  i,j;
  38.         for(i=0;i<n;i++)
  39.                 for(j=0;j<123;j++);
  40. }
  41. void sendChar(uchar Value)  //发送一个字节数据  
  42. {  
  43.      SBUF = Value;      
  44.             while(!TI);
  45.                 TI=0;
  46. }
  47. void sendAll(uchar *pValue) //发送一组数据  
  48. {  
  49.     while((*pValue) != '\0')   //如果没有发送完毕就继续发  
  50.     {  
  51.         sendChar(*pValue);      //发送1字节数据  
  52.         pValue++;                 //指向下1个字节  
  53.     }  
  54. }
  55. //****************************************************
  56. //获取毛皮重量
  57. //****************************************************
  58. void Get_Maopi()
  59. {
  60.         Weight_Maopi = HX711_Read();        
  61. }
  62. //****************************************************
  63. //称重
  64. //****************************************************
  65. void Get_Weight()
  66. {
  67.         Weight_Shiwu = HX711_Read();
  68.         Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取净重
  69.         if(Weight_Shiwu > 0)                        
  70.         {        
  71.                 Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue);         //计算实物的实际重量
  72.                                                                                                                                                 
  73.                                                                                                                                                 
  74.                 if(Weight_Shiwu > Weight_Warn)                //超重报警
  75.                 {
  76.                         BEEP = 0;        
  77.                 }
  78.                 else
  79.                 {
  80.                         BEEP = 1;
  81.                 }
  82.         }
  83.         else
  84.         {
  85.                 Weight_Shiwu = 0;
  86.         }
  87.         
  88. }
  89. //1602显示函数
  90. void dis_play()
  91. {
  92.         LCD1602_write(0,0x80);
  93.         LCD1602_writebyte("weighting:");
  94.         LCD1602_write(1,Weight_Shiwu/1000 + 0X30);
  95.         LCD1602_write(1,Weight_Shiwu%1000/100 + 0X30);
  96.         LCD1602_write(1,Weight_Shiwu%100/10 + 0X30);
  97.         LCD1602_write(1,Weight_Shiwu%10 + 0X30);
  98.         LCD1602_writebyte("g  ");
  99.         LCD1602_write(0,0xc0);
  100.         LCD1602_writebyte("warning: ");
  101.         if(Weight_Warn/1000==0) LCD1602_writebyte("0");  else LCD1602_write(1,Weight_Warn/1000+ 0X30);
  102.         if(Weight_Warn%1000/100==0) LCD1602_writebyte("0"); else LCD1602_write(1,Weight_Warn%1000/100+ 0X30);
  103.         if(Weight_Warn%100/10==0) LCD1602_writebyte("0"); else LCD1602_write(1,Weight_Warn%100/10+ 0X30);
  104.         if(Weight_Warn%10==0) LCD1602_writebyte("0"); else LCD1602_write(1,Weight_Warn%10+ 0X30);
  105.         LCD1602_writebyte("g  ");

  106. }
  107. //按键控制
  108. void sky_kg()
  109. {
  110.         if(SKY_1==0||UART_data==0x31)
  111.         {
  112.                 UART_data=0;
  113.                 if(SKY_1_flag==1)
  114.                 {
  115.                         SKY_1_flag=0;
  116.                         Get_Maopi();                        //去皮
  117.                 }
  118.         }
  119.         else
  120.                  SKY_1_flag=1;

  121.         if(SKY_2==0||UART_data==0x32)
  122.         {
  123.                 UART_data=0;
  124.                 if(SKY_2_flag==1)
  125.                 {
  126.                         SKY_2_flag=0;
  127.                         Weight_Warn+=100;
  128.                         if(Weight_Warn>5000)
  129.                                 Weight_Warn=5000;
  130.                         SectorErase(0x2000);
  131.                         byte_write(0x2000,Weight_Warn);
  132.                 }
  133.         }
  134.         else               
  135.         {
  136.                 SKY_2_flag=1;
  137.         }
  138.          if(SKY_3==0||UART_data==0x33)
  139.                 {
  140.                         UART_data=0;
  141.                         if(SKY_3_flag==1)
  142.                         {
  143.                                 SKY_3_flag=0;
  144.                                 Weight_Warn-=100;
  145.                                 if(Weight_Warn<0)
  146.                                         Weight_Warn=0;
  147.                                 SectorErase(0x2000);
  148.                                 byte_write(0x2000,Weight_Warn);
  149.                         }
  150.                 }
  151.                 else
  152.                 {
  153.                          SKY_3_flag=1;
  154.                 }
  155. }
  156. /***********上电读取************/
  157. void eeprom_red()
  158. {
  159.         Weight_Warn=byte_read(0x2000);
  160.         if(Weight_Warn>5000||Weight_Warn<0)
  161.                 Weight_Warn=2000;
  162. }

  163.   void chushihua()
  164.   {
  165.     TMOD=0X20;                        //定时器工作方式设计,方式2,自动重装初值的8位定时器
  166.         TH1=0XFA;                        //设置波特率4800,此处晶振频率是按12MHZ计算的
  167.         TL1=0XFA;
  168.         SCON=0X50;                         //设置串行口工作方式1,串行口允许接收
  169.         PCON=0X80;                        //波特率加倍
  170.         ES=1;                            //打开串行口中断允许位
  171.         EA=1;                                 //打开总中断
  172.         TR1=1;                                 //开启定时器
  173.   }
  174. /********数据包发送函数**********/
  175. void steed()
  176. {
  177.                 saa[0]='d';
  178.                 saa[1]='a';
  179.                 saa[2]='t';
  180.                 saa[3]=Weight_Shiwu/1000 + 0X30;
  181.                 saa[4]=Weight_Shiwu%1000/100 + 0X30;
  182.                 saa[5]=Weight_Shiwu%100/10 + 0X30;
  183.                 saa[6]=Weight_Shiwu%10 + 0X30;

  184.                 saa[7]=Weight_Warn/1000+0X30;
  185.                 saa[8]=Weight_Warn%1000/100 + 0X30;
  186.                 saa[9]=Weight_Warn%100/10 + 0X30;
  187.                 saa[10]=Weight_Warn%10 + 0X30;

  188.                 saa[11]='t';
  189.                 saa[12]='a';
  190.                 SKY_4=0;
  191.                 sendAll(saa);
  192. }
  193.   /*主函数*/
  194.   void main()
  195.   {
  196. ……………………

  197. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

单片机代码和apk文件e4a文件 51hei附件下载:
信号采集控制器源码.7z (5.33 MB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表