本文介绍一个超声波水位丈量操控体系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);
}
}
//***************************************************************
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/259548.html