• 单片机实验——水塔自动抽水系统设计(基于Proteus仿真)


    • 实验内容及要求

    自来水供水是现代生活的一大特点,水塔作为储水装置是自来水系统必不可少的重要设施,让水塔保持一定的水量是自来水不断供的必要条件,本设计模拟自来水系统中水塔的自动抽水机制,设计分为控制系统和虚拟水塔两部分,参考电路如下:

    设计要求:

    1. 虚拟水塔模拟水塔的功能,水塔水量低于一定值时,发信息给控制系统,控制系统启动抽水机住水塔注水,注放水指示灯点亮,数码管显示当前水塔中的水量,当水量高于一定值时,向控制系统发出水满信号,控制系统停止抽水机运转。水塔设有两个阀门,每个阀门可以单独放水,水位低向控制系统发出抽水信号,相应的指灯显示当前水塔状态。
    2. 控制系统设自动抽水和手动抽水两种模式,自动抽水依据水塔发出的信号启动或停止抽水,手面模式是通于手动开关进行启动或停止抽水。
    3. 利用C51设计程序完成以上功能,上述电路仅供参考,可自行创新设计。
    4. 在keil中利用C51进行程序设计,利用ptotues设计电路并进行仿真。
    5. 控制系统使用单片机的中断机制。
    • 涉及的主要知识点

    1. 51单片机的中断系统。
    2. 7段数据管的编码与显示原理。
    3. Keil及protues软件的使用。
    • 提示及预备知识

    1. 水塔水满或水空时,利用I/O引脚向控制系统发出负脉冲作为中断源,控制系统根据不同的中断源,作出启动或停止抽水动作。
    2. 抽水机用直流电机模拟,通过I/O引脚控制MOS管驱动直流电机。
    3. 参考流程图如下:
    1. 控制系统

    1. 虚拟水塔

    实验图纸如下:

    部分代码:

    1. # include<reg52.h>
    2. # define empty 1
    3. # define full 10
    4. sbit Lful = P1^0;
    5. sbit Lemp = P1^1;
    6. sbit pour = P1^2;
    7. sbit star = P1^3;
    8. sbit stop = P1^4;
    9. sbit k1 = P1^5; //放水阀门1
    10. sbit k2 = P1^6; //放水阀门2
    11. sbit pump = P1^7;
    12. char mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //led字模
    13. 0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
    14. void delay(unsigned int time) //延时time ms
    15. {
    16. unsigned char a,b;
    17. for(;time>0;time--)
    18. for(b=142;b>0;b--)
    19. for(a=2;a>0;a--);
    20. }
    21. void display(char water)
    22. {
    23. char shi,ge;
    24. shi = water/10;
    25. ge = water%10;
    26. P2 = mod[shi];
    27. P0 = mod[ge];
    28. }
    29. void main()
    30. {
    31. char water=5;
    32. Lful=Lemp=pour=0;
    33. display(water);
    34. while(1)
    35. {
    36. pump = 1; //读取前先置1
    37. if(pump == 1)
    38. {
    39. delay(300);
    40. water++;
    41. display(water);
    42. if(water==full)
    43. {
    44. Lful=1;
    45. stop=0;
    46. delay(1);
    47. stop=1;
    48. }
    49. }
    50. if(k1==0||k2==0)
    51. {
    52. delay(300);
    53. water--;
    54. display(water);
    55. if(water==empty)
    56. {
    57. Lemp=1;
    58. star=0;
    59. delay(1);
    60. star=1;
    61. }
    62. }
    63. }
    64. }
    1. # include<reg52.h>
    2. sbit man = P1^0; //高阻态自动,低电频手动
    3. sbit aut = P1^1; //低电平手动抽水
    4. sbit Lful = P1^2;
    5. sbit Nful = P1^3;
    6. sbit pump = P1^7;
    7. char mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //led字模
    8. 0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
    9. void full() interrupt 0
    10. {
    11. pump = 1;
    12. Nful = 1;
    13. Lful = 0;
    14. }
    15. void empty() interrupt 2
    16. {
    17. // pump = !pump;
    18. pump = 0;
    19. Lful = 1;
    20. Nful = 0;
    21. }
    22. void main()
    23. {
    24. Lful=Nful=pump=0;
    25. IT0=IT1=EX0=EX1=EA=1;
    26. while(1)
    27. {
    28. if(aut==0) //自动
    29. {
    30. man = 1;
    31. if(man==0) //打开
    32. {
    33. pump = 1;
    34. Nful = 1;
    35. }
    36. else //¹Ø±Õ
    37. pump = 0;
    38. }
    39. }
    40. }

    部分运行结果:

  • 相关阅读:
    Java线程池-简识
    SpringMVC之JSON数据返回及异常处理机制
    基于FreeBSD 8.0 Ports配置nginx+php+mysql高性能web平台【解决方案】
    史上最全安装Maven教程
    计算机网络 - 物理层 选择复习题
    Aardio - 调用Python库下载蓝奏盘文件
    redis中springboot的redisTemplate简单的增删查
    Rsudio service
    【Java 进阶篇】HTML 图片标签详解
    网络的配置
  • 原文地址:https://blog.csdn.net/WZY22502701/article/details/127812885