找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1640|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)凈水器,水流量計(jì)制作 附程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
家用買的凈水器有時(shí)放水給忘了水灌的到處都是,于是想出做一個(gè)水流量計(jì),要多水就出多少容量水,給大家分享一下;


中斷處理
  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;                //定義外部中斷結(jié)構(gòu)變
  11.     NVIC_InitTypeDef NVIC_InitStructure;                //定義向量中斷結(jié)構(gòu)變量

  12.     RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB  , ENABLE  );
  13.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//  打開復(fù)用時(shí)鐘
  14.     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0); //連接中斷管腳PB0

  15.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;                //B0-B1 為外部按鍵 作為3個(gè)獨(dú)立外部輸入中斷
  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);//設(shè)置NVIC中斷分組 0位搶占優(yōu)先級(jí),4位響應(yīng)優(yōu)先級(jí)
  20.     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;//選擇中斷通道0
  21.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//搶占優(yōu)先級(jí)0 只能為0
  22.     NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//響應(yīng)優(yōu)先級(jí)2 共有16個(gè)
  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;//搶占優(yōu)先級(jí)0 只能為0
  29.     NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;//響應(yīng)優(yōu)先級(jí)2 共有16個(gè)
  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;//設(shè)置為中斷請(qǐng)求,非事件請(qǐng)求
  34.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//設(shè)置中斷觸發(fā)方式為下降沿觸發(fā)
  35.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;//外部中斷使能
  36.     EXTI_Init(&EXTI_InitStructure);

  37. }

  38. /*
  39. ********************************************************************************
  40. ** 函數(shù)名稱 : EXTI0_IRQHandler(void)
  41. ** 函數(shù)功能 : 外部中斷函數(shù)
  42. ** 輸    入        : 無
  43. ** 輸    出        : 無
  44. ** 返    回        : 無  RESET
  45. ********************************************************************************
  46. */
  47. void EXTI0_IRQHandler(void)
  48. {
  49.     if(EXTI_GetITStatus(EXTI_Line0)!=RESET)//判斷某個(gè)線上的中斷是否發(fā)生
  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累計(jì)一次
  58.                                        

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


  65. /*
  66. ********************************************************************************
  67. ** 函數(shù)名稱 : EXTI1_IRQHandler(void)
  68. ** 函數(shù)功能 : 外部中斷函數(shù)
  69. ** 輸    入        : 無
  70. ** 輸    出        : 無
  71. ** 返    回        : 無  RESET
  72. ********************************************************************************
  73. */
復(fù)制代碼

  1. /*IO使用情況
  2.   A0  A1  A2 A3 A4 A5 A6 A7  鍵盤  B6 B7顯示器  B0水流量感應(yīng)器  C11 5腳 C12 6腳 24C模塊
  3.         C0電磁閥,C1報(bào)警信號(hào)
  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();  //將主頻調(diào)整到72M
  17.     LED_Init();
  18.                 OLED_Init();                        //初始化OLED  
  19.                 OLED_Clear() ;
  20.           TIM1_Init();     //初始化定時(shí)器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. }

復(fù)制代碼

Keil代碼下載: 水流量計(jì) 多菜單ML.7z (226.49 KB, 下載次數(shù): 33)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:170318 發(fā)表于 2024-4-3 08:50 | 只看該作者
注釋較全,下來學(xué)習(xí)編程方式,謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:430492 發(fā)表于 2024-4-3 23:11 | 只看該作者
這個(gè)比較實(shí)用,多點(diǎn)這樣的設(shè)計(jì)就好了,感謝樓主。!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表