基于51单片机的水温水流量检测/智能水龙头控制系统proteus仿真原理图PCB
生活随笔
收集整理的這篇文章主要介紹了
基于51单片机的水温水流量检测/智能水龙头控制系统proteus仿真原理图PCB
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
功能:
0.本系統采用STC89C52作為單片機
1.液晶實時顯示當前的設定溫度/實際溫度/水龍頭狀態和水流量
2.按鍵可開關水龍頭,當溫度低于設定溫度時,啟動加熱控制繼電器,給水加熱, 當加熱到(設定溫度+1)時,停止加熱,使水溫在一定范圍
3.當水溫超過55攝氏度時,蜂鳴器報警
4.按鍵可設定水溫,設定范圍20℃~50℃
5.采用DC002作為電源接口可直接輸入5V給整個系統供電
原理圖:
PCB :
主程序:
#include "main.h"/*******************變量定義*********************/ int tempBuf; float temperature; //溫度 int setTemp = 40; //設定溫度 float flow = 0; //水流量 char dis[16];bit dispFlag = 0; //顯示標志 bit openFlag = 0; //水龍頭開啟標志 int pulseCnt;/******************************************************** 函數名稱:void mian() 函數作用:主函數 參數說明: ********************************************************/ void main() {LCD_Init(); //初始化液晶DelayMs(200); //延時有助于穩定LCD_DispStr(4, 0, "Welcome!");DelayS(1);LCD_Clear(); //清屏Timer0_Init(); //初始化定時器0Ext0_Init();while (1) //死循環{if (dispFlag == 1) //200ms刷新一次{EX0 = 0; //關閉外部中斷0dispFlag = 0;flow = (float)pulseCnt*5/43; //推算每秒計數,計算水流量L/min f = (43*Q) Q=L/minDispNormal();pulseCnt = 0; //清零EX0 = 1; //打開外部中斷0}if (openFlag == 1) //水龍頭打開{RELAY_WATER = ON;if (temperature < setTemp){RELAY_HEAT = ON;}else if (temperature > setTemp + 1) //大于設定溫度1度后,停止加熱,以使溫度在設定范圍附近{RELAY_HEAT = OFF;}if (temperature > 55) //大于55度蜂鳴器報警{BUZZER = ON;}else{BUZZER = OFF;}}else //水龍頭關閉{RELAY_WATER = OFF;RELAY_HEAT = OFF;BUZZER = OFF;}KeyProcess();} }/************************* 正常顯示模式 *************************/ void DispNormal(void) {bit ack;DS18B20_Start();ack = DS18B20_GetTemp(&tempBuf);if (ack == 1){temperature = (float)tempBuf * 0.0625; //溫度值轉換}else {temperature = 0;}sprintf(dis, "Set:%3d", setTemp); //打印溫度值LCD_DispStr(0, 0, dis); //顯示第一行LCD_DispOneChar(7, 0, 0xdf); //寫入溫度右上角點LCD_DispOneChar(8, 0, 'C'); //寫入溫度右上角點if (openFlag == 1){LCD_DispStr(10, 0, "Open ");}else{LCD_DispStr(10, 0, "Close");}sprintf(dis, "%5.1f", temperature); //打印溫度值LCD_DispStr(0, 1, dis); //顯示第二行LCD_DispOneChar(5, 1, 0xdf); //寫入溫度右上角點LCD_DispOneChar(6, 1, 'C'); //寫入溫度右上角點sprintf(dis, " %3.1fL/min", flow); //打印當前流量LCD_DispStr(7, 1, dis); //顯示第二行 }/************************* 定時器0初始化 *************************/ void Timer0_Init(void) {TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響TH0 = (65536 - 9216) / 256; //重新賦值 10msTL0 = (65536 - 9216) % 256;EA = 1; //總中斷打開ET0 = 1; //定時器中斷打開TR0 = 1; //定時器開關打開 }/************************* 定時器0中斷 *************************/ void Timer0_Interrupt(void) interrupt 1 {static unsigned char time10ms = 0;TH0 = (65536 - 9216) / 256; //重新賦值 10msTL0 = (65536 - 9216) % 256;time10ms++;if (time10ms > 20){dispFlag = 1; //顯示標志time10ms = 0;}}/************************* 外部中斷0初始化 *************************/ void Ext0_Init(void) {IT0 = 1; //下降沿觸發EX0 = 1; //使能外部中斷0EA = 1; //打開總中斷 }/************************* 外部中斷0 *************************/ void EXT0_Interrupt() interrupt 0 {pulseCnt++; }仿真演示視頻:
https://www.bilibili.com/video/BV1254y1d7fP/
實物演示視頻:
https://www.bilibili.com/video/BV1654y1d7Jm/
總結
以上是生活随笔為你收集整理的基于51单片机的水温水流量检测/智能水龙头控制系统proteus仿真原理图PCB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【秋招机试真题】华为机试0407-1-幼
- 下一篇: html四大作用域,JSP的三六九四(三