本设计是利用STC89C52单片机设计一种水位控制系统。主要是基于单片机的硬件设计以及程序设计, 包括测量电路部分、液位实时数显输出部分以及液位控制部分,还在此基础上添加蜂鸣器。本设计只是概念性设计了电路部分,并不涉及具体的数值设定,经过了实际应用检测。该系统实现了水位监测,水位控制,水位显示,故障报警功能。在设计中主要采用了传感技术、单片机技术、弱电控制强电技术、C语言编程等技术
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
电路原理图如下:
制作出来的实物图如下:
单片机源程序如下:
- #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, 下载次数: 162)
|