欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5645|回復: 4
收起左側

單片機水位控制系統仿真及源程序 帶電機控制

[復制鏈接]
ID:137190 發表于 2016-9-9 00:36 | 顯示全部樓層 |閱讀模式
通過開關模擬傳感器給單片機并顯示出狀態并控制電機轉動采用lcd1602來顯示.

下面是單片機水位控制系統的仿真原理圖:
0.png


下面是源程序:
  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. }
復制代碼

0.png

水位控制lcd1602.rar

45.58 KB, 下載次數: 118, 下載積分: 黑幣 -5

回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表