标题: 基于51单片机超声波水位液位控制系统LCD1602显示资料 含设计论文 仿真 源码等 [打印本页]
作者: huzhixin 时间: 2017-5-3 22:48
标题: 基于51单片机超声波水位液位控制系统LCD1602显示资料 含设计论文 仿真 源码等
本帖是基于51单片机超声波水位液位控制系统LCD1602液晶显示超全资料,附件里面包含有完整的设计论文.
功能说明
1、采用超声波水位液位,速度快,精度高,精度1毫米。
2、按键设置设置报警高度,上限和下限。
3、LCD1602液晶显示。
4、结构简洁,稳固,高效。
本系统采用USB电源供电,提供电源线,可以插到电脑、手机充电器、充电宝上供电,十分方便。
三、按键说明
系统三个按键,从左往右风别是,设置切换、加、减。
proteus仿真原理图:
原理图和pcb文件(附件里面包含工程文件)
附件里面还提供了大量关于单片机超声波水位液位控制系统的相关论文:
元件清单:
元件 | 规格 | 序号 | 数量 |
电解电容 | 47uF | C1 | 1 |
瓷片电容 | 104 | C2 | 1 |
瓷片电容 | 22pF | C3, C4 | 2 |
发光二极管 | LED | D1, D2 | 2 |
电源接头 | PWR2.5 | J1 | 1 |
开关 | 电源开关 | 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单片机(带座) | STC89C51 | U1 | 1 |
晶振 | 11.0592MHz | Y1 | 1 |
水泵 | 5V水泵 | B1 | 1 |
产品功能和您要求不相符的,可以适当修改,收取少量的费用。
为方便客户的使用和学习,本产品提供四种套餐可以选择,拍前请看好套餐,谢谢。
套餐一:万用板成品(万用板/洞洞板焊接制作+资料)
成品供电就可以用,不需要任何焊接调试。
套餐二:万用板散件(万用板/洞洞板散件全部元件+资料)
购买散件需要有一定的技术功底,基本的焊接,调试,万用表等工具的使用,购买散件焊接调试不成功,可以有偿维修。
套餐三:腐蚀板成品(单面腐蚀板/PCB板焊接制作+资料)
成品供电就可以用,不需要任何焊接调试。
套餐四:腐蚀板散件(单面腐蚀板/PCB板散件全部元件+资料)
购买散件需要有一定的技术功底,基本的焊接,调试,万用表等工具的使用,购买散件焊接调试不成功,可以有偿维修。
单片机源程序:
- #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; //设置按键
- sbit KEY2 = P1^4; //加按键
- sbit KEY3 = P1^5; //减按键
- unsigned int time=0;//计时变量
- unsigned int timer=0;//计时变量
- unsigned int S=0;//当前值
- unsigned int SET_H=100,SET_L=10;//最高值和最低值
- bit flag =0; //测量标志位
- unsigned char Table[3],Table1[5];//显示数组
- unsigned char KEY_flag=0; //按键选择标志
- //延时函数
- void Delay_ms(int jj) //延时函数
- {
- int ii; //延时变量
- while(jj--)//延时n毫秒
- for(ii=0;ii<116;ii++);//延时1毫秒
- }
- void Conut(void) //测量函数
- {
- time=TH0*256+TL0; //距离计数
- TH0=0; //定时器清零
- TL0=0; //定时器清零
-
- S=(time*1.87)/10; //算出来是CM、转换
- if((S>=700)||flag==1) //超出测量范围显示“-”
- {
- flag=0; //数据无效标志
- }
- else
- {
- Table1[0]= S/1000+0X30; //显示当前值
- Table1[1]= S/100%10+0X30; //显示当前值
- Table1[2]= S/10/10+0X30; //显示当前值
- Table1[3]= '.'; //显示当前值
- Table1[4]= S%10+0X30; //显示当前值
- LCD1602_Disp_ZF(0x88,Table1,5); //显示当前值
- }
- }
- void main(void) //主函数
- {
- LCD1602_init();//液晶初始化
- //////////////////////0123456789ABCDEF
- LCD1602_Disp_ZF(0x80," Now S: CM ",16);
- //0123456789ABCDEF
- LCD1602_Disp_ZF(0x80+0X40,"Set H: L: ",16);
- TMOD=0x11; //设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;//关闭中断
- SET_H = ISP_READ(0x2c00)*256+ISP_READ(0x2c01);//读取存储的最大值
- SET_L = ISP_READ(0x2c02)*256+ISP_READ(0x2c03);//读取存储的最小值
- EA=1; //开启总中断
- while(1)//函数循环
- {
- while(!RX); //当RX为零时等待
- TR0=1; //开启计数
- while(RX); //当RX为1计数并等待
- TR0=0; //关闭计数
- Conut(); //计算显示距离函数
- /////////////////////////////////////
- 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; //关闭
- }
- if(!KEY1) //切换设置最大值和最小值
- {
- Delay_ms(10);//延时去抖动
- if(!KEY1)//切换设置最大值和最小值
- {
- KEY_flag++; //模式选择
- ISP_ERASE(0x2c00); //注意:字节编程时必须要先要擦除整个扇区
- 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)//设置加
- {
- Delay_ms(10);//延时去抖动
- if(!KEY2) //设置加
- {
- if(KEY_flag%2==0)SET_H++; //设置加
- if(KEY_flag%2==1)SET_L++; //设置加
- }
- }
- if(!KEY3) //设置减
- {
- Delay_ms(10);//延时去抖动
- if(!KEY3) //设置减
- {
- if(KEY_flag%2==0)SET_H--; //设置减
- if(KEY_flag%2==1)SET_L--;//设置减
- }
- }
- 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中断用来计数器溢出,超过测距范围
- {
- flag=1; //中断溢出标志
- }
- /********************************************************/
- void zd3() interrupt 3
- {
- TH1=0xf8;//2毫秒定时初始化
- TL1=0x30;//2毫秒定时初始化
- timer++;//计数
- if(timer>=100)//计数100次,200毫秒
- {
- timer=0;
- TX=1; //200MS 启动一次模块
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码 所有资料打包下载(仿真 原理图 pcb 源码 论文):
基于51单片机超声波水位液位控制系统LCD1602资料.zip
(6.14 MB, 下载次数: 1033)
作者: admin 时间: 2017-5-3 23:19
好资料,51黑有你更精彩
作者: faridzled 时间: 2017-5-4 15:23
thanks for sharing
作者: Mr.ziyu 时间: 2017-5-16 19:07
感谢分享!
作者: 1457278787 时间: 2017-8-9 13:27
感觉不错
作者: 新人1 时间: 2017-12-16 11:54
超声波的想法很不错,我的想法是用传感器实现,但没这个好
作者: gaozhaohong 时间: 2017-12-16 16:16
果然是好贴 谢谢楼主!!!
作者: GROW 时间: 2017-12-20 20:36
这个是通过按键控制加减水还是自动的?
作者: GROW 时间: 2017-12-20 20:38
此处水泵的作用是什么?
作者: huigo1822 时间: 2018-3-10 12:00
正是我须要的!收下了解!
作者: xdl932365660 时间: 2018-3-22 08:53
我觉得以后可能会用到,哈哈
作者: DDbong 时间: 2018-3-23 15:02
楼主好厉害 大神很多啊
作者: DDbong 时间: 2018-3-25 19:51
这个比我在别的地方看到的好
作者: tjw13579 时间: 2018-4-19 20:59
感谢楼主分享 觉得有用
作者: 小筱忆smile 时间: 2018-5-4 15:04
感谢分享
作者: 九域九州 时间: 2018-5-5 14:55
哈哈哈哈哈哈哈哈好厉害
作者: Silent_Promise 时间: 2018-5-14 17:05
感谢分享
作者: sal7777777 时间: 2018-5-19 15:03
谢谢楼主,帮到很多
作者: hs88 时间: 2018-6-26 23:47
程序是错误的,过不了程序
作者: hs88 时间: 2018-6-28 04:34
一点都没,1062屏没有定义使能,下载了,程序是错误的,编译一直不通过
作者: 小猫猫爱吃鱼 时间: 2018-6-28 07:21
要看好了,实验明白了,再做评论
作者: hs88 时间: 2018-7-1 01:43
小猫猫爱吃鱼 发表于 2018-6-28 07:21
要看好了,实验明白了,再做评论
实验过才评论的,编译一直错误,并且程序里没有定义1602的RS.RW和E三个脚
---点评-----------------------------------------------
在这个文件里面LCD1602.H
#ifndef __LCD1602_H__
#define __LCD1602_H__
#include<reg52.h>
sbit LCD1602_RS = P1^0;
sbit LCD1602_RW = P1^1;
sbit LCD1602_E = P1^2;
#define LCD1602_Data P0
作者: Sceson 时间: 2018-7-7 12:12
好资料,51黑有你更精彩
作者: tuxiaoxi 时间: 2018-7-12 09:28
好东西啊 谢谢分享
作者: tuxiaoxi 时间: 2018-7-12 09:38
高人,技术帝,顶帖
作者: wushiye54 时间: 2018-7-13 16:15
你这个说白了是超声波测距吧。。
作者: icerdc 时间: 2018-11-15 22:13
请问你知道S=(time*1.87)/10; 这是怎么转换计算的,而且现在液晶显示屏显示的S是传感器到液位的距离,怎么填写C语言转换成为液位的液面高度。急急急
作者: colaccc 时间: 2018-12-13 22:20
非常给力的楼主,对我目前的课程设计很有帮助。
作者: wgb 时间: 2019-1-8 12:28
你这都对不上的,pcb设置了四个按键,万用板用了三个按键。
作者: 13783513536 时间: 2019-4-5 11:24
给力哦!!!!
作者: Operaturn7 时间: 2019-4-7 00:06
新人 搞不懂 碰上资料 先留个名再说
作者: 筑梦者1993 时间: 2019-5-16 09:29
学习一下,谢谢
作者: 小宝的宝宝范er 时间: 2019-5-19 21:03
真的太好了,正好需要。
作者: qazwsx753951 时间: 2019-12-11 15:33
很给力啊!!!
作者: qazwsx753951 时间: 2019-12-11 15:46
给力,很6666!!!!!
作者: qazwsx753951 时间: 2019-12-11 16:00
666很给力!!!!
作者: Daniel008 时间: 2019-12-11 16:26
好资料,51黑有你更精彩
作者: vircopc 时间: 2020-5-9 17:11
好东西,收!
作者: fyljx888 时间: 2020-5-10 16:58
项目很好的,学习学习
作者: 51单片机小黑 时间: 2020-6-4 09:04
能不能帮我修改一下,只需要水位显示就好了
作者: zly@111 时间: 2020-10-26 09:58
有用吗?能不能实现功能呢
作者: zly@111 时间: 2020-10-26 10:00
有用吗,能不能实现功能呢
作者: 18760165228 时间: 2020-12-29 10:21
咋说,能用吗
作者: 感悟 时间: 2022-3-28 10:29
好资料,51黑有你更精彩
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |