找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32F103C8T6单片机+HX711+OLED(4脚)显示数据不变?

[复制链接]
跳转到指定楼层
楼主
大佬们,上面是.c文件和main.c文件,接线我检查过了没有问题,就是不知道为什么OLED上面显示一直是9316g如图1,数据不变呜呜
图片可以看检查到我的接线~(图4就手捏着的四根线接HX711)球球大家帮我康康


  1. ***********main.c********************************************************************************************
  2. #include "stm32f10x.h"
  3. #include "Delay.h"
  4. #include "HX711.h"
  5. #include "OLED.h"
  6. #include "NVIC.h"
  7. #include "key.h"
  8. u32 zong=0;       //总的饮水量
  9. u8 gongzuo_status=1;//检测状态,0的时候不检测,1的时候检测
  10. /*
  11. KEY0的作用是初始化称重目标,比如按下KEY0就代表此时的重量成了我们还没喝水时候的重量
  12. KEY1的作用是累加饮水量,按一下保存当前的饮水量,然后按下KEY0继续开始继续检测
  13. */
  14. int main(void)
  15. {        
  16.   u8 key=0;                //定义按键扫描状态        
  17.         HX711_Init();         //HX711传感器初始化
  18.         Key_Init();              //按键初始化
  19.         //delay_init();            //延时初始化
  20.         SysTick_Delay_Init();
  21.         User_NVIC_Config();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  22.         //uart_init(9600);               //串口初始化为9600
  23.         OLED_Init();
  24.         Get_Maopi();                                     //称取初始化状态,此状态下可获得最开始的值
  25.         Delay_ms(1000);
  26.         Get_Maopi();                                     //重新获取初始化状态
  27.         
  28.         OLED_ShowString(1, 1, "Wei:");
  29.         OLED_ShowString(1, 9, "g");
  30.     OLED_ShowString(2, 1, "zon:");
  31.         OLED_ShowString(2, 9, "g");
  32.         OLED_ShowString(3, 1, "swu:");
  33.         OLED_ShowString(3, 9, "g");

  34.         while(1)
  35.         {
  36.                 key=Key_GetNum();//毛皮KEY0-(key=0)-B10,KEY1-key=1-B11,
  37.                 if(key==0)     //判断KEY0按键按下
  38.                 {
  39.                         Delay_ms(20);
  40.                         if(key==0)
  41.                         {
  42.                                 Get_Maopi();             //设置当前重量为初始重量(毛皮重量)
  43.                                 zong=0;            //清空饮水量,重新进行计算
  44.                                 gongzuo_status=1;   
  45.                         }
  46.                 }
  47.                 else if(key==1)//判断KEY1按键按下
  48.                 {
  49.                         Delay_ms(20);
  50.                         if(key==1)
  51.                         {
  52.                                 zong+=Weight_Shiwu;//设置当前饮水量给总体//a+=b就是a=a+b
  53.                                 gongzuo_status=0;  //工作状态为0
  54.                         }
  55.                 }
  56.                 else if(key==2)//判断KEY2按键按下
  57.                 {
  58.                         Delay_ms(20);
  59.                         if(key==2)
  60.                         {
  61.                                 Get_Maopi();           //设置当前重量为初始重量
  62.                                 gongzuo_status=1;  //工作状态为1
  63.                         }
  64.                 }
  65.                
  66.           if(gongzuo_status==0)
  67.                 {Weight_Shiwu=0; }   //如果工作状态为0,则检测到的饮水量一直为0
  68.                
  69.           else Get_Weight();     //如果工作状态为1,则检测饮水量大小
  70.                 OLED_ShowNum(1,5,(zong+Weight_Shiwu),4); //打印总水量
  71.                 OLED_ShowNum(2,5,zong-7296,4);           //打印总水量
  72.         OLED_ShowNum(3,5,Weight_Shiwu,4);        //打印总水量

  73.                 Delay_ms(1000);
  74.         }
  75. }
复制代码
  1. *******************HX711.C**********************************************************************************
  2. #include "stm32f10x.h"                  // Device header
  3. #include "Delay.h"
  4. u32 HX711_Buffer;
  5. u32 Weight_Maopi;
  6. s32 Weight_Shiwu;
  7. u8  Flag_Error=0;

  8. //校准参数
  9. //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
  10. //当发现测试出来的重量偏大时,增加该数值。
  11. //如果测试出来的重量偏小时,减小改数值。
  12. //该值可以为小数
  13. #define GapValue 900
  14. #define HX711_DOUT GPIO_Pin_12

  15. void HX711_Init(void)
  16. {
  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);         //使能PF端口时钟

  18.         GPIO_InitTypeDef GPIO_InitStructure;        

  19.         //HX711_SCK
  20.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                                 //端口配置
  21.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  22.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  23.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB
  24.         
  25.         //HX711_DOUT
  26.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  27.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;    //输入上拉
  28.     GPIO_Init(GPIOB, &GPIO_InitStructure);  
  29.         
  30.   GPIO_SetBits(GPIOB,GPIO_Pin_13);                                                 //初始化设置为0
  31. }

  32. u32 HX711_Read(void)        //增益128
  33. {
  34.         unsigned long count=0;
  35.         unsigned char i=0;
  36.   //当数据输出管脚DT为高电平,AD转化器还未准备好,此时SCK为低电平,因此先对管脚电平进行初始化
  37.   
  38.         GPIO_SetBits(GPIOB,GPIO_Pin_12);//HX711_DOUT=1;
  39.         Delay_us(1);
  40.         GPIO_ResetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=0;
  41.         Delay_us(1);
  42.    
  43.   while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==0);
  44.   for(i=0;i<24;i++)
  45.         {
  46.         GPIO_SetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=1;
  47.     count=count<<1; //DT左移一位
  48.         Delay_us(1);
  49.         GPIO_ResetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=0;
  50.         Delay_us(1);
  51.         if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==1)
  52.         {
  53.           count++;
  54.         }
  55.                 Delay_us(1);
  56.         }
  57.          
  58.         GPIO_SetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=1;
  59.     count=count^0x800000;//第25个脉冲下降沿来时,转换数据
  60.         Delay_us(1);
  61.         GPIO_ResetBits(GPIOB,GPIO_Pin_13);        //HX711_SCK=0;
  62.         Delay_us(1);
  63.         return count;
  64. }

  65. void Get_Maopi(void)
  66. {
  67.         Weight_Maopi = HX711_Read();        
  68. }

  69. //****************************************************
  70. //称重
  71. //****************************************************
  72. void Get_Weight(void)
  73. {
  74.         HX711_Buffer = HX711_Read();
  75.         if(HX711_Buffer <= Weight_Maopi)                        
  76.         {
  77.                 Weight_Shiwu = 0;
  78.                 Weight_Shiwu = Weight_Maopi-Weight_Shiwu;                        //获取实物的AD采样数值。        
  79.                 Weight_Shiwu = (s32)((float)Weight_Shiwu/GapValue); //计算实物的实际重量
  80.                 //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。
  81.                 //当发现测试出来的重量偏大时,增加该数值。
  82.                 //如果测试出来的重量偏小时,减小改数值。
  83.         }
  84. }
  85. //void Get_Weight2(void)
  86. //{

  87. //        Weight_Shiwu =HX711_Read()/GapValue;
  88. //if(Weight_Shiwu>=Weight_Maopi)
  89. //        {
  90. //                Weight_Shiwu=Weight_Shiwu-Weight_Maopi;
  91. //                Weight_Shiwu -= 18305;
  92. //                if(Weight_Shiwu < 0 )
  93. //                        Weight_Shiwu = 0;
  94. //        }
  95. //else
  96. //                        Weight_Shiwu = 0;
  97. //}
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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