1.首先是超声波模块部分

超声波模块的hc-sr04.h文件

#ifndef __HC__SR04_H
#define __HC__SR04_H
#include "sys.h"#define Trig PFout(1) // HC-SR04 void TIM9_CH1_Cap_Init(u32 arr,u16 psc);void Trig_Init(void);#endif

超声波模块的hc-sr04.c文件

#include "hc-sr04.h"
#include "usart.h"//初始化PE9为输入口.并设置定时器中断9.且使能
//Echo IO 和定时器9初始化   void TIM9_CH1_Cap_Init(u32 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_ICInitTypeDef  TIM9_ICInitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);     //TIM9时钟使能    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);     //使能PORTE时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //GPIOE5GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;   //速度100MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉GPIO_Init(GPIOE,&GPIO_InitStructure); //初始化PE5GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9); //PE5复用位定时器9TIM_TimeBaseStructure.TIM_Prescaler=psc;  //定时器分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式TIM_TimeBaseStructure.TIM_Period=arr;   //自动重装载值TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);//初始化TIM9输入捕获参数TIM9_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01   选择输入端 IC1映射到TI1上TIM9_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;   //上升沿捕获TIM9_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上TIM9_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;    //配置输入分频,不分频 TIM9_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波TIM_ICInit(TIM9, &TIM9_ICInitStructure);TIM_ITConfig(TIM9,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断 ,允许CC1IE捕获中断    TIM_Cmd(TIM9,ENABLE );  //使能定时器9NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_TIM9_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQ通道使能NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器、}//捕获状态
//[7]:0,没有成功的捕获;1,成功捕获到一次.
//[6]:0,还没捕获到低电平;1,已经捕获到低电平了.
//[5:0]:捕获低电平后溢出的次数(对于32位定时器来说,1us计数器加1,溢出时间:4294秒)
u8  TIM9CH1_CAPTURE_STA=0; //输入捕获状态
u32 TIM9CH1_CAPTURE_VAL;    //输入捕获值(TIM9是32位)
//定时器9中断服务程序
void TIM1_BRK_TIM9_IRQHandler(void)
{           if((TIM9CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 {if(TIM_GetITStatus(TIM9, TIM_IT_Update) == SET)//溢出{      if(TIM9CH1_CAPTURE_STA&0X40)//已经捕获到高电平了{if((TIM9CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了{TIM9CH1_CAPTURE_STA|=0X80;     //标记成功捕获了一次TIM9CH1_CAPTURE_VAL=0XFFFFFFFF;}else TIM9CH1_CAPTURE_STA++;}   }if(TIM_GetITStatus(TIM9, TIM_IT_CC1) != RESET)//捕获1发生捕获事件{   if(TIM9CH1_CAPTURE_STA&0X40)        //捕获到一个下降沿      {               TIM9CH1_CAPTURE_STA|=0X80;     //标记成功捕获到一次高电平脉宽TIM9CH1_CAPTURE_VAL=TIM_GetCapture1(TIM9);//获取当前的捕获值.TIM_OC1PolarityConfig(TIM9,TIM_ICPolarity_Rising); //OC1P=0 设置为上升沿捕获}else                                //还未开始,第一次捕获上升沿{TIM9CH1_CAPTURE_STA=0;         //清空TIM9CH1_CAPTURE_VAL=0;TIM9CH1_CAPTURE_STA|=0X40;      //标记捕获到了上升沿TIM_Cmd(TIM5,DISABLE );  //关闭定时器9TIM_SetCounter(TIM9,0);TIM_OC1PolarityConfig(TIM9,TIM_ICPolarity_Falling);      //OC1P=1 设置为下降沿捕获TIM_Cmd(TIM9,ENABLE );    //使能定时器9}           }                                              }TIM_ClearITPendingBit(TIM9, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位
}//初始化PF1为输出口.并使能时钟
//Trig IO初始化
void Trig_Init(void)
{        GPIO_InitTypeDef  GPIO_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟//GPIOF1初始化设置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO_ResetBits(GPIOF,GPIO_Pin_1);//初始化GPIOF1为低电平}

配置文件缺少什么就补什么,上篇STM32F407红外避障控制舵机有写。


2.到称重传感器模块

压力传感器的HX711.h文件

#ifndef __HX711_H
#define __HX711_H#include "sys.h"#define HX711_SCK PBout(0)// PB0
#define HX711_DOUT PBin(1)// PB1extern void Init_HX711pin(void);
extern u32 HX711_Read(void);
extern void Get_Maopi(void);
extern void Get_Weight(void);extern u32 HX711_Buffer;
extern u32 Weight_Maopi;
extern s32 Weight_Shiwu;
extern u8 Flag_Error;#endif

压力传感器的HX711.c文件

#include "HX711.h"
#include "delay.h"u32 HX711_Buffer=0;
u32 Weight_Maopi=0;
s32 Weight_Shiwu=0;
u8 Flag_Error = 0;//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
#define GapValue 285void digitalWrite(GPIO_TypeDef * GPIO,int pin,int value)
{if(value==1)//set 1
{GPIO_SetBits(GPIO,pin);
}
if(value==0)//reset 0{GPIO_ResetBits(GPIO,pin);}
}int digitalRead(GPIO_TypeDef * GPIO,int pin)
{return GPIO_ReadInputDataBit(GPIO,pin);
}void Init_HX711pin(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;
GPIO_InitTypeDef  GPIO_InitStructure1;  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//SCKGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;GPIO_Init(GPIOB, &GPIO_InitStructure);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//DOUTGPIO_InitStructure1.GPIO_Pin = GPIO_Pin_1 ;GPIO_InitStructure1.GPIO_Mode = GPIO_Mode_IN;//GPIO_InitStructure1.GPIO_OType = GPIO_OType_OD; GPIO_InitStructure1.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure1.GPIO_PuPd = GPIO_PuPd_NOPULL;GPIO_Init(GPIOB, &GPIO_InitStructure1);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//初始化设置为0
}//读取HX711
u32 HX711_Read(void)    //增益128
{unsigned long count; unsigned char i=0;
//  HX711_DOUT=1; while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));delay_us(1);HX711_SCK=0; count=0;delay_us(1);// while(HX711_DOUT); while(!GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1));for(i=0;i<24;i++){ delay_us(100); HX711_SCK=1; count=count<<1; delay_us(1);HX711_SCK=0; if(HX711_DOUT)count++; delay_us(1);} HX711_SCK=1; count=count^0x800000;//第25个脉冲下降沿来时,转换数据delay_us(1);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 = HX711_Buffer;Weight_Shiwu = Weight_Shiwu - Weight_Maopi;              //获取实物的AD采样数值。Weight_Shiwu = (s32)((float)Weight_Shiwu/GapValue);  //计算实物的实际重量//因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的GapValue这个除数。//当发现测试出来的重量偏大时,增加该数值。//如果测试出来的重量偏小时,减小改数值。}}

到TFT LCD显示模块的lcd.h和lcd.c代码过长,百度下载引入即可用


3.到主程序部分

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "hc-sr04.h"
#include "lcd.h"
#include "HX711.h"extern u8  TIM9CH1_CAPTURE_STA;     //输入捕获状态
extern u32  TIM9CH1_CAPTURE_VAL;    //输入捕获值  int main(void)
{ float temp=0;  u8 complete = 1;                                  //一次采集完成标志NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);  //初始化延时函数uart_init(115200);//初始化串口波特率为115200LCD_Init();           //初始化LCD FSMC接口Trig_Init();TIM9_CH1_Cap_Init(0XFFFFFFFF,84-1); //以1Mhz的频率计数 timer9是32位的。Init_HX711pin();delay_ms(2000);Get_Maopi();             //称毛皮重量delay_ms(100);POINT_COLOR=RED;      //画笔颜色:红色while(1){if(complete == 1){Trig = 1;delay_us(15);Trig = 0;complete = 0;}while(complete == 0){if(TIM9CH1_CAPTURE_STA&0X80)        //成功捕获到了一次高电平{temp=TIM9CH1_CAPTURE_STA&0X3F; temp*=0XFFFFFFFF;                         //溢出时间总和temp+=TIM9CH1_CAPTURE_VAL;          //得到总的高电平时间temp = temp * 17/1000; //得到距离        printf("HIGH:%f cm\r\n",temp); //打印距离delay_ms(1000);LCD_ShowNum(50,10,temp,3,16); //TFT LCD打印距离TIM9CH1_CAPTURE_STA=0;                 //开启下一次捕获complete = 1;}}Get_Weight();Get_Maopi();printf("净重量 = %d g\r\n",Weight_Shiwu); //打印 printf("毛坯 = %d g\r\n",Weight_Maopi); //打印 printf("重量 = %d g\r\n",HX711_Buffer); //打印 delay_ms(1000);LCD_ShowNum(50,50,Weight_Shiwu,8,16); //TFT LCD打印输出LCD_ShowNum(50,100,Weight_Maopi,8,16);LCD_ShowNum(50,150,HX711_Buffer,8,16);}
}

STM32F407 TFTLCD显示超声波和压力传感器模块相关推荐

  1. 使用STM32F407读取HX711压力传感器模块

    hx711是一个很常见的压力传感器模块,精度很高,在平时做嵌入式开发的时候也常常遇到.但是在网上找到的代码往往都很老了,用现在常用的stm32板子都或多或少有一些问题,尤其是在一些购买该模块地方那里要 ...

  2. 普中stm32开发板tftlcd显示图片_STM32实例TFTLCD介绍

    以前我们用 51 单片机控制 TFTLCD(TFT 液晶屏)时,使用的是 IO 口模拟80 接口时序.这次我们来学习如何使用 STM32F1 的 FSMC(灵活的静态存储控制器)接口控制 TFTLCD ...

  3. 利用LCD1602显示超声波测距

    利用LCD1602显示超声波测距 介绍 一.需要的器件 二.原理 工程代码 一. LCD1602 二.超声波测距及主程序 运行图 介绍 一.需要的器件 51单片机:任意一款都可以,我这里使用的是STC ...

  4. 收发一体超声波测距离传感器模块_空气中70KHZ超声波换能器传感器探头DYA-70-03A测距探头3米量程...

    空气中70KHZ超声波换能器传感器探头DYA-70-03A测距探头3米量程 CT50数字式超声波探伤仪 焊缝探伤测量仪器 金属探伤检测仪 现货,上海身高体重秤 超声波身高体重秤 全自动身高体重称测量仪 ...

  5. STM32F103 TFTLCD显示实验(一)

    文章内容 本文将介绍有关TFTLCD的有关知识,包括几个部分,分别如下: TFTLCD简介 相关指令 配置步骤 FSMC简介 由于篇幅过长,因此,代码讲解放到下一章中,链接如下: STM32F103 ...

  6. 基于正点原子stm32的mini板的TFTLCD显示实验

    本章将讲述TFTLCD显示实验,小白总结,如有错误,请大神指教. 一.TFTLCD 简介 1.TFT-LCD 即薄膜晶体管液晶显示器.TFT-LCD具有:亮度好.对比度高.层次感强.颜色鲜艳等特点.是 ...

  7. OLED显示超声波测距

    OLED显示超声波测距 超声波 OLED 接线 测距程序 arduino 一个简单的点灯程序 下期学习内容规划 超声波 基本原理 TRIG引脚负责发送超声波脉冲串.此引脚应设置为高电平10μs,此时H ...

  8. STM32单片机TFTLCD显示实验:TFTLCD简介

    STM32单片机TFTLCD显示实验学习笔记 1.TFTLCD模块接口图 以2.8寸的TFTLCD为例,采用16位的并方式与外界进行连接,模块接口图如下所示: 具有如下一些信号线: CS:TFTLCD ...

  9. STM32控制TFTLCD显示

    一.用STM32控制TFTLCD显示的编程方法,在编程驱动TFTLCD液晶显示器之前,我们先熟悉以下概念: 1.色彩深度,这是一个与TFTLCD显存对应的概念:所谓色彩深度就是每个像素点需要多少位的R ...

最新文章

  1. Linux tcpdump命令详解与Wireshark
  2. Spring(三)AOP面向切面编程
  3. python做logistic回归_用Python做Logistic回归
  4. Windows-Linux:Windows系统下的命令类似Linux系统下的所有命令集合
  5. 【笔试面试】C#中的程序集
  6. Mysql yum 安装后,一些重要的文件路径
  7. window ngnix php配置文件,Window下PHP和Nginx的配置
  8. Hamcrest Tutorial
  9. 北京极通EWebs与服务器蓝屏死机
  10. secureCRT查看日志命令
  11. 如何在php设置背景颜色,html如何设置背景颜色?两种方法教会你
  12. 中恒建模助手插件和绿色建筑的完美结合
  13. 慧荣SM2246XT、SM2246EN开卡教程 及 固件下载
  14. WPS之Excel表格如何设置下拉选项
  15. tex liv模板_微软向所有人开放Liv​​e Mesh
  16. 【halcon】灰度直方图直观理解与应用
  17. java中string类型如何接收_java中的string类型全面解析
  18. Google Pixel获取root权限的方法【完整版】
  19. Java 基础(十五)并发工具包 concurrent
  20. MODBUS-TCP协议

热门文章

  1. 安科瑞AMB300系列母线槽红外测温解决方案
  2. 个人域名能卖给企业吗
  3. GenerateReport——ETABS隔震分析报告生成
  4. etabs数据_筑信达
  5. 微处理器组成的微型计算机属于,以微处理器为核心组成的微型计算机属于哪一种计算机...
  6. jenkins 实现应用产品归档
  7. 深度学习入门——Mini-batch、Momentum与Adam算法
  8. L298N驱动4个电机驱动小车
  9. C# 调用 origin 批量作图
  10. 迅雷之坑:java.io.IOException: 你的主机中的软件中止了一个已建立的连接