找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机水位控制系统仿真及源程序 带电机控制

[复制链接]
跳转到指定楼层
楼主
通过开关模拟传感器给单片机并显示出状态并控制电机转动采用lcd1602来显示.

下面是单片机水位控制系统的仿真原理图:



下面是源程序:
  1. #include<reg52.h>
  2. typedef unsigned char uchar;
  3. typedef unsigned int uint;
  4. unsigned char code word1[]={"Water Control"};
  5. unsigned char code word2[]={"State:"};//水位状态
  6. unsigned char code word3[]={"M: ON"};//电机开
  7. unsigned char code word4[]={"M:OFF"};//电机关
  8. sbit RS=P2^0;
  9. sbit RW=P2^1;
  10. sbit EN=P2^2;
  11. sbit BUSY=P0^7;
  12. sbit LED=P2^7;
  13. sbit sw1=P1^5;
  14. sbit sw2=P1^4;
  15. sbit sw3=P1^3;
  16. sbit sw4=P1^2;
  17. sbit sw5=P1^1;
  18. sbit sw6=P1^0;
  19. sbit shougong=P1^6;
  20. sbit dianji=P1^7;

  21. void delay()
  22. {  uint i,j;
  23.      for(i=0;i<10;i++)
  24.            for(j=0;j<200;j++);

  25. }
  26. void start()
  27. {
  28.    P0=0Xff;
  29.          do
  30.          {
  31.            RS=0;
  32.                  RW=1;
  33.                  EN=0;
  34.                  EN=1;
  35.          }
  36.    while(BUSY==1);
  37.           EN=0;

  38. }
  39. void w_dat(uchar dat)
  40. {
  41.    start();
  42.           EN=0;
  43.          P0=dat;
  44.          RS=1;
  45.          RW=0;
  46.          EN=1;
  47.          EN=0;
  48. }
  49. void w_cmd(uchar cmd)
  50. {
  51.   
  52.    start();
  53.          EN=0;
  54.          P0=cmd;
  55.          RS=0;
  56.          RW=0;
  57.          EN=1;
  58.          EN=0;

  59. }
  60. void LCD1602()       //LCD初始化命令
  61. {
  62.    w_cmd(0x38);
  63.          w_cmd(0x0f);
  64.          w_cmd(0x06);
  65.          w_cmd(0x01);
  66. }
  67. void w_string(uchar addr_start, uchar*p)       //送入字符串
  68. {
  69.         w_cmd(addr_start);
  70.         while (*p != '\0')
  71.         {
  72.                 w_dat(*p++);
  73.         }
  74. }
  75. void main()
  76. { uchar i;
  77.   LCD1602();
  78.         w_string(0x82,word1);
  79.         w_cmd(0x0c);
  80.         w_string(0xc0,word2);

  81.         while(1)
  82.         {
  83.           
  84.                         if(sw6==0&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==1)//当唯一的闭合一个传感器单元:水位6时发生
  85.                         { i=0;
  86.                                 dianji=1;//关电机
  87.                                         w_cmd(0xc7);
  88.                            w_dat(0+'6');          //液晶屏显示6
  89.                           
  90.                                 w_string(0xca,word4);
  91.                         }
  92.                                 //水位5
  93.                         if(sw6==1&&sw5==0&&sw4==1&&sw3==1&&sw2==1&&sw1==1&&i==1)//当唯一的闭合一个传感器单元:水位5时发生
  94.                         {
  95.                         dianji=0;
  96.                           
  97.                                 w_cmd(0xc7);
  98.                           w_dat(0+'5');             //液晶屏显示5
  99.                                 w_string(0xca,word3);
  100.                         }
  101.                         //水位4
  102.                         if(sw6==1&&sw5==1&&sw4==0&&sw3==1&&sw2==1&&sw1==1&&i==1)//当唯一的闭合一个传感器单元:水位4时发生
  103.                         { dianji=0;
  104.                        
  105.                                 w_cmd(0xc7);
  106.                           w_dat(0+'4');
  107.                                 w_string(0xca,word3);
  108.                         }
  109.                         //水位3
  110.                         if(sw6==1&&sw5==1&&sw4==1&&sw3==0&&sw2==1&&sw1==1&&i==1)//当唯一的闭合一个传感器单元:水位3时发生
  111.                         { dianji=0;
  112.                        
  113.                           w_cmd(0xc7);
  114.                           w_dat(0+'3');       
  115.                                 w_string(0xca,word3);
  116.                         }
  117.                         //水位2
  118.               if(sw6==1&&sw5==1&&sw4==1&&sw3==1&&sw2==0&&sw1==1&&i==1)//当唯一的闭合一个传感器单元:水位2时发生
  119.                         { dianji=0;
  120.                        
  121.                                 w_cmd(0xc7);
  122.                           w_dat(0+'2');
  123.                                 w_string(0xca,word3);
  124.                         }
  125.                         //水位低
  126.                         if(sw6==1&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==0&&i==1)//当唯一的闭合一个传感器单元:水位1时发生
  127.                         {
  128.                                 dianji=0;//开电机
  129.                                
  130.                                 w_cmd(0xc7);
  131.                           w_dat(0+'1');
  132.                                 w_string(0xca,word3);
  133.                         }
  134.                         //手工上水
  135.                     if(shougong==0)//当按手工上水按钮时发生
  136.                         {   
  137.                           
  138.                              i=1;
  139.                       dianji=0;//开电机
  140.                                
  141.                                 w_cmd(0xc7);//显示0表示手工上水已有反应
  142.                                 w_dat(0+'0');
  143.                        
  144.                                 w_string(0xca,word3);
  145.                                 delay();//开始
  146.                         }
  147.        
  148.         }
  149. }
复制代码



水位控制lcd1602.rar

45.58 KB, 下载次数: 117, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:144185 发表于 2016-10-24 10:51 | 只看该作者
为什么下载后没有仿真呢?
回复

使用道具 举报

板凳
ID:99130 发表于 2017-3-12 12:48 | 只看该作者
这个怎么测量水位
回复

使用道具 举报

地板
ID:106195 发表于 2017-9-1 18:01 | 只看该作者
感谢分享,支持一下。
回复

使用道具 举报

5#
ID:781136 发表于 2020-6-18 17:38 | 只看该作者
能不能解释下怎么运行的和原理
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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