|
通過開關模擬傳感器給單片機并顯示出狀態并控制電機轉動采用lcd1602來顯示.
下面是單片機水位控制系統的仿真原理圖:
下面是源程序:
- #include<reg52.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- unsigned char code word1[]={"Water Control"};
- unsigned char code word2[]={"State:"};//水位狀態
- unsigned char code word3[]={"M: ON"};//電機開
- unsigned char code word4[]={"M:OFF"};//電機關
- sbit RS=P2^0;
- sbit RW=P2^1;
- sbit EN=P2^2;
- sbit BUSY=P0^7;
- sbit LED=P2^7;
- sbit sw1=P1^5;
- sbit sw2=P1^4;
- sbit sw3=P1^3;
- sbit sw4=P1^2;
- sbit sw5=P1^1;
- sbit sw6=P1^0;
- sbit shougong=P1^6;
- sbit dianji=P1^7;
- void delay()
- { uint i,j;
- for(i=0;i<10;i++)
- for(j=0;j<200;j++);
- }
- void start()
- {
- P0=0Xff;
- do
- {
- RS=0;
- RW=1;
- EN=0;
- EN=1;
- }
- while(BUSY==1);
- EN=0;
- }
- void w_dat(uchar dat)
- {
- start();
- EN=0;
- P0=dat;
- RS=1;
- RW=0;
- EN=1;
- EN=0;
- }
- void w_cmd(uchar cmd)
- {
-
- start();
- EN=0;
- P0=cmd;
- RS=0;
- RW=0;
- EN=1;
- EN=0;
- }
- void LCD1602() //LCD初始化命令
- {
- w_cmd(0x38);
- w_cmd(0x0f);
- w_cmd(0x06);
- w_cmd(0x01);
- }
- void w_string(uchar addr_start, uchar*p) //送入字符串
- {
- w_cmd(addr_start);
- while (*p != '\0')
- {
- w_dat(*p++);
- }
- }
- void main()
- { uchar i;
- LCD1602();
- w_string(0x82,word1);
- w_cmd(0x0c);
- w_string(0xc0,word2);
- while(1)
- {
-
- if(sw6==0&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==1)//當唯一的閉合一個傳感器單元:水位6時發生
- { i=0;
- dianji=1;//關電機
- w_cmd(0xc7);
- w_dat(0+'6'); //液晶屏顯示6
-
- w_string(0xca,word4);
- }
- //水位5
- if(sw6==1&&sw5==0&&sw4==1&&sw3==1&&sw2==1&&sw1==1&&i==1)//當唯一的閉合一個傳感器單元:水位5時發生
- {
- dianji=0;
-
- w_cmd(0xc7);
- w_dat(0+'5'); //液晶屏顯示5
- w_string(0xca,word3);
- }
- //水位4
- if(sw6==1&&sw5==1&&sw4==0&&sw3==1&&sw2==1&&sw1==1&&i==1)//當唯一的閉合一個傳感器單元:水位4時發生
- { dianji=0;
-
- w_cmd(0xc7);
- w_dat(0+'4');
- w_string(0xca,word3);
- }
- //水位3
- if(sw6==1&&sw5==1&&sw4==1&&sw3==0&&sw2==1&&sw1==1&&i==1)//當唯一的閉合一個傳感器單元:水位3時發生
- { dianji=0;
-
- w_cmd(0xc7);
- w_dat(0+'3');
- w_string(0xca,word3);
- }
- //水位2
- if(sw6==1&&sw5==1&&sw4==1&&sw3==1&&sw2==0&&sw1==1&&i==1)//當唯一的閉合一個傳感器單元:水位2時發生
- { dianji=0;
-
- w_cmd(0xc7);
- w_dat(0+'2');
- w_string(0xca,word3);
- }
- //水位低
- if(sw6==1&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==0&&i==1)//當唯一的閉合一個傳感器單元:水位1時發生
- {
- dianji=0;//開電機
-
- w_cmd(0xc7);
- w_dat(0+'1');
- w_string(0xca,word3);
- }
- //手工上水
- if(shougong==0)//當按手工上水按鈕時發生
- {
-
- i=1;
- dianji=0;//開電機
-
- w_cmd(0xc7);//顯示0表示手工上水已有反應
- w_dat(0+'0');
-
- w_string(0xca,word3);
- delay();//開始
- }
-
- }
- }
復制代碼
|
-
-
水位控制lcd1602.rar
2016-9-9 00:35 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
45.58 KB, 下載次數: 118, 下載積分: 黑幣 -5
|