本帖是基于51單片機(jī)超聲波水位液位控制系統(tǒng)LCD1602液晶顯示超全資料,附件里面包含有完整的設(shè)計(jì)論文.
功能說明
1、采用超聲波水位液位,速度快,精度高,精度1毫米。
2、按鍵設(shè)置設(shè)置報警高度,上限和下限。
3、LCD1602液晶顯示。
4、結(jié)構(gòu)簡潔,穩(wěn)固,高效。
本系統(tǒng)采用USB電源供電,提供電源線,可以插到電腦、手機(jī)充電器、充電寶上供電,十分方便。
三、按鍵說明
系統(tǒng)三個按鍵,從左往右風(fēng)別是,設(shè)置切換、加、減。
proteus仿真原理圖:
原理圖和pcb文件(附件里面包含工程文件)
附件里面還提供了大量關(guān)于單片機(jī)超聲波水位液位控制系統(tǒng)的相關(guān)論文:
元件清單:
元件 | 規(guī)格 | 序號 | 數(shù)量 | 電解電容 | 47uF | C1 | 1 | 瓷片電容 | 104 | C2 | 1 | 瓷片電容 | 22pF | C3, C4 | 2 | 發(fā)光二極管 | LED | D1, D2 | 2 | 電源接頭 | PWR2.5 | J1 | 1 | 開關(guān) | 電源開關(guān) | L1 | 1 | 蜂鳴器 | 5V有源 | LS1 | 1 | 1602液晶(帶座) | 1602 | P1 | 1 | 超聲波模塊 | 超聲波模塊 | P2 | 1 | 下載器 | 程序下載接口 | P3 | 1 | 三極管 | 8550 | Q1,Q2 | 2 | 電阻 | 3K | R1 | 1 | 電阻 | 10K | R2 | 1 | 電阻 | 1K | R3 | 1 | 電阻 | 100 | R4,R5 | 2 | 按鍵 | 6*6*6 | S1, S2, S3, S4 | 4 | 51單片機(jī)(帶座) | STC89C51 | U1 | 1 | 晶振 | 11.0592MHz | Y1 | 1 | 水泵 | 5V水泵 | B1 | 1 |
產(chǎn)品功能和您要求不相符的,可以適當(dāng)修改,收取少量的費(fèi)用。 為方便客戶的使用和學(xué)習(xí),本產(chǎn)品提供四種套餐可以選擇,拍前請看好套餐,謝謝。 套餐一:萬用板成品(萬用板/洞洞板焊接制作+資料) 成品供電就可以用,不需要任何焊接調(diào)試。 套餐二:萬用板散件(萬用板/洞洞板散件全部元件+資料) 購買散件需要有一定的技術(shù)功底,基本的焊接,調(diào)試,萬用表等工具的使用,購買散件焊接調(diào)試不成功,可以有償維修。 套餐三:腐蝕板成品(單面腐蝕板/PCB板焊接制作+資料) 成品供電就可以用,不需要任何焊接調(diào)試。 套餐四:腐蝕板散件(單面腐蝕板/PCB板散件全部元件+資料) 購買散件需要有一定的技術(shù)功底,基本的焊接,調(diào)試,萬用表等工具的使用,購買散件焊接調(diào)試不成功,可以有償維修。
單片機(jī)源程序:
- #include<reg52.h>
- #include <intrins.h>
- #include "LCD1602.h"
- #include "STCEEPROM.h"
- sbit RX = P3^6; //定義超聲波端口
- sbit TX = P3^7;
- sbit LED = P2^0; //LED
- sbit SPEAK = P2^1; //蜂鳴器
- sbit Motor = P2^2; //水泵
- sbit KEY1 = P1^3; //設(shè)置按鍵
- sbit KEY2 = P1^4; //加按鍵
- sbit KEY3 = P1^5; //減按鍵
- unsigned int time=0;//計(jì)時變量
- unsigned int timer=0;//計(jì)時變量
- unsigned int S=0;//當(dāng)前值
- unsigned int SET_H=100,SET_L=10;//最高值和最低值
- bit flag =0; //測量標(biāo)志位
- unsigned char Table[3],Table1[5];//顯示數(shù)組
- unsigned char KEY_flag=0; //按鍵選擇標(biāo)志
- //延時函數(shù)
- void Delay_ms(int jj) //延時函數(shù)
- {
- int ii; //延時變量
- while(jj--)//延時n毫秒
- for(ii=0;ii<116;ii++);//延時1毫秒
- }
- void Conut(void) //測量函數(shù)
- {
- time=TH0*256+TL0; //距離計(jì)數(shù)
- TH0=0; //定時器清零
- TL0=0; //定時器清零
-
- S=(time*1.87)/10; //算出來是CM、轉(zhuǎn)換
- if((S>=700)||flag==1) //超出測量范圍顯示“-”
- {
- flag=0; //數(shù)據(jù)無效標(biāo)志
- }
- else
- {
- Table1[0]= S/1000+0X30; //顯示當(dāng)前值
- Table1[1]= S/100%10+0X30; //顯示當(dāng)前值
- Table1[2]= S/10/10+0X30; //顯示當(dāng)前值
- Table1[3]= '.'; //顯示當(dāng)前值
- Table1[4]= S%10+0X30; //顯示當(dāng)前值
- LCD1602_Disp_ZF(0x88,Table1,5); //顯示當(dāng)前值
- }
- }
- void main(void) //主函數(shù)
- {
- LCD1602_init();//液晶初始化
- //////////////////////0123456789ABCDEF
- LCD1602_Disp_ZF(0x80," Now S: CM ",16);
- //0123456789ABCDEF
- LCD1602_Disp_ZF(0x80+0X40,"Set H: L: ",16);
- TMOD=0x11; //設(shè)T0為方式1,GATE=1;
- TH0=0; //定時器清零
- TL0=0; //定時器清零
- TH1=0xf8; //2MS定時
- TL1=0x30; //2MS定時
- ET0=1; //允許T0中斷
- ET1=1; //允許T1中斷
- TR1=1; //開啟定時器
- EA=1; //開啟總中斷
- EA=0;//關(guān)閉中斷
- SET_H = ISP_READ(0x2c00)*256+ISP_READ(0x2c01);//讀取存儲的最大值
- SET_L = ISP_READ(0x2c02)*256+ISP_READ(0x2c03);//讀取存儲的最小值
- EA=1; //開啟總中斷
- while(1)//函數(shù)循環(huán)
- {
- while(!RX); //當(dāng)RX為零時等待
- TR0=1; //開啟計(jì)數(shù)
- while(RX); //當(dāng)RX為1計(jì)數(shù)并等待
- TR0=0; //關(guān)閉計(jì)數(shù)
- Conut(); //計(jì)算顯示距離函數(shù)
- /////////////////////////////////////
- if((S/10>SET_H)||(S/10>SET_H)) //水位過低過高報警,
- {
- LED=0;SPEAK=0; //報警
- }
- else
- {
- LED=1;SPEAK=1; //不報警
- }
- ////////////////////////////////
- if((S/10>SET_H)) //水位過低打開水泵
- {
- Motor; //打開
- }
- else
- {
- LED=1;SPEAK=1; //關(guān)閉
- }
- if(!KEY1) //切換設(shè)置最大值和最小值
- {
- Delay_ms(10);//延時去抖動
- if(!KEY1)//切換設(shè)置最大值和最小值
- {
- KEY_flag++; //模式選擇
- ISP_ERASE(0x2c00); //注意:字節(jié)編程時必須要先要擦除整個扇區(qū)
- ISP_PROGRAM(0x2c00, SET_H/256); //記憶存儲
- ISP_PROGRAM(0x2c01, SET_H);//記憶存儲
- ISP_PROGRAM(0x2c02, SET_L/256);//記憶存儲
- ISP_PROGRAM(0x2c03, SET_L); //記憶存儲
- }
- while(!KEY1);//等待按鍵抬起
- }
- if(!KEY2)//設(shè)置加
- {
- Delay_ms(10);//延時去抖動
- if(!KEY2) //設(shè)置加
- {
- if(KEY_flag%2==0)SET_H++; //設(shè)置加
- if(KEY_flag%2==1)SET_L++; //設(shè)置加
- }
- }
- if(!KEY3) //設(shè)置減
- {
- Delay_ms(10);//延時去抖動
- if(!KEY3) //設(shè)置減
- {
- if(KEY_flag%2==0)SET_H--; //設(shè)置減
- if(KEY_flag%2==1)SET_L--;//設(shè)置減
- }
- }
- Table[0]= SET_H/100+0X30;//顯示最大值
- Table[1]= SET_H%100/10+0X30;
- Table[2]= SET_H%10+0X30;
- LCD1602_Disp_ZF(0x86+0x40,Table,3);
- Table[0]= SET_L/100+0X30; //顯示最小值
- Table[1]= SET_L%100/10+0X30;
- Table[2]= SET_L%10+0X30;
- LCD1602_Disp_ZF(0x8C+0x40,Table,3);
- }
- }
- /********************************************************/
- void zd0() interrupt 1 //T0中斷用來計(jì)數(shù)器溢出,超過測距范圍
- {
- flag=1; //中斷溢出標(biāo)志
- }
- /********************************************************/
- void zd3() interrupt 3
- {
- TH1=0xf8;//2毫秒定時初始化
- TL1=0x30;//2毫秒定時初始化
- timer++;//計(jì)數(shù)
- if(timer>=100)//計(jì)數(shù)100次,200毫秒
- {
- timer=0;
- TX=1; //200MS 啟動一次模塊
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼 所有資料打包下載(仿真 原理圖 pcb 源碼 論文):
基于51單片機(jī)超聲波水位液位控制系統(tǒng)LCD1602資料.zip
(6.14 MB, 下載次數(shù): 1033)
2017-5-3 22:47 上傳
點(diǎn)擊文件名下載附件
液位控制
|