仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include<reg51.h>
- //定義一個數(shù)組,使數(shù)碼管顯示的數(shù)字和數(shù)組元素的下標相等
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f};
- 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;//電機控制位
- sbit state=P3^7;//電機工作指示
- /*延時程序*/
- void delay02s(void)
- {
- unsigned char i,j,k;
- for(i=100;i>0;i--)
- for(j=100;j>0;j--)
- for(k=248;k>0;k--);
- }
- main()
- {
- P0=0;
- while(1)
- { /*************************傳感器是設計的一次只能觸發(fā)一個傳感器單?****************************
- //水滿
- if(shuiman==0&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==1)//當唯一的閉合一個傳感器單元:水位6時發(fā)生
- {
- dianji=1;//關電機
- state=1;//電機工作指示燈熄滅
- P0=table[6];//顯示水位深度:6**** 已滿
- delay02s();//延時一段時間讓數(shù)碼管顯示給人以提示:水已滿
- }
- //水位5
- if(shuiman==1&&sw5==0&&sw4==1&&sw3==1&&sw2==1&&sw1==1)//當唯一的閉合一個傳感器單元:水位5時發(fā)生
- {
- P0=table[5];//顯示水位深度:5
- }
- //水位4
- if(shuiman==1&&sw5==1&&sw4==0&&sw3==1&&sw2==1&&sw1==1)//當唯一的閉合一個傳感器單元:水位4時發(fā)生
- {
- P0=table[4];//顯示水位深度:4
- }
- //水位3
- if(shuiman==1&&sw5==1&&sw4==1&&sw3==0&&sw2==1&&sw1==1)//當唯一的閉合一個傳感器單元:水位3時發(fā)生
- {
- P0=table[3];//顯示水位深度:5
- }
- //水位2
- if(shuiman==1&&sw5==1&&sw4==1&&sw3==1&&sw2==0&&sw1==1)//當唯一的閉合一個傳感器單元:水位2時發(fā)生
- {
- P0=table[2];//顯示水位深度:2
- }
- //水位低
- if(shuiman==1&&sw5==1&&sw4==1&&sw3==1&&sw2==1&&sw1==0)//當唯一的閉合一個傳感器單元:水位1時發(fā)生
- {
- dianji=0;//開電機
- state=0;//電機工作指示燈打開
- P0=table[1];//顯示水位深度:1
- }
- //手工上水
- if(shougong==0)//當按手工上水按鈕時發(fā)生
- {
- dianji=0;//開電機
- state=0;//電機工作指示燈打開
- P0=table[0];//顯示0表示手工上水已有反應
- delay02s();//延時一段時間讓數(shù)碼管顯示給人以提示:已開始手工上水
- }
-
- }
-
- }
復制代碼
全部資料51hei下載地址:
單片機水塔控制系統(tǒng).zip
(77.49 KB, 下載次數(shù): 20)
2020-7-6 15:26 上傳
點擊文件名下載附件
|