找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机水塔水箱水位系统Proteus仿真程序

  [复制链接]
跳转到指定楼层
楼主
本设计是利用STC89C52单片机设计一种水位控制系统。主要是基于单片机的硬件设计以及程序设计, 包括测量电路部分、液位实时数显输出部分以及液位控制部分,还在此基础上添加蜂鸣器。本设计只是概念性设计了电路部分,并不涉及具体的数值设定,经过了实际应用检测。该系统实现了水位监测,水位控制,水位显示,故障报警功能。在设计中主要采用了传感技术、单片机技术、弱电控制强电技术、C语言编程等技术

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


电路原理图如下:


制作出来的实物图如下:


单片机源程序如下:
  1. #include <reg52.h>                 //调用单片机头文件
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

  4. //数码管段选定义       0    1    2    3    4        5        6         7          8           9        
  5. uchar code smg_du[]={0xde,0x91,0xcd,0xd5,0x93,0x2b,0x5f,0xd4,0xdf,0xd1,
  6. //                                           A        B         C          D           E   F        不显示
  7.                                        
  8.                                          0xd7,0x1f,0x4e,0x9d,0x4f,0x47 };         //断码        

  9. sbit led_y = P2^2;          //黄灯        //高水位
  10. sbit led_g = P2^1;          //绿灯
  11. sbit led_r = P2^0;          //红灯        //低水位

  12. sbit shuiwei1 = P3^4;
  13. sbit shuiwei2 = P3^5;
  14. sbit shuiwei3 = P3^6;
  15. sbit shuiwei4 = P3^7;

  16. sbit relay = P1^0;   //继电器
  17. sbit beep =  P2^7;   //蜂鸣器

  18. uchar shuiwei;   //水位

  19. sbit dianji = P2^3;


  20. /***********************1ms延时函数*****************************/
  21. void delay_1ms(uint q)
  22. {
  23.         uint i,j;
  24.         for(i=0;i<q;i++)
  25.                 for(j=0;j<120;j++);
  26. }

  27. /********************独立按键程序*****************/
  28. uchar key_can;         //按键值

  29. void key()         //独立按键程序
  30. {
  31.         static uchar key_new;
  32.         P1 |= 0x06;
  33.         if((P1 & 0x06) != 0x06)                //按键按下
  34.         {
  35.                 delay_1ms(1);                     //按键消抖动
  36.                 if(((P1 & 0x06) != 0x06) && (key_new == 1))
  37.                 {                                                //确认是按键按下
  38.                         key_new = 0;
  39.                         switch(P1 & 0x06)
  40.                         {
  41.                                 case 0x02: relay = 0;  //手动进水
  42.                                  break;          //得到按键值
  43.                                 case 0x04: relay = 1;  //手动停止进水
  44.                                 break;          //得到按键值
  45.                         }
  46.                 }                        
  47.         }
  48.         else   //按键松开
  49.                 key_new = 1;        
  50. }


  51. /******************主程序**********************/           
  52. void main()
  53. {
  54.         P0 = P1 = P2 = P3 = 0xff;  //初始化单片机IO口为高电平
  55.         P0 = ~smg_du[0] ;
  56.         delay_1ms(1500);
  57.         while(1)
  58.         {
  59.                 key();         //独立按键程序
  60.                 if(shuiwei4 == 1)             //高水位 4档
  61.                 {
  62.                         shuiwei = 4;
  63.                         led_r = 1;led_g = 1;led_y = 0;           //高水位绿灯亮
  64.                 }
  65.                 else if(shuiwei3 == 1)         //       3档
  66.                 {
  67.                         shuiwei = 3;
  68.                         led_r = 1;led_g = 0;led_y = 1;           //正常水位绿灯亮
  69.                 }
  70.                 else if(shuiwei2 == 1)         //       2档
  71.                 {
  72.                         shuiwei = 2;
  73.                         led_r = 1;led_g = 0;led_y = 1;           //正常水位绿灯亮
  74.                 }
  75.                 else if(shuiwei1 == 1)         //       1档
  76.                 {
  77.                         shuiwei = 1;
  78.                         led_r = 1;led_g = 0;led_y = 1;           //正常水位绿灯亮
  79.                 }else                                         //低水位 0
  80.                 {
  81.                         shuiwei = 0;        
  82.                         led_r = 0;led_g = 1;led_y = 1;           //低水位红灯亮
  83.                 }

  84.                 P0 = ~smg_du[shuiwei];           //
  85.                 if(shuiwei < 1)        //进水
  86.                 {
  87.                         beep = ~beep;  //蜂鸣器报警
  88.                         relay = 0;     //打开继电器  进水
  89.                 }
  90.                 else
  91.                 {
  92.                         beep = 1;    //关闭蜂鸣器
  93.                 }

  94.         if(shuiwei >= 4)  //停止进水
  95.                 {
  96.                         relay = 1;          //关闭继电器
  97.                         dianji = 0;  //打开抽水电机
  98.                 }else
  99.                 {
  100.                         dianji = 1;   //关闭电机
  101.                 }

  102.                 key();         //独立按键程序
  103.                 delay_1ms(100);
  104.         }
  105. }
复制代码

所有资料51hei提供下载:
水塔水箱水位系统 数码管 2个抽水电机.rar (547.36 KB, 下载次数: 160)

评分

参与人数 2黑币 +56 收起 理由
顺德动力 + 6 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:402026 发表于 2020-4-16 12:58 | 只看该作者
这是非常好的资料!
回复

使用道具 举报

板凳
ID:793275 发表于 2020-7-1 22:26 | 只看该作者
学习一下,谢谢楼主
回复

使用道具 举报

地板
ID:962819 发表于 2022-1-13 00:45 来自手机 | 只看该作者
焊起来是真的好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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