|
通过开关模拟传感器给单片机并显示出状态并控制电机转动采用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();//开始
- }
-
- }
- }
复制代码
|
|