久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1377|回復: 0
收起左側

STM32F103C8T6單片機+HX711+OLED(4腳)顯示數據不變?

[復制鏈接]
ID:1071413 發表于 2023-4-13 09:59 | 顯示全部樓層 |閱讀模式
大佬們,上面是.c文件和main.c文件,接線我檢查過了沒有問題,就是不知道為什么OLED上面顯示一直是9316g如圖1,數據不變嗚嗚
圖片可以看檢查到我的接線~(圖4就手捏著的四根線接HX711)球球大家幫我康康

1

1

2

2

3

3

4

4

  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. //}
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色秀网站 | 一区二区成人 | 精品久久久久香蕉网 | 中文字幕免费中文 | 欧美一级毛片久久99精品蜜桃 | 国产福利久久 | 欧美v在线观看 | 国产一区二区三区免费 | av资源网站 | 99久久婷婷国产综合精品电影 | 精品视频一区二区三区 | 天堂久久久久久久 | 欧美一级二级三级视频 | 99精品免费 | 久久亚洲国产精品 | 精品国产乱码久久久久久影片 | 亚洲一级毛片 | 亚洲精品一区二区三区蜜桃久 | 日韩在线不卡视频 | 在线国产欧美 | 精品福利视频一区二区三区 | 免费黄色日本 | 视频二区在线观看 | 欧美日韩精品中文字幕 | 一级电影免费看 | 午夜激情小视频 | 男女网站免费观看 | 亚洲综合首页 | 91网在线观看 | 色综合久久久久 | 日韩欧美视频在线 | 国产精品国产三级国产aⅴ浪潮 | 99精品视频网 | 日韩欧美国产一区二区三区 | 国产精品高清在线 | 久久久国产视频 | 国产高清视频在线 | 亚洲国产一区在线 | 国产精品999 | 国产永久免费 | 欧美亚洲国产一区 |