本設計是利用STC89C52單片機設計一種水位控制系統。主要是基于單片機的硬件設計以及程序設計, 包括測量電路部分、液位實時數顯輸出部分以及液位控制部分,還在此基礎上添加蜂鳴器。本設計只是概念性設計了電路部分,并不涉及具體的數值設定,經過了實際應用檢測。該系統實現了水位監測,水位控制,水位顯示,故障報警功能。在設計中主要采用了傳感技術、單片機技術、弱電控制強電技術、C語言編程等技術
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真截圖.jpg (363.35 KB, 下載次數: 73)
下載附件
2020-4-6 16:46 上傳
仿真截圖.png (21.31 KB, 下載次數: 59)
下載附件
2020-4-6 16:46 上傳
電路原理圖如下:
截圖格式 雙擊可以打.png (91.73 KB, 下載次數: 81)
下載附件
2020-4-6 12:12 上傳
制作出來的實物圖如下:
照片 (3).jpg (221.92 KB, 下載次數: 72)
下載附件
2020-4-6 16:44 上傳
水位傳感器最左邊長的線是接電源正極,再對應原理圖焊接.jpg (121.02 KB, 下載次數: 69)
下載附件
2020-4-6 16:44 上傳
水位傳感器背面照 背面右邊這條長的導線必需要有.jpg (99.14 KB, 下載次數: 61)
下載附件
2020-4-6 16:44 上傳
照片 (4).jpg (232.84 KB, 下載次數: 55)
下載附件
2020-4-6 16:44 上傳
照片.png (1.15 MB, 下載次數: 52)
下載附件
2020-4-6 16:44 上傳
照片.JPG (291.04 KB, 下載次數: 55)
下載附件
2020-4-6 16:44 上傳
單片機源程序如下:
- #include <reg52.h> //調用單片機頭文件
- #define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
- //數碼管段選定義 0 1 2 3 4 5 6 7 8 9
- uchar code smg_du[]={0xde,0x91,0xcd,0xd5,0x93,0x2b,0x5f,0xd4,0xdf,0xd1,
- // A B C D E F 不顯示
-
- 0xd7,0x1f,0x4e,0x9d,0x4f,0x47 }; //斷碼
- sbit led_y = P2^2; //黃燈 //高水位
- sbit led_g = P2^1; //綠燈
- sbit led_r = P2^0; //紅燈 //低水位
- sbit shuiwei1 = P3^4;
- sbit shuiwei2 = P3^5;
- sbit shuiwei3 = P3^6;
- sbit shuiwei4 = P3^7;
- sbit relay = P1^0; //繼電器
- sbit beep = P2^7; //蜂鳴器
- uchar shuiwei; //水位
- sbit dianji = P2^3;
- /***********************1ms延時函數*****************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
- /********************獨立按鍵程序*****************/
- uchar key_can; //按鍵值
- void key() //獨立按鍵程序
- {
- static uchar key_new;
- P1 |= 0x06;
- if((P1 & 0x06) != 0x06) //按鍵按下
- {
- delay_1ms(1); //按鍵消抖動
- if(((P1 & 0x06) != 0x06) && (key_new == 1))
- { //確認是按鍵按下
- key_new = 0;
- switch(P1 & 0x06)
- {
- case 0x02: relay = 0; //手動進水
- break; //得到按鍵值
- case 0x04: relay = 1; //手動停止進水
- break; //得到按鍵值
- }
- }
- }
- else //按鍵松開
- key_new = 1;
- }
- /******************主程序**********************/
- void main()
- {
- P0 = P1 = P2 = P3 = 0xff; //初始化單片機IO口為高電平
- P0 = ~smg_du[0] ;
- delay_1ms(1500);
- while(1)
- {
- key(); //獨立按鍵程序
- if(shuiwei4 == 1) //高水位 4檔
- {
- shuiwei = 4;
- led_r = 1;led_g = 1;led_y = 0; //高水位綠燈亮
- }
- else if(shuiwei3 == 1) // 3檔
- {
- shuiwei = 3;
- led_r = 1;led_g = 0;led_y = 1; //正常水位綠燈亮
- }
- else if(shuiwei2 == 1) // 2檔
- {
- shuiwei = 2;
- led_r = 1;led_g = 0;led_y = 1; //正常水位綠燈亮
- }
- else if(shuiwei1 == 1) // 1檔
- {
- shuiwei = 1;
- led_r = 1;led_g = 0;led_y = 1; //正常水位綠燈亮
- }else //低水位 0
- {
- shuiwei = 0;
- led_r = 0;led_g = 1;led_y = 1; //低水位紅燈亮
- }
- P0 = ~smg_du[shuiwei]; //
- if(shuiwei < 1) //進水
- {
- beep = ~beep; //蜂鳴器報警
- relay = 0; //打開繼電器 進水
- }
- else
- {
- beep = 1; //關閉蜂鳴器
- }
- if(shuiwei >= 4) //停止進水
- {
- relay = 1; //關閉繼電器
- dianji = 0; //打開抽水電機
- }else
- {
- dianji = 1; //關閉電機
- }
- key(); //獨立按鍵程序
- delay_1ms(100);
- }
- }
復制代碼
所有資料51hei提供下載:
水塔水箱水位系統 數碼管 2個抽水電機.rar
(547.36 KB, 下載次數: 163)
2020-4-6 16:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|