微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 超声波水位测量控制系统C语言源程序

超声波水位测量控制系统C语言源程序

时间:11-25 来源:互联网 点击:
本文介绍一个超声波水位测量控制系统C语言源程序,本设计的超声波水位测量控制系统是一种利用超声波技术、电子技术、电磁开关技术相结合来实现非接触式液位测量和控制系统,能够在某些特定场合或环境比较恶劣的情况下使用,在工业监测和控制等方面得到了广泛应用。近些年来,工业水平的不断发展对液位测量的精度、广度和抗干扰性提出了越来越高的要求,超声波测距技术本身也在不断的完善和发展,测距仪更趋向小型化和智能化,逐步实现了高精确度、高可靠性、安全性和多功能化。
超声波水位测量控制系统C语言源程序,电子小制作可测量并显示液位,还可以通过单片机控制把液位限定在某一范围内,在单片机控制失效的情况下发出报警信号,提醒工作人员进行手动控制。研究内容包括超声波测距的基本原理与方法、精度影响因素的分析与解决办法、单片机对阀门的控制方法、监控系统的整体方案设计、硬件设计、软件流程设计等。设计完成之后提供一套可以使用的超声波测距仪,测量范围和测量精度满足一般工业应用需要。设计完成之后应提供一套可以用于一般工业生产的液位监控系统。通过毕业设计的整个过程,可以综合运用传感器、单片机、电子电路和程序设计方面的知识,锻炼和提高动手能力、参与科研工作的能力。
本超声波水位测量控制系统C语言源程序涉及了所学的单片机、自动控制原理、数字电路、模拟电路、电路分析、软件技术、智能检测与转换技术等几乎所有的专业课程,很好的体现了综合训练的要求。本电子小制作设计属于一个完整的系统,设计过程中需要考虑的因素较多,但设计功能相对较为简单不会存在太大困难,题目难易适中。既可以巩固所学的知识和技能,又可以有所提高。本课题相对其它课题来说,资料相对较多,搜索资料相对容易。但对本科生来说,从众多质量参差不齐的资料中选择最合适的资料也是比较困难的。超声波水位测量控制系统C语言源程序这对设计学生来说是一次很好的锻炼。
//超声波水位测量控制系统C语言源程序
#include
#define uchar unsigned char
#define uint unsigned int
sbit Trig=P1^0;sbit Echo=P3^2;
sbit lcden=P0^4;
sbit lcdrs=P0^1;
sbit alertl=P1^1;//低水位报警,红灯亮电子小制作
sbit alertm=P1^7;//中水位绿灯亮
sbit alerth=P1^4;//高水位报警,黄灯亮
sbit pumb=P0^2;//low vol is avalibal http://www.duankudp.com/
sbit power=P3^5;
uint time,distance,waterlevel;
uchar timeH,timeL;
bit succeed_flag;
void delay(uint z);

//超声波水位测量控制系统C语言源程序电子小制作
void init()
{
power=0; //power is ok
lcden=0; //low enble http://www.duankudp.com/
write_com(0x38);
write_com(0x0c); //display open ,cursor off,blink off
write_com(0x06); //pointer auto add 1
write_com(0x01); //clear screen and pointer
write_com(0x80);
TMOD=0x10; //time1,16 bit timmer
EA=0; //open entire interrupt
Trig=0;
Echo=0;
delay(1);
}
//***************************************************************
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//***************************************************************电子小制作
void display(uint temp)
{
write_com(0x83);
write_dat((temp/100)+0x30);
delay(20);
write_dat(temp/10+0x30);
delay(20);
write_dat(temp+0x30);

}
//***************************************************************
void delay_20us()
{
uchar a ;
for(a=0;a<100;a++);
}
//***************************************************************
void display1()
{
uchar code table[]="SIAS UNIVERSITY ";
uchar code table1[]="ZZS 20071521258 ";
uchar num;
write_com(0x80);
for(num=0;num<16;num++)
{
write_dat(table[num]);
delay(300);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_dat(table1[num]);
delay(300);
}
write_com(0x01);
delay(1000);
}
//***************************************************************
//***************************************************************
//外部中断0,用做判断回波电平//超声波水位测量控制系统C语言源程序
void exter() interrupt 0 // 外部中断0是0号http://www.5imcu.net/
{
timeH =TH1; //取出定时器的值
timeL =TL1; //取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时//超声波水位测量控制系统C语言源程序

void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
//***************************************************************
//***************************************************************
void main()
{
init(); //timer1,16 bit
display1();
init1();
while(1)
{
alertl=1; //low alert
alertm=1; //middle alert
alerth=1; //high alert
EA=0; //off entire interrupt
Trig=1; //ultrasonic Trigger
delay_20us(); //delay 20us
Trig=0; //20uss Pulse
while(Echo==0); //wait Echo change High Vol
succeed_flag=0; //clear succeed flag
EA=1; //open entire interruot
EX0=1; //open exinterrupt0
TH1=0; //clear timer1s high 8 bit
TL1=0; //clear timer1s low 8 bit
TF1=0; //clear timer1s overflow bit
TR1=1; //start timer1
delay(20); //waitting
TR1=0; //stop timer1
EX0=0; //off exinterrupt0
if(succeed_flag==1)
{
time=timeH*256+timeL; //entire time
distance=time*0.172; //s=t*340/2*1000mm
waterlevel=163-distance; //
if(waterlevel>=0&&waterlevel<=163)
display(waterlevel);

}
if(succeed_flag==0)
{
distance=0;//没有回波则清零//超声波水位测量控制系统C语言源程序

}
if(waterlevel>=0&&waterlevel<=50)
{
write_com(0x8C);
write_dat(L);
alertl=0;//RED Light,low water level
pumb=0;//open pumb,add water http://www.5imcu.net/
}
else if(waterlevel>50&&waterlevel<=100)
{
write_com(0x8C);
write_dat(M);
alertm=0;
}
else if(waterlevel>100&&waterlevel<=163)
{
write_com(0x8C);
write_dat(H);
alerth=0;
pumb=1;//off pumb http://www.5imcu.net/
}


delay(200);

}
}
//***************************************************************

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top