如題所示
講述用單片機做智能水塔控制系統
下面請各位爺入席就坐,裝13即將開始。
要求:水位達到最低水位時自動抽水(PNP驅動,12V繼電器控制)
無論水位高低,可以人工上水
達到最高水位時,電機自動停止工作
為了直觀的看到水位,我用了數碼管和LED來顯示水位。廢話不多說
直接上程序和仿真圖
QQ鎴浘20181201090627.png (329.4 KB, 下載次數: 111)
下載附件
2019-3-8 11:43 上傳
0.png (14.83 KB, 下載次數: 109)
下載附件
2019-3-9 02:11 上傳
單片機源程序如下:
- #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, 下載次數: 214)
2019-3-8 11:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|