日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

利用51单片机和霍尔水流量传感器开发水流量计

發(fā)布時(shí)間:2023/12/29 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用51单片机和霍尔水流量传感器开发水流量计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 開發(fā)準(zhǔn)備
    (1)YF-B1流量傳感器一個(gè)
    (2)51開發(fā)板一個(gè)

  • 基礎(chǔ)知識(shí)
    (1)YF-B1流量傳感器只有三根線。即數(shù)據(jù)線、VCC、GND。數(shù)據(jù)線輸出為占空比為50%的方波。當(dāng)水流通過水流轉(zhuǎn)子組件時(shí),磁性轉(zhuǎn)子轉(zhuǎn)動(dòng)并且轉(zhuǎn)速隨著流量的變化而成線性變化。霍爾傳感器(霍爾元件采樣)輸出相應(yīng)的脈沖信號(hào)。其流量脈沖特性計(jì)算公式為:脈沖f(Hz)=8.1x流量Q(L/min)-3。
    (2)51單片機(jī)的中斷工作方式。51單片機(jī)有定時(shí)器T0和T1,他們既有定時(shí)又有計(jì)數(shù)的功能。通過設(shè)置相關(guān)的特殊功能寄存器就可以啟用定時(shí)或計(jì)數(shù)功能。需要注意的是,定時(shí)器系統(tǒng)是單片機(jī)內(nèi)部一個(gè)獨(dú)立的硬件部分,CPU一旦設(shè)置定時(shí)功能,定時(shí)器便在晶振的作用下計(jì)時(shí),當(dāng)計(jì)數(shù)器計(jì)滿便會(huì)產(chǎn)生中斷,通知CPU該如何去處理。而作為計(jì)數(shù)器時(shí),計(jì)數(shù)脈沖來自相應(yīng)的外部輸入引腳T0(P3.4),T1(P3.5)或者T2(P1.0,52單片機(jī))。

  • 電路設(shè)計(jì)
    (1)將霍爾傳感器數(shù)據(jù)線插在P3.4,VCC接在VCC,GND接GND。

    (2)這是我的開發(fā)板數(shù)碼管的電路,提供參考。

  • 軟件設(shè)計(jì)

  • #include<reg52.h> #include<stdio.h> #define uchar unsigned char //宏定義 #define uint unsigned int //宏定義 sbit we = P2^7; //位定義數(shù)碼管位選鎖存器接口 sbit du = P2^6; //位定義數(shù)碼管位選鎖存器接口 float frency,Q,F,num;//Q為流量,單位L/min;F為頻率,單位HZ uchar code leddata[]={ 0x3F, //"0"0x06, //"1"0x5B, //"2"0x4F, //"3"0x66, //"4"0x6D, //"5"0x7D, //"6"0x07, //"7"0x7F, //"8"0x6F, //"9"0x77, //"A"0x7C, //"B"0x39, //"C"0x5E, //"D"0x79, //"E"0x71, //"F"0x76, //"H"0x38, //"L"0x37, //"n"0x3E, //"u"0x73, //"P"0x5C, //"o"0x40, //"-"0x00, //熄滅0x00 //自定義};//數(shù)碼管帶小數(shù)點(diǎn)顯示 uchar code leddatapoint[]={ 0xBF, //"0"0x86, //"1"0xDB, //"2"0xCF, //"3"0xE6, //"4"0xED, //"5"0xFD, //"6"0x87, //"7"0xFF, //"8"0xEF, //"9"0x00, //熄滅0x00 //自定義}; //毫秒級(jí)延時(shí)函數(shù) void delay(uint z) {uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--); } //四位數(shù)碼管動(dòng)態(tài)顯示函數(shù) void display(float i) {uchar shi, ge,fen,shifen;float x,y;shi = i / 10; //顯示十位ge = (int)i % 10;//顯示個(gè)位x=i*10;y=i*100;fen = (int)x%10;//分位shifen = (int)y%10;//十分位P0 = 0xff;//清除斷碼we = 1; //打開位選P0 = 0xef;//1110 1111 we = 0; //關(guān)閉位選du = 1;//打開段選P0 = leddata[shi]; du = 0; //關(guān)閉段選delay(5);//延時(shí)5毫秒P0 = 0xff;//清除斷碼we = 1; //打開位選P0 = 0xdf;//1101 1111 we = 0; //關(guān)閉位選du = 1;//打開段選P0 = leddatapoint[ge]; du = 0; //關(guān)閉段選delay(5);//延時(shí)5毫秒P0 = 0xff; //清除斷碼we = 1;//打開位選P0 = 0xbf;//1011 1111 we = 0; //關(guān)閉位選du = 1; //打開段選P0 = leddata[fen];du = 0; //關(guān)閉段選delay(5);//延時(shí)5毫秒P0 = 0xff; //清除斷碼we = 1;//打開位選P0 = 0x7f;//0111 1111 we = 0; //關(guān)閉位選du = 1; //打開段選P0 = leddata[shifen];du = 0; //關(guān)閉段選delay(5);//延時(shí)5毫秒 } uint read()//得到計(jì)數(shù)器0當(dāng)前脈沖次數(shù)函數(shù) {uint tl,th1,th2;//讀兩次高位,兩次高位一樣說明沒有低位進(jìn)位,讀數(shù)更加精確。uint val;while(1){th1=TH0;tl=TL0;th2=TH0;if(th1==th2)break;}val=th1*256+tl;return val; } void main() {TMOD=0x15;//定時(shí)器計(jì)數(shù)器工作方式配置TH0=0;TL0=0;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EA=1;//開總中斷ET0=1;//中斷允許ET1=1;TR0=1;//運(yùn)行控制位TR1=1;while(1){ display(Q);}} void T0_time()interrupt 1 {TH0=0;TL0=0; } void T1_time()interrupt 3 {TH1=(65536-45872)/256;//50毫秒TL1=(65536-45872)%256;num++;if(num==20) //1s更新一次數(shù)據(jù),送至數(shù)碼管顯示{num=0;F=read();//每隔1s讀一次計(jì)數(shù)器0,該值則為頻率。計(jì)算出Q后立馬把計(jì)數(shù)器0清零重新計(jì)數(shù)。if(F>0){Q=(F+3)/8.1;//流量傳感器經(jīng)驗(yàn)公式TH0=0;TL0=0;}else{Q=0;//如果不加這句,當(dāng)F=0,由公式知道Q!=0。TH0=0;TL0=0;}} }
  • 測(cè)試效果
  • 總結(jié)

    以上是生活随笔為你收集整理的利用51单片机和霍尔水流量传感器开发水流量计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。