基于51单片机的智能水表水流量计流量报警器温度设计
1、系统功能介绍
- 系统构成
- 本系统由STC89C52单片机电路+水流量传感器+DS18B20温度电路+继电器电路+LCD1602液晶显示电路+按键电路+蜂鸣器电路+电源电路组成。
- 功能:
- 1、水流量传感器采用椭圆齿轮传感器。
- 2、通过液晶LCD1602液晶实时显示瞬时流量和累计流量、实时温度、设置的累计流量。3、通过按键设置累计流量阈值,如果累计流量超过设置阈值,蜂鸣器报警、继电器断开,否则不报警继电器闭合。
- 4、继电器模拟水阀开关,如果当前累计流量低于设置流量,打开继电器的意思。
2、资料下载
3、系统电路介绍
3.1、STC89C52单片机最小系统设计
- 1.STC89C52是STC公司(中国深圳宏晶科技公司)生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器(8K对单片机来说不小了,当然不能跟我们的手机比),使用MCS-51内核,指令代码完全兼容传统8051。
- 2.工作电压范围很广(这里只介绍5V版本),在3.3V~5.5V之间都能工作,但是电压越高,工作电流也会更大,通俗的说,如果用单片机点亮一颗LED灯,使用5.5V供电,灯的亮度要比3.3V供电时亮,耗电也会更多。
- 3.通用I/O 口(4x8=32个),复位后为:P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为 I/O 口用时,需加上拉电阻。(除非某I/0口置零,否则它就输出高电平)
- 4.工作频率范围:0~40MHz,相当于普通8051 的0~80MHz,实际工作 频率可达48MHz,其工作频率取决于晶振频率,我们常用的是12MHz、11.0592MHz。
- 5.ISP(在系统可编程)/IAP(在应用可编程),可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序。在学习过程中,我们只要使用ISP即可,也就是制作好电路板之后,只要把RxD/P3.0,TxD/P3.1通过排针引出来,我们就可以通过USB-TTL把程序烧录到单片机,不需要再把单片机芯片从系统板上取出来。
- 6.共3 个16 位定时器/计数器。即定时器T0、T1、T2。
单片机最小系统电路图如下图所示
-
-
实物图:
-
3.2、LCD1602液晶显示模块电路设计
-
1602液晶,也叫做1602字符型液晶,可以显示2行字符信息,每行可以显示16个字符,是一种专门用来显示字母、数字、符号的点阵型液晶模块。
-
LCD1602由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距地间隔,每行之间也有间隔,起到了字符间距和行间距的作用。
-
电路原理图
-
-
实物图
3.3、DN15流量传感器模块电路设计
-
流量检测传感器选择的是基于霍尔传感器的流量传感器。流量传感器主要由塑料阀体 、液流转子组件和霍尔传感器组成。它装在液体进入端,用于检测进液体流量,当液体通过液流转子组件时,磁性转子转动并且转速随着流量变化而变化,霍尔传感器输出相应脉冲信号,反馈给控制器,由控制器判断水流量的大小,进行调控。
-
电路设计如下图所示:
-
-
实物图:
-
3.4、DS18B20温度传感器模块电路设计
-
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样,有LTM8877,LTM8874等等。
-
DS18B20温度传感器封装一般有2种,使用上都是一样的。可以根据使用环境随意选择。第一种是直接是裸露的芯片,主要用于空气温度检测。第2种是不锈钢钢管封装好的,防水,一般用于水温灯液体温度检测。
-
电路原理图:
-
-
实物图:
-
-
4、程序设计
4.1、LCD1602初始化
// LCD1602初始化
void lcd1602_Init()
{
lcd1602_WriteCom(0x32); // 将8位总线转为4位总线
lcd1602_WriteCom(LCD_MODE_8_2_5X7); // 8位数据,显示2行,5x7点阵/每字符28H
lcd1602_WriteCom(LCD_CURSOR_RIGHT); // 写入数据后光标右移 06H
lcd1602_WriteCom(LCD_CLEAR); // 清屏 01H
lcd1602_WriteCom(LCD_OPENSHOW); // 显示开 0cH
lcd1602_WriteCom(LCD_START_ADDR1); // 设置数据指针地址起始点是第一行第一列,80H=00H|80H
}
4.2、LCD1602显示数据
void lcd1602_WriteData(uchar dat)
{
LCD_EN=0; // 使能
LCD_RS=1; // 发送数据
LCD_RW=0; // 选择写命令
LCD_DATA=dat; // 放入数据,4位数据,接线到P0的高四位,传送高四位不用改
lcd1602_Delay1ms(1); // 等待数据稳定
LCD_EN=1; // 写入时序
lcd1602_Delay1ms(5); // 保持稳定
LCD_EN=0;
LCD_DATA=dat<<4;
lcd1602_Delay1ms(1); // 等待数据稳定
LCD_EN=1; // 写入时序
lcd1602_Delay1ms(5); // 保持稳定
LCD_EN=0;
}
4.3、DS18B20初始化
bit Init_DS18B20(void)
{
bit dat=0;
DQ = 1; //DQ复位
DelayUs2x(5); //稍做延时
DQ = 0; //单片机将DQ拉低
DelayUs2x(200); //精确延时 大于 480us 小于960us
DelayUs2x(200);
DQ = 1; //拉高总线
DelayUs2x(50); //15~60us 后 接收60-240us的存在脉冲
dat=DQ; //如果x=0则初始化成功, x=1则初始化失败
DelayUs2x(25); //稍作延时返回
return dat;
}