找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19940|回复: 44
打印 上一主题 下一主题
收起左侧

基于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板散件全部元件+资料)
   购买散件需要有一定的技术功底,基本的焊接,调试,万用表等工具的使用,购买散件焊接调试不成功,可以有偿维修。

单片机源程序:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include "LCD1602.h"
  4. #include "STCEEPROM.h"
  5. sbit  RX = P3^6;  //定义超声波端口
  6. sbit  TX = P3^7;

  7. sbit LED = P2^0;  //LED
  8. sbit SPEAK = P2^1; //蜂鸣器
  9. sbit Motor = P2^2; //水泵

  10. sbit KEY1 = P1^3;  //设置按键
  11. sbit KEY2 = P1^4;  //加按键
  12. sbit KEY3 = P1^5;  //减按键

  13. unsigned int  time=0;//计时变量
  14. unsigned int  timer=0;//计时变量
  15. unsigned int S=0;//当前值
  16. unsigned int SET_H=100,SET_L=10;//最高值和最低值
  17. bit  flag =0; //测量标志位
  18. unsigned char Table[3],Table1[5];//显示数组
  19. unsigned char KEY_flag=0; //按键选择标志
  20. //延时函数
  21. void Delay_ms(int jj)  //延时函数
  22. {
  23.         int ii;        //延时变量
  24.         while(jj--)//延时n毫秒
  25.                 for(ii=0;ii<116;ii++);//延时1毫秒
  26. }
  27. void Conut(void)         //测量函数
  28.         {
  29.          time=TH0*256+TL0;         //距离计数
  30.          TH0=0;         //定时器清零
  31.          TL0=0;         //定时器清零
  32.         
  33.          S=(time*1.87)/10;     //算出来是CM、转换
  34.          if((S>=700)||flag==1) //超出测量范围显示“-”
  35.          {         
  36.           flag=0; //数据无效标志
  37.          }
  38.          else
  39.          {
  40.           Table1[0]= S/1000+0X30;        //显示当前值
  41.           Table1[1]= S/100%10+0X30;        //显示当前值
  42.           Table1[2]= S/10/10+0X30;        //显示当前值
  43.           Table1[3]= '.';                        //显示当前值
  44.           Table1[4]= S%10+0X30;           //显示当前值
  45.           LCD1602_Disp_ZF(0x88,Table1,5); //显示当前值
  46.         }
  47. }
  48. void main(void)        //主函数
  49. {
  50.     LCD1602_init();//液晶初始化
  51.         //////////////////////0123456789ABCDEF
  52.     LCD1602_Disp_ZF(0x80,"  Now S:     CM ",16);
  53.                                                      //0123456789ABCDEF
  54.     LCD1602_Disp_ZF(0x80+0X40,"Set H:    L:    ",16);
  55.         TMOD=0x11;                   //设T0为方式1,GATE=1;
  56.         TH0=0;                           //定时器清零
  57.         TL0=0;             //定时器清零
  58.         TH1=0xf8;                   //2MS定时
  59.         TL1=0x30;                   //2MS定时
  60.         ET0=1;             //允许T0中断
  61.         ET1=1;                           //允许T1中断
  62.         TR1=1;                           //开启定时器
  63.         EA=1;                           //开启总中断
  64.         EA=0;//关闭中断
  65.         SET_H = ISP_READ(0x2c00)*256+ISP_READ(0x2c01);//读取存储的最大值
  66.         SET_L = ISP_READ(0x2c02)*256+ISP_READ(0x2c03);//读取存储的最小值
  67.         EA=1; //开启总中断
  68.         while(1)//函数循环
  69.         {
  70.                 while(!RX);                    //当RX为零时等待
  71.                 TR0=1;                            //开启计数
  72.                 while(RX);                        //当RX为1计数并等待
  73.                 TR0=0;                                //关闭计数
  74.                 Conut();  //计算显示距离函数
  75.                 /////////////////////////////////////
  76.                 if((S/10>SET_H)||(S/10>SET_H)) //水位过低过高报警,
  77.                 {
  78.                         LED=0;SPEAK=0; //报警
  79.                 }
  80.                 else
  81.                 {
  82.                         LED=1;SPEAK=1; //不报警
  83.                 }
  84.                 ////////////////////////////////
  85.                 if((S/10>SET_H)) //水位过低打开水泵
  86.                 {
  87.                         Motor; //打开
  88.                 }
  89.                 else
  90.                 {
  91.                         LED=1;SPEAK=1; //关闭
  92.                 }        
  93.                 if(!KEY1) //切换设置最大值和最小值
  94.                 {
  95.                         Delay_ms(10);//延时去抖动
  96.                         if(!KEY1)//切换设置最大值和最小值
  97.                         {
  98.                                 KEY_flag++;        //模式选择
  99.                                 ISP_ERASE(0x2c00);                //注意:字节编程时必须要先要擦除整个扇区        
  100.                                 ISP_PROGRAM(0x2c00, SET_H/256);        //记忆存储
  101.                                 ISP_PROGRAM(0x2c01, SET_H);//记忆存储
  102.                                 ISP_PROGRAM(0x2c02, SET_L/256);//记忆存储
  103.                                 ISP_PROGRAM(0x2c03, SET_L);        //记忆存储
  104.                         }
  105.                         while(!KEY1);//等待按键抬起
  106.                 }
  107.                 if(!KEY2)//设置加
  108.                 {
  109.                         Delay_ms(10);//延时去抖动
  110.                         if(!KEY2) //设置加
  111.                         {
  112.                                 if(KEY_flag%2==0)SET_H++; //设置加
  113.                                 if(KEY_flag%2==1)SET_L++; //设置加
  114.                         }
  115.                 }
  116.                 if(!KEY3) //设置减
  117.                 {
  118.                         Delay_ms(10);//延时去抖动
  119.                         if(!KEY3) //设置减
  120.                         {
  121.                                 if(KEY_flag%2==0)SET_H--; //设置减
  122.                                 if(KEY_flag%2==1)SET_L--;//设置减
  123.                         }
  124.                 }
  125.           Table[0]= SET_H/100+0X30;//显示最大值
  126.           Table[1]= SET_H%100/10+0X30;
  127.           Table[2]= SET_H%10+0X30;
  128.           LCD1602_Disp_ZF(0x86+0x40,Table,3);
  129.           Table[0]= SET_L/100+0X30;         //显示最小值
  130.           Table[1]= SET_L%100/10+0X30;
  131.           Table[2]= SET_L%10+0X30;
  132.           LCD1602_Disp_ZF(0x8C+0x40,Table,3);
  133.         }
  134. }

  135. /********************************************************/
  136.      void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  137.   {
  138.     flag=1;                                                         //中断溢出标志
  139.   }
  140. /********************************************************/
  141.    void  zd3()  interrupt 3         
  142.   {
  143.          TH1=0xf8;//2毫秒定时初始化
  144.          TL1=0x30;//2毫秒定时初始化
  145.          timer++;//计数
  146.          if(timer>=100)//计数100次,200毫秒
  147.          {
  148.           timer=0;
  149.           TX=1;                                        //200MS  启动一次模块

  150. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料打包下载(仿真 原理图 pcb 源码 论文):
基于51单片机超声波水位液位控制系统LCD1602资料.zip (6.14 MB, 下载次数: 1024)


评分

参与人数 7黑币 +35 收起 理由
51lcx + 5 很给力!
refus + 3 回帖助人的奖励!
稀世琛宝 + 5 很给力!
心疯扬 + 8 很给力!
GROW + 1
新人1 + 5 很给力!
lgjdqm + 8 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏31 分享淘帖 顶9 踩
回复

使用道具 举报

沙发
ID:1 发表于 2017-5-3 23:19 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

板凳
ID:89286 发表于 2017-5-4 15:23 | 只看该作者
thanks for sharing
回复

使用道具 举报

地板
ID:201497 发表于 2017-5-16 19:07 | 只看该作者
感谢分享!
回复

使用道具 举报

5#
ID:226077 发表于 2017-8-9 13:27 | 只看该作者
感觉不错
回复

使用道具 举报

6#
ID:262281 发表于 2017-12-16 11:54 | 只看该作者
超声波的想法很不错,我的想法是用传感器实现,但没这个好
回复

使用道具 举报

7#
ID:61876 发表于 2017-12-16 16:16 | 只看该作者
果然是好贴 谢谢楼主!!!
回复

使用道具 举报

8#
ID:264431 发表于 2017-12-20 20:36 | 只看该作者
这个是通过按键控制加减水还是自动的?
回复

使用道具 举报

9#
ID:264431 发表于 2017-12-20 20:38 | 只看该作者
此处水泵的作用是什么?
回复

使用道具 举报

10#
ID:282091 发表于 2018-3-10 12:00 | 只看该作者
正是我须要的!收下了解!
回复

使用道具 举报

11#
ID:273292 发表于 2018-3-22 08:53 | 只看该作者
我觉得以后可能会用到,哈哈
回复

使用道具 举报

12#
ID:295949 发表于 2018-3-23 15:02 来自手机 | 只看该作者
楼主好厉害 大神很多啊
回复

使用道具 举报

13#
ID:295949 发表于 2018-3-25 19:51 来自手机 | 只看该作者
这个比我在别的地方看到的好
回复

使用道具 举报

14#
ID:311971 发表于 2018-4-19 20:59 | 只看该作者
感谢楼主分享  觉得有用
回复

使用道具 举报

15#
ID:307869 发表于 2018-5-4 15:04 | 只看该作者
感谢分享
回复

使用道具 举报

16#
ID:322804 发表于 2018-5-5 14:55 | 只看该作者
哈哈哈哈哈哈哈哈好厉害
回复

使用道具 举报

17#
ID:329748 发表于 2018-5-14 17:05 | 只看该作者
感谢分享
回复

使用道具 举报

18#
ID:321870 发表于 2018-5-19 15:03 | 只看该作者
谢谢楼主,帮到很多
回复

使用道具 举报

19#
ID:104477 发表于 2018-6-26 23:47 来自手机 | 只看该作者
程序是错误的,过不了程序
回复

使用道具 举报

20#
ID:104477 发表于 2018-6-28 04:34 来自手机 | 只看该作者
一点都没,1062屏没有定义使能,下载了,程序是错误的,编译一直不通过
回复

使用道具 举报

21#
ID:303383 发表于 2018-6-28 07:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

22#
ID:104477 发表于 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
回复

使用道具 举报

23#
ID:322305 发表于 2018-7-7 12:12 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

24#
ID:369118 发表于 2018-7-12 09:28 | 只看该作者
好东西啊  谢谢分享
回复

使用道具 举报

25#
ID:369118 发表于 2018-7-12 09:38 | 只看该作者
高人,技术帝,顶帖
回复

使用道具 举报

26#
ID:280876 发表于 2018-7-13 16:15 | 只看该作者
你这个说白了是超声波测距吧。。
回复

使用道具 举报

27#
ID:425510 发表于 2018-11-15 22:13 | 只看该作者
wushiye54 发表于 2018-7-13 16:15
你这个说白了是超声波测距吧。。

请问你知道S=(time*1.87)/10;  这是怎么转换计算的,而且现在液晶显示屏显示的S是传感器到液位的距离,怎么填写C语言转换成为液位的液面高度。急急急
回复

使用道具 举报

28#
ID:446045 发表于 2018-12-13 22:20 | 只看该作者
非常给力的楼主,对我目前的课程设计很有帮助。
回复

使用道具 举报

29#
ID:260698 发表于 2019-1-8 12:28 | 只看该作者
你这都对不上的,pcb设置了四个按键,万用板用了三个按键。
回复

使用道具 举报

30#
ID:488975 发表于 2019-4-5 11:24 | 只看该作者
给力哦!!!!
回复

使用道具 举报

31#
ID:506025 发表于 2019-4-7 00:06 来自手机 | 只看该作者
新人 搞不懂 碰上资料 先留个名再说
回复

使用道具 举报

32#
ID:259858 发表于 2019-5-16 09:29 | 只看该作者
学习一下,谢谢
回复

使用道具 举报

33#
ID:541104 发表于 2019-5-19 21:03 | 只看该作者
真的太好了,正好需要。
回复

使用道具 举报

34#
ID:457995 发表于 2019-12-11 15:33 | 只看该作者
很给力啊!!!
回复

使用道具 举报

35#
ID:457995 发表于 2019-12-11 15:46 | 只看该作者
给力,很6666!!!!!
回复

使用道具 举报

36#
ID:457995 发表于 2019-12-11 16:00 | 只看该作者
666很给力!!!!
回复

使用道具 举报

37#
ID:348676 发表于 2019-12-11 16:26 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

38#
ID:309919 发表于 2020-5-9 17:11 | 只看该作者
好东西,收!
回复

使用道具 举报

39#
ID:748312 发表于 2020-5-10 16:58 | 只看该作者
项目很好的,学习学习
回复

使用道具 举报

40#
ID:769092 发表于 2020-6-4 09:04 | 只看该作者
能不能帮我修改一下,只需要水位显示就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表