利用51单片机霍尔水流量传感器开发水流统计水流量报警(LCD1602显示)
生活随笔
收集整理的這篇文章主要介紹了
利用51单片机霍尔水流量传感器开发水流统计水流量报警(LCD1602显示)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
開發前的準備:
LCD1602一塊
51單片機開發板 一塊(這里我用的是普中的板子)
霍爾水流量傳感器一塊(紅色接5V黑色接GND黃色是數據傳接口)
?霍爾傳感器流量經驗公式:?Q=(F+3)/8.1 Q表示流量
main.c
#include <REGX52.H>//頭文件 #include "LCD1602.H"//1602顯示的頭文件 #include "Buzzer.h"//蜂鳴器的頭文件#define uchar unsigned char //宏定義 #define uint unsigned int //宏定義 #define stand 40 //設置報警值(可調根據自己需求調)uint flag;//設置標志位sbit led=P2^0; sbit K1=P3^1;//定義按鍵Key1引腳float Q,F,num;//Q為流量,單位L/min;F為頻率,單位HZ//毫秒級延時函數 void delay(uint z) {uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--); }uint read()//得到計數器0當前脈沖次數函數 {uint tl,th1,th2;//讀兩次高位,兩次高位一樣說明沒有低位進位,讀數更加精確。uint value;//設置存儲值valuewhile(1){th1=TH0;//定時器置高位賦值給th1tl=TL0;//定時器置低位賦值給t1th2=TH0;//定時器置高位賦值給th2if(th1==th2)//判斷如果兩個高位相等就結束break;}value=th1*256+tl;//把定時器高位轉為二進制+上低位return value;//返回val的值 }void buzzer()//蜂鳴器報警 {Buzzer_Time(100); } void timer0()//定時器函數 {TMOD=0x15;//定時器計數器工作方式配置TH0=0;//高位TL0=0;//低位TH1=(65536-45872)/256;//確定高位TL1=(65536-45872)%256;//確定低位EA=1;//開總中斷ET0=1;//中斷允許ET1=1;TR0=1;//運行控制位TR1=1; }void KeyPro()//按鍵函數 {static uint a;//靜態變量a標志位if(K1==0)//如果k1按下{delay(20);//按時20msif(K1==0)//再一次判斷 {a++;//標志位+1if(a%2==0)//標注位對二求余等于0{flag=1;//flag就等于1}else//否則就flag等于0{ flag=0; }}}}void main()//主函數 {LCD_Init();//初始化timer0();//定時器初始化while(1)//死循環{ KeyPro();//按鍵函數LCD_ShowNum(1,2,Q,4);//lcd1602顯示函數LCD_ShowString(1,6,"ML");//lcd1602顯示函數 字符串if(stand <= Q)//判斷預設值和報警值{if(flag==1)//標注位等于1的話蜂鳴器就報警{buzzer();//蜂鳴器報警}}} }void T0_time()interrupt 1//中段函數1 {TH0=0;TL0=0; }void T1_time()interrupt 2//中斷3{TH1=(65536-45872)/256;//50毫秒TL1=(65536-45872)%256;num++;if(num==5) //1s更新一次數據,送至數碼管顯示{num=0;F=read();//每隔1s讀一次計數器0,該值則為頻率。計算出Q后立馬把計數器0清零重新計數。if(F>0){Q=(F+3)/8.1*100; //流量傳感器經驗公式根據這個公式計算水流量TH0=0;TL0=0; }else{Q=0;//如果不加這句,當F=0,由公式知道Q!=0。TH0=0;TL0=0;}} }總結
以上是生活随笔為你收集整理的利用51单片机霍尔水流量传感器开发水流统计水流量报警(LCD1602显示)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue打包报错 ERROR in sta
- 下一篇: SRTP旋转黑板