找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32单片机净水器,水流量计制作 附程序

[复制链接]
跳转到指定楼层
楼主
家用买的净水器有时放水给忘了水灌的到处都是,于是想出做一个水流量计,要多水就出多少容量水,给大家分享一下;


中断处理
  1. #include "stm32f10x.h"
  2. #include "delay.h"
  3. #include "exti.h"
  4. #include "led.h"
  5. #include "display.h"
  6. #include "key.h"

  7. void EXIT_Init(void)
  8. {
  9.     GPIO_InitTypeDef GPIO_InitStructure;
  10.     EXTI_InitTypeDef EXTI_InitStructure;                //定义外部中断结构变
  11.     NVIC_InitTypeDef NVIC_InitStructure;                //定义向量中断结构变量

  12.     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB  , ENABLE  );
  13.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//  打开复用时钟
  14.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //连接中断管脚PB0

  15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;                //B0-B1 为外部按键 作为3个独立外部输入中断
  16.     GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IN_FLOATING;                   // 输入
  17.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 // 最高输入速率50MHz
  18.     GPIO_Init(GPIOB, &GPIO_InitStructure);                                 // 选择B端口

  19.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置NVIC中断分组 0位抢占优先级,4位响应优先级
  20.     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//选择中断通道0
  21.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级0 只能为0
  22.     NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级2 共有16个
  23.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
  24.     NVIC_Init(&NVIC_InitStructure);//完成初始化
  25.        
  26.          
  27.     NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;//选择中断通道0
  28.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级0 只能为0
  29.     NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//响应优先级2 共有16个
  30.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能中断
  31.     NVIC_Init(&NVIC_InitStructure);//完成初始化

  32.     EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1;//选择中断线路0和1
  33.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断请求,非事件请求
  34.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//设置中断触发方式为下降沿触发
  35.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;//外部中断使能
  36.     EXTI_Init(&EXTI_InitStructure);

  37. }

  38. /*
  39. ********************************************************************************
  40. ** 函数名称 : EXTI0_IRQHandler(void)
  41. ** 函数功能 : 外部中断函数
  42. ** 输    入        : 无
  43. ** 输    出        : 无
  44. ** 返    回        : 无  RESET
  45. ********************************************************************************
  46. */
  47. void EXTI0_IRQHandler(void)
  48. {
  49.     if(EXTI_GetITStatus(EXTI_Line0)!=RESET)//判断某个线上的中断是否发生
  50.     {
  51.       
  52.         if((GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)==0))    //按键真的被按下
  53.         {
  54.                                            mL=mL+sdmaichong_ml;                          //1脉冲为10ML水
  55.                                                       
  56.                                            LjmL= LjmL+sdmaichong_ml;
  57.                                                                       //100ML累计一次
  58.                                        

  59.         }
  60.                
  61. //      while(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)); //等待松手 不能使用KEY_B0代替
  62.         EXTI_ClearITPendingBit(EXTI_Line0); //清楚中断标志位
  63.     }
  64. }


  65. /*
  66. ********************************************************************************
  67. ** 函数名称 : EXTI1_IRQHandler(void)
  68. ** 函数功能 : 外部中断函数
  69. ** 输    入        : 无
  70. ** 输    出        : 无
  71. ** 返    回        : 无  RESET
  72. ********************************************************************************
  73. */
复制代码

  1. /*IO使用情况
  2.   A0  A1  A2 A3 A4 A5 A6 A7  键盘  B6 B7显示器  B0水流量感应器  C11 5脚 C12 6脚 24C模块
  3.         C0电磁阀,C1报警信号
  4. */
  5. #include "stm32f10x_conf.h"
  6. #include "key.h"
  7. #include "display.h"
  8. #include "delay.h"
  9. #include "oled.h"
  10. #include "led.h"
  11. #include "exti.h"
  12. #include "24C02.h"
  13. #include "timer.h"


  14. int main()
  15. {
  16.           SystemInit();  //将主频调整到72M
  17.     LED_Init();
  18.                 OLED_Init();                        //初始化OLED  
  19.                 OLED_Clear() ;
  20.           TIM1_Init();     //初始化定时器1
  21.           EXIT_Init();
  22.     EXTI0_IRQHandler();
  23. //    EXTI1_IRQHandler();
  24.     AT24CXX_Init(); //24CXX初始化
  25. //                key_Init();
  26.     Read_SmL_LJmL();
  27.    
  28.    while(1)
  29.    {
  30.            HL_key_Display();
  31.            key_scan();
  32.                  Display();         
  33.                         
  34.    }
  35. }

复制代码

Keil代码下载: 水流量计 多菜单ML.7z (226.49 KB, 下载次数: 17)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:170318 发表于 2024-4-3 08:50 | 只看该作者
注释较全,下来学习编程方式,谢谢楼主分享
回复

使用道具 举报

板凳
ID:430492 发表于 2024-4-3 23:11 | 只看该作者
这个比较实用,多点这样的设计就好了,感谢楼主!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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