如题所示
讲述用单片机做智能水塔控制系统
下面请各位爷入席就坐,装13即将开始。
要求:水位达到最低水位时自动抽水(PNP驱动,12V继电器控制)
无论水位高低,可以人工上水
达到最高水位时,电机自动停止工作
为了直观的看到水位,我用了数码管和LED来显示水位。废话不多说
直接上程序和仿真图
单片机源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- //定义一个数组,使数码管显示的数字和数组元素的下标相等
- unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
- 0x92,0x82,0xf8,0x80,0x90};
- sbit shuiman=P1^0;//水满
- sbit sw5=P1^1;//水位5
- sbit sw4=P1^2;//水位4
- sbit sw3=P1^3;//水位3
- sbit sw2=P1^4;//水位2
- sbit sw1=P1^5;//水位1
- sbit shougong=P1^6;//手工上水
- sbit dianji=P1^7;//电机控制位
- /*延时程序*/
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=120;j>0;j--);
- }
- void main()
- {
- P0=0xbf; //开机显示“-"
- while(1)
- {
- //水满
- if(shuiman==0&&sw5==0&&sw4==0&&sw3==0&&sw2==0&&sw1==0)//当唯一的闭合一个传感器单元:水位6时发生
- {
- dianji=1;//关电机
- P0=table[6];//显示水位深度:6**** 已满
- delayms(50);//延时一段时间让数码管显示给人以提示:水已满
- }
- //水位5
- if(shuiman==1&&sw5==0&&sw4==0&&sw3==0&&sw2==0&&sw1==0)//当唯一的闭合一个传感器单元:水位5时发生
- {
- P0=table[5];//显示水位深度:5
- }
- //水位4
- if(shuiman==1&&sw5==1&&sw4==0&&sw3==0&&sw2==0&&sw1==0)//当唯一的闭合一个传感器单元:水位4时发生
- {
- P0=table[4];//显示水位深度:4
- }
- //水位3
- if(shuiman==1&&sw5==1&&sw4==1&&sw3==0&&sw2==0&&sw1==0)//当唯一的闭合一个传感器单元:水位3时发生
- {
- P0=table[3];//显示水位深度:5
- }
- //水位2
- if(shuiman==1&&sw5==1&&sw4==1&&sw3==1&&sw2==0&&sw1==0)//当唯一的闭合一个传感器单元:水位2时发生
- {
- P0=table[2];//显示水位深度:2
- }
- //水位低
- if(shuiman==1&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==0)//当唯一的闭合一个传感器单元:水位1时发生
- {
- dianji=0;//开电机
- P0=table[1];//显示水位深度:1
- }
- //手工上水
- if(shougong==0)//当按手工上水按钮时发生
- {
- if(shuiman==0&&sw5==0&&sw4==0&&sw3==0&&sw2==0&&sw1==0)
- {
- dianji=1;
- }
- dianji=0;//开电机
- P0=table[0];//显示0表示手工上水已有反应
- delayms(800);//延时一段时间让数码管显示给人以提示:已开始手工上水
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
水塔自动供水.rar
(164.71 KB, 下载次数: 184)
|