1.基于单片机的液位检测系统的设计与制作
自己做个最小系统板,参照数据手册就可以做了!/*-----------------------------------------------超声波测距------------------------------------------------*/#include
2.谁给个基于单片机的水塔水位论文设计
智能水位控制系统毕业设计 一、水位智能检测系统设计原理 实验证明,纯净水几乎是不导电的,但自然界存在的以及人们日常使用的水都会含有一定的Mg2+、Ca2+等离子,它们的存在使水导电。
本控制装置就是利用水的导电性完成的。 如图1所示,虚线表示允许水位变化的上下限。
在正常情况下,应保持水位在虚线范围之内。为此,在水塔的不同高度安装了3根金属棒,以感知水位变化情况。
图1 水位检测原理图 其中B棒处于下限水位,C棒处于上限水位,A棒接+5V电源,B棒、C棒各通过一个电阻与地相连。 水塔由电机带动水泵供水,单片机控制电机转动以达到对水位控制之目的。
供水时,水位上升。当达到上限时,由于水的导电作用,B、C棒连通+5V。
因此,b、c两端均为1状态,这时应停止电机和水泵工作,不再给水塔供水。 当水位降到下限时,B、C棒都不能与A棒导电,因此,b、c两端均为0状态。
这时应启动电机,带动水泵工作,给水塔供水。 当水位处于上下限之间时,B棒与A棒导通,b端为1状态。
C端为0状态。这时,无论是电机已在带动水泵给水塔加水,水位在不断上升;或者是电机没有工作,用水使水位在不断下降。
都应继续维持原有的工作状态。 二、基于单片机控制的水塔水位控制系统 1单片机控制电路 水塔水位控制的电路如图2所示。
2前向通道设计 图2 水塔水位控制电路 由于所采用的信号是频率随水位变化而变的脉冲信号(开关量),因此电路设计中省去了A/D转换部分,这不仅降低了硬件电路的成本,而且由于采用数字脉冲信号通信,提高了系统的抗干扰能力、稳定性和精度。 输入的可变脉冲信号送到8031的P10和P11脚电平,当接收到信号时,输入脉冲使其输出高电平,而无信号输入时,无触发脉冲,此时翻转为低电平。
程序控制8031周期性地对P11和P10脚电平进行采样,达到控制的目的。 3.微机控制数据处理部分 在电路设计中,充分利用8031已有端口的作用,同时也考虑扩展,做到尽可能节省元件,不仅可降低成本,而且提高可靠性。
(1)使用8031单片机。水塔水位控制的电路如图3—1。
接受电路得到的是频率随水位变化的调频脉冲,它反映了贮水池水位的高度,对其进行信号处理,便能实现对水位的控制及故障报警等功能。要完成此一工作, 最佳的选择是采用微机控制,实验中是以MCS—51系列弹片机8031作CPU。
对接受的信号进行数据处理,完成相应的水位控制、故障报警等功能。8031芯片的内部结构框图见图3所示。
由图3可大致看到:它含运算器、控制器、片内存储器、4个I/O接口、串行接口定时器/计数器、中断系统、振荡器等功能部件。图中SP是堆栈指针寄存器,栈区占用了片内RAM的部分单元;未见通用寄存器(工作寄存器),因单片机片内有存储器,与访问工作寄存器一样方便,所以就把一定数量的片内RAM 字节划作工作寄存器区;PSW 是程序状态字寄存器,简称程序状态字,相当于其他计算机的标志寄存器;DPTR是数据指针寄存器,在访问片外ROM、片外RAM、甚至扩展I/O接口时特别有用;B寄存器又称乘法寄存器,它与累加器A协同 工作,可进行乘法操作和除法操作。
实验中8031时钟频率为6MHz。由于8031没有内部ROM,因此需外扩展程序存储器。
本系统采用2732EPROM扩展4K程序存储器,对应地址空间为0000H~0FFFH。 (2)74LS373作为地址锁存器。
74LS373片内是8个输出带三态门的D锁存器,其结构示意图见图4所示。当使能端G呈高点平时锁存器中的内容可更新,而在返回低电平瞬间实现锁存。
如此时芯片的输出控制端为低,也即输出三态门打开,锁存器中的地址信息便可经由三态门输出。除74LS373外,84LS273、8282、8212等芯片也可用作地址锁存器,但使用时接法稍有不同,由于接线稍繁、多用硬件和价格稍贵,故不如74LS373用的普遍。
图3 8031芯片内部结构框图 (3)两个水位信号由P10和P11输入,这两个信号共有四种组合状态。如表3—1所示。
其中第三种组合(b=1、c=0)正常情况下是不能发生的,但在设计中还是应该考虑到,并作为一种故障状态。 表3-1 水位信号状态表 C(P11) B(P10) 操作 0 0 电机运转 0 1 维持原状 1 0 故障报警 1 1 电机停转 (4)控制信号由P12端输出,去控制电机。
为了提高控制的可靠性,使用了光电耦合。 4.报警电路 本系统采用发光二极管,当控制电路出现故障状态时,P13置零,发光二极管导通,发光报警。
5.软件设计 一个应用系统,要完成各项功能,首先必须有较完善的硬件作保证。同时还必须得到相应设计合理的软件的支持,尤其是微机应用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。
甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。因此充分利用其内部丰富的硬件资源和软件资源,采用MCS—51汇编语言和结构化程序设计方法进行软件编程。
这个系统程序由主控程序、延时子程序组成。其中主控程序是核心。
由它控制着整个系统程序的运行和跳转。流程图如图5所示。
包括系统初始化,数据处理,故障报警等。 电路具体工作情况如下。
3.各位朋友,谁能给小弟介绍片有关单片机液位控制方面的论文 谢谢了
产品简介: 浮球开关是一种结构简单,使用方便,安全可靠的液位控制器,它具有比一般机械开关体积小,速度快,工作寿命长,抗负载冲击能力强等特点,其在造船,造纸,印刷,发电机设备,塑料辅机,石油化工,食品工业,水处理,电工,染料工业,油压机械等方面都得到了广泛的应用.
工作原理: 在密封的非导磁性管内安装一个或多个干簧管,然后将此管穿过一个或多个中空且内部有环形磁铁的浮球,液位的上升或下降会带动浮球一起移动,从而使该非导磁性管内的干簧管产生吸合和断开的动作,并输出一个开关信号.
本厂专业生产各种金属型,塑料型液位计,液位开关!
025-85552278 85552840 黄先生
4.基于单片机的液位检测系统的设计与制作
自己做个最小系统板,参照数据手册就可以做了!/*-----------------------------------------------超声波测距------------------------------------------------*/#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include"1602.h"#include"delay.h"sbit Tx = P3^0;sbit Rx = P3^1; //由于不用外部中断,这两个引脚可以随便接//sbit INTR1 = P3^3; //红外接口标志//sbit BUZ = P3^0; //蜂鸣器和led灯报警bit TimeUp ; //定时器溢出标志位long Th0 , Tl0 ;unsigned long time0 = 0 ;unsigned long Result ;//unsigned char In_Number = 0;char code Tab[10]="0123456789";unsigned char TempData[3];/*------------------------------------------------ 定时器0中断处理------------------------------------------------*/void tim0_isr (void) interrupt 1 using 1{ TimeUp=1; //溢出标志位置高}///*------------------------------------------------// 外部中断2中断处理//------------------------------------------------*///void EX1_ISR (void) interrupt 2 //外部中断2服务函数//{// In_Number++;//}//void Beep(void) //声光提示//{// BUZ = 0;// DelayMs(150);// BUZ = 1;//}/*------------------------------------------------ 外部中断0初始化------------------------------------------------*///void EX1_init (void)//{// IT1 = 1; //set INT1 int type (1:Falling only 0:Low level)// EX1 = 1; //enable INT1 interrupt// EA = 1; //open global interrupt switch //}unsigned int Measure_Work(void){char Delay20us = 0 ;char RxBack = 1 ;TMOD = 0x01 ; //定时器工作方式1::16位不重装Tx = 0 ;Th0 = 0 ;Tl0 = 0 ;TimeUp = 0 ;EA = 1 ; //开总中断ET0 = 1 ; //允许定时器0中断TR0 = 0 ; //关定时器TH0 = 0 ;TL0 = 0 ;Tx = 1 ; //拉高 for (Delay20us=20;Delay20us>0;Delay20us--); //延时20USTx = 0 ; //拉低while(Rx==0); //等待回波引脚变为低电平TH0 = 0 ;TL0 = 0 ; TR0 = 1 ; //开定时器//使用软件查询方式while(RxBack){if(Rx==0||TimeUp){TR0 = 0 ;Th0 = TH0 ;Tl0 = TL0 ;TR0 = 1 ;RxBack = 0 ;}}while(!TimeUp); //等待定时器溢出time0 = (Th0*256+Tl0); //取出定时器的值Result = ((unsigned long)334*time0)/2000; //计算距离,结果为mmif(Result600){ Result = 0 ; }// if(Result>36)// { Result = (Result*116)-331 ;Result = Result/100;// }// else Result = Result ;// Result = Result + 8 ; //探头盲区的补偿return Result ; //返回测量结果}void Number_Work(){TempData[2] = Tab[Measure_Work()%100%10];TempData[1] = Tab[Measure_Work()%100/10];TempData[0] = Tab[Measure_Work()/100];}/*------------------------------------------------ 主函数------------------------------------------------*/void main(void){// IT1 = 1; //set INT1 int type (1:Falling only 0:Low level)// EX1 = 1; //enable INT1 interrupt// EA = 1; //open global interrupt switch BUZ = 1 ;LCD_Init(); //初始化液晶DelayMs(20); //延时有助于稳定LCD_Clear(); //清屏// BUZ = 0;// DelayMs(150);// BUZ = 1; LCD_Write_String(0,0,"Ce Ju "); LCD_Write_String(0,1,"Distance:");LCD_Write_String(13,1,"mm");while(1)//主循环 {Number_Work() ;LCD_Write_String(10,1,TempData);DelayMs(20); }}/*----------------------------------------------- 名称:LCD1602 引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK------------------------------------------------*/#include "1602.h"#include "delay.h"#define CHECK_BUSYsbit RS = P3^7; //定义端口 sbit RW = P3^4;sbit EN = P3^5;#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P1/*------------------------------------------------ 判忙函数------------------------------------------------*/ bit LCD_Check_Busy(void) { #ifdef CHECK_BUSY DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80);#else return 0;#endif }/*------------------------------------------------ 写入命令函数----------------- ----------------------------*/ void LCD_Write_Com(unsigned char com) { while(LCD_Check_Busy()); //忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; }/*------------------------------------------------ 写入数据函数------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { while(LCD_Check_Busy()); //忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; }/*------------------------------------------------ 清屏函数------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); }/*------------------------------------------------ 写入字符串函数------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } }/*------------------------------------------------ 写入字符函数------------------------------------------------*//* void 。
转载请注明出处众文网 » 基于单片机的水位控制系统设计毕业论文