128-基于stm32单片机蓄水池自动抽水系统Proteus仿真+源程序

一:功能介绍

1、采用stm32单片机+LCD1602+按键+超声波测距传感器+LED灯,制作一个基于stm32单片机蓄水池自动抽水系统;

2、通过超声波测距模块进行蓄水池的水位测量,并且显示到LCD1602显示屏上面;

3、通过按键设置最低水位和最高水位,并且显示到LCD1602显示屏上面;

4、当前水位低于最低水位,开启加水(加水LED灯亮),当前水位高于最高水位时,开启排水(排水LED灯亮);

二:仿真演示视频+程序简要讲解:(程序有中文注释,新手容易看懂)

128-基于stm32单片机蓄水池自动抽水系统Proteus仿真+源程序

三:设计软件介绍

本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,仿真采用Proteus软件进行仿真演示视频使用的是Proteus8.9版本;资料包里有相关软件包,可自行下载安装。

四:程序打开方法

特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

7fd5d5867bc58aa195d9500267ea8b69.png

56955ab07a5527d8a1627713105bbabe.png

程序部分展示,有中文注释,新手容易看懂
#define   K1   PBIN(12)//按键定义
#define   K2   PBIN(13)
#define   K3   PBIN(14)
#define   K4   PBIN(15)
#define   led1   PC(0)//灯定义
#define   led2   PC(1)
extern int UltrasonicWave_Distance;
void GPIO_Configuration(void)//LCD1602初始化
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  //LCD1602 管脚      
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8| GPIO_Pin_9| GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_6|GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);  
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15|GPIO_Pin_14|GPIO_Pin_13|GPIO_Pin_12;    
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure); 
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;    
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
  GPIO_SetBits(GPIOC,GPIO_Pin_All);
}
//获取独立按键数据
u8 Get_key_num()
{
  u8 temp_key=0;
  static u8 flag=0;
  if((flag==0)&&((K1==0)||(K2==0)||(K3==0)||(K4==0)))
  {
    flag=1;//按键只获取一次按键数值
    mDelay(10);//消除抖动
    //如果有对应的按键按下就返回对应按键数值
    if(K1==0)
    {temp_key=1;}
    else if(K2==0)
    {temp_key=2;}
    else if(K3==0)
    {temp_key=3;}
    else if(K4==0)
    {temp_key=4;}


  }
  else if((K1==1)&&(K2==1)&&(K3==1)&&(K4==1))
  {
    flag=0;//所有按键都弹起就清除标志
  }
  return temp_key;
}
int main(void)//主函数
{
  u8 key_num=0;
  u16 setl=120,seth=150;
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
  
  
  /* 配置SysTick 为1us中断一次 */
  SysTick_Init();
  GPIO_Configuration();
  Init1602();
  TIM2_Configuration();
  UltrasonicWave_Configuration();


  NVIC_Configuration();
  UltrasonicWave_StartMeasure();
  WrByte1602(0,1,'D'); //符号显示
  WrByte1602(0,2,'I'); 
  WrByte1602(0,3,'S'); 
  WrByte1602(0,4,'=');
  WrByte1602(0,9,'C'); 
  WrByte1602(0,10,'M');
  
  WrByte1602(1,1,'L'); 
  WrByte1602(1,2,'='); 
  WrByte1602(1,7,'H'); 
  WrByte1602(1,8,'=');


  while(1)
  {  


      UltrasonicWave_StartMeasure();//超声波测距
    
    key_num=Get_key_num();//读取按键
    switch(key_num)
    {
      case 1:
      setl++;if(setl>seth) setl=seth;//最低水位设置+
      break;
      case 2:
      setl--;if(setl<1) setl=1;    //设置-
      break;
      case 3:
      seth++;if(seth>200) seth=200;//最高水位设置+
      break;
      case 4:
      seth--;if(seth<setl) seth=setl;//设置-
      break;
    }
    if(UltrasonicWave_Distance%256<setl) led1=0;//低于最低水位 开启加水
    else led1=1;
    if(UltrasonicWave_Distance%256>seth) led2=0;//高于最高水位,开启排水
    else led2=1;
    
      WrByte1602(0,5,AsciiCode[UltrasonicWave_Distance%256/100]);//显示水位百位
       WrByte1602(0,6,AsciiCode[UltrasonicWave_Distance%256%100/10]);//水位十位
      WrByte1602(0,7,AsciiCode[UltrasonicWave_Distance%256%10]);   //水位个位  


    
      WrByte1602(1,3,AsciiCode[setl%1000/100]);  //显示设置低水位百位
      WrByte1602(1,4,AsciiCode[setl%100/10]);//显示设置低水位十位
      WrByte1602(1,5,AsciiCode[setl%10]);//显示设置低水位个位
    
      WrByte1602(1,9,AsciiCode[seth%1000/100]);  //显示设置高水位百位
      WrByte1602(1,10,AsciiCode[seth%100/10]);//显示设置高水位十位
      WrByte1602(1,11,AsciiCode[seth%10]);//显示设置高水位个位
  }

:仿真文件(采用Proteus打开)

4846822a3251367cc3eee3484ed68fa8.png

856db9d4912518892e8ab6d85f733734.png

69abcc15dc33d66fe6b4ff1d1346e8db.png

六:资料清单展示(文件中包含的相关资料)

c559f9434b44eb952e6b014bd7b86dbc.png

资料下载链接(可点击)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值