大佬们,上面是.c文件和main.c文件,接线我检查过了没有问题,就是不知道为什么OLED上面显示一直是9316g如图1,数据不变呜呜
图片可以看检查到我的接线~(图4就手捏着的四根线接HX711)球球大家帮我康康
- ***********main.c********************************************************************************************
- #include "stm32f10x.h"
- #include "Delay.h"
- #include "HX711.h"
- #include "OLED.h"
- #include "NVIC.h"
- #include "key.h"
- u32 zong=0; //总的饮水量
- u8 gongzuo_status=1;//检测状态,0的时候不检测,1的时候检测
- /*
- KEY0的作用是初始化称重目标,比如按下KEY0就代表此时的重量成了我们还没喝水时候的重量
- KEY1的作用是累加饮水量,按一下保存当前的饮水量,然后按下KEY0继续开始继续检测
- */
- int main(void)
- {
- u8 key=0; //定义按键扫描状态
- HX711_Init(); //HX711传感器初始化
- Key_Init(); //按键初始化
- //delay_init(); //延时初始化
- SysTick_Delay_Init();
- User_NVIC_Config(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- //uart_init(9600); //串口初始化为9600
- OLED_Init();
- Get_Maopi(); //称取初始化状态,此状态下可获得最开始的值
- Delay_ms(1000);
- Get_Maopi(); //重新获取初始化状态
-
- OLED_ShowString(1, 1, "Wei:");
- OLED_ShowString(1, 9, "g");
- OLED_ShowString(2, 1, "zon:");
- OLED_ShowString(2, 9, "g");
- OLED_ShowString(3, 1, "swu:");
- OLED_ShowString(3, 9, "g");
- while(1)
- {
- key=Key_GetNum();//毛皮KEY0-(key=0)-B10,KEY1-key=1-B11,
- if(key==0) //判断KEY0按键按下
- {
- Delay_ms(20);
- if(key==0)
- {
- Get_Maopi(); //设置当前重量为初始重量(毛皮重量)
- zong=0; //清空饮水量,重新进行计算
- gongzuo_status=1;
- }
- }
- else if(key==1)//判断KEY1按键按下
- {
- Delay_ms(20);
- if(key==1)
- {
- zong+=Weight_Shiwu;//设置当前饮水量给总体//a+=b就是a=a+b
- gongzuo_status=0; //工作状态为0
- }
- }
- else if(key==2)//判断KEY2按键按下
- {
- Delay_ms(20);
- if(key==2)
- {
- Get_Maopi(); //设置当前重量为初始重量
- gongzuo_status=1; //工作状态为1
- }
- }
-
- if(gongzuo_status==0)
- {Weight_Shiwu=0; } //如果工作状态为0,则检测到的饮水量一直为0
-
- else Get_Weight(); //如果工作状态为1,则检测饮水量大小
- OLED_ShowNum(1,5,(zong+Weight_Shiwu),4); //打印总水量
- OLED_ShowNum(2,5,zong-7296,4); //打印总水量
- OLED_ShowNum(3,5,Weight_Shiwu,4); //打印总水量
- Delay_ms(1000);
- }
- }
复制代码- *******************HX711.C**********************************************************************************
- #include "stm32f10x.h" // Device header
- #include "Delay.h"
- u32 HX711_Buffer;
- u32 Weight_Maopi;
- s32 Weight_Shiwu;
- u8 Flag_Error=0;
- //校准参数
- //因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
- //当发现测试出来的重量偏大时,增加该数值。
- //如果测试出来的重量偏小时,减小改数值。
- //该值可以为小数
- #define GapValue 900
- #define HX711_DOUT GPIO_Pin_12
- void HX711_Init(void)
- {
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PF端口时钟
- GPIO_InitTypeDef GPIO_InitStructure;
- //HX711_SCK
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //端口配置
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
- GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB
-
- //HX711_DOUT
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //输入上拉
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_SetBits(GPIOB,GPIO_Pin_13); //初始化设置为0
- }
- u32 HX711_Read(void) //增益128
- {
- unsigned long count=0;
- unsigned char i=0;
- //当数据输出管脚DT为高电平,AD转化器还未准备好,此时SCK为低电平,因此先对管脚电平进行初始化
-
- GPIO_SetBits(GPIOB,GPIO_Pin_12);//HX711_DOUT=1;
- Delay_us(1);
- GPIO_ResetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=0;
- Delay_us(1);
-
- while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==0);
- for(i=0;i<24;i++)
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=1;
- count=count<<1; //DT左移一位
- Delay_us(1);
- GPIO_ResetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=0;
- Delay_us(1);
- if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12)==1)
- {
- count++;
- }
- Delay_us(1);
- }
-
- GPIO_SetBits(GPIOB,GPIO_Pin_13);//HX711_SCK=1;
- count=count^0x800000;//第25个脉冲下降沿来时,转换数据
- Delay_us(1);
- GPIO_ResetBits(GPIOB,GPIO_Pin_13); //HX711_SCK=0;
- Delay_us(1);
- return count;
- }
- void Get_Maopi(void)
- {
- Weight_Maopi = HX711_Read();
- }
- //****************************************************
- //称重
- //****************************************************
- void Get_Weight(void)
- {
- HX711_Buffer = HX711_Read();
- if(HX711_Buffer <= Weight_Maopi)
- {
- Weight_Shiwu = 0;
- Weight_Shiwu = Weight_Maopi-Weight_Shiwu; //获取实物的AD采样数值。
- Weight_Shiwu = (s32)((float)Weight_Shiwu/GapValue); //计算实物的实际重量
- //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。
- //当发现测试出来的重量偏大时,增加该数值。
- //如果测试出来的重量偏小时,减小改数值。
- }
- }
- //void Get_Weight2(void)
- //{
- // Weight_Shiwu =HX711_Read()/GapValue;
- //if(Weight_Shiwu>=Weight_Maopi)
- // {
- // Weight_Shiwu=Weight_Shiwu-Weight_Maopi;
- // Weight_Shiwu -= 18305;
- // if(Weight_Shiwu < 0 )
- // Weight_Shiwu = 0;
- // }
- //else
- // Weight_Shiwu = 0;
- //}
复制代码 |