【毕业设计】基于单片机水塔水位控制系统(整理版)_第1页
【毕业设计】基于单片机水塔水位控制系统(整理版)_第2页
【毕业设计】基于单片机水塔水位控制系统(整理版)_第3页
【毕业设计】基于单片机水塔水位控制系统(整理版)_第4页
【毕业设计】基于单片机水塔水位控制系统(整理版)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【精品文档】世界上,成功的有两种人,一种人是傻子,一种人是疯子。傻子是会吃亏的人,疯子是会行动的人!摘要水塔是在日常生活和工业应用中经常见到的蓄水装置,基于单片机的水塔水位控制系统使水塔水位自动保持在一定的位置,通过对其水位的控制对外供水,以满足需要。该系统使用水位传感器对水塔水位进行检测并将检测到的信号传给单片机STC89C52进行处理,通过调整定时器的定时时间来增大或者缩小占空比,并采用C语言编写控制程序,从而实现电机的调速。最后,使用带字库的LCD1602液晶屏显示当前水位状态以及电动机的转速。该系统实现了过低水位蜂鸣器鸣笛报警、过低警戒水位自动处理、正常水位蜂鸣器鸣笛报警以及正常水位处理、手动按键调整PWM(PulseWidthModulation)电机调速等功能。本系统适应在不同的用水场合下的用水速度需要,节省工作时间,提高了整体工作的效率,实现水塔水位的自动控制。关键词:单片机控制;水位检测;LCD1602显示;PWM电机调速

ABSTRACTThewatertoweriscommonlyseenindailylifeandindustrialasapplicationofstoragedevice.Thesystemisbasedonsingle-chipmicrocomputercontrolsystemhelptokeepwatertowersincertainwaterlevelandaccordingtotheautomaticlevelofcontroltosupplytheneedsofwater.WaterlevelsensorisusedfortowersontheexaminationdetectsignalandtransferthesignaltoSTC89C52,throughtheadjustmentofthetimetoincreaseornarrowthedutyratio,andusingClanguageprogram,soastorealizethecompilationcontrolofmotorspeed.Finally,currentlevelsandmotorspeedareshownwith1602LCDscreeninthissystem.Thissystemrealizesthebuzzerlowlevelalarm,lowwhistlewarninglevelautomaticprocessing,normallevelalarmornormalwaterbuzzersirensandmanualbuttonsPulseWidthModulation.Thissystemrealizestheautomaticcontrolindifferentwatersituationofwatertosavetheworkingtime,speed,andalsoimprovestheoverallefficiencyofwatertowers.KeyWords:SCMcontrol;Waterdetection;LCD1602display;PWMmotorspeed;

目录1 引言 附录二程序源代码#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitled=P0^1;//led灯显示,低电平亮sbitspeaker=P1^0;//蜂鸣器,低电平报警sbitlcd_rs=P0^7;//1602数据选择命令端sbitlcd_rw=P0^6; //1602读写选择端sbitlcd_enable=P0^5;//1602使能端定义sbitkey_up=P3^0;//pwm速度调整端口,电机速度加一sbitkey_down=P3^1; //pwm速度调整端口,电机速度减一sbitmonter=P1^1;//电机驱动端口,pwm控制输出sbitwater_normal=P1^6;//水位过高传感器模拟按键端口,低电平报警sbitwater_low=P1^7;//水位过低传感器模拟按键端口,低电平报警ucharcodepwm_t[]={45,90,100,130};//模式下的pwm值,人为已经设定的时间是100,可以调整上限值uintmodel=1,pwmT=150,time_count=0;voidkey_scan();//按键扫描函数voidcheck_water_level();//检测水位是否正常函数voiddelay(uintz) //延时函数{uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//*******************1602液晶显示函数************************// voidlcd_write_comd(ucharcomd) //1602写指令函数{lcd_rs=0;//选择指令lcd_rw=0;//选择写 delay(5); P2=comd;//取命令delay(8); lcd_enable=1;//使能有效 delay(8); lcd_enable=0;}voidlcd_write_data(uchardate)//1602写数据函数{ lcd_rs=1; //选择数据lcd_rw=0; //选择写操作 delay(5); P2=date; //取数据操作 delay(8); lcd_enable=1; //使能有效 delay(8); lcd_enable=0;}voidlcd_set_xy(ucharx,uchary)//定位具体位置{uintaddress;if(y==1)address=0x80+x; //第一行的位置 else address=0xc0+x; //第二行的位置 lcd_write_comd(address);}voidlcd_write_char(ucharx,uchary,uchardate) //写一个字符函数{ lcd_set_xy(x,y); //设定位置 lcd_write_data(date); //写入数据}voidlcd_write_string(ucharx,uchary,uchar*s) //写一个字符串函数{ lcd_set_xy(x,y); //设定位置while(*s) //循环写入数据 { lcd_write_data(*s); s++; } }//********电机PWM调速函数及程序主函数*******//voidinit() //初始化函数{ uchari,count=25; led=1; //开机led灯闪烁for(i=0;i<15;i++){ led=~led; delay(count); count=count+5; }led=0; lcd_write_comd(0x38);//设置16*2行显示,5*7点阵,8位数据接口lcd_write_comd(0x0c);//开显示lcd_write_comd(0x01);//清屏lcd_write_comd(0x80);//设定初始位置lcd_write_string(0,1,"WaterLev:Normal");lcd_write_string(0,0,"MonterSpeed:1");speaker=0; //蜂鸣器鸣响一声delay(1000);speaker=1; TMOD=0X02; //定时0,定时时间为150us,工作在方式2TH0=(256-150)%256; TL0=TH0;EA=1; //开总中断ET0=1; //开定时器0的中断TR0=0; //定时器0不启动}voidmain()//主函数{init();while(1) { key_scan(); check_water_level();//检测水位是否正常函数 }}voidtimre_0()interrupt1 //定时器0的中断子函数{time_count++;if(time_count==pwmT) //和PWM脉宽的时间比较,时间到了定时器清零,重新开始{time_count=0;}if(time_count<pwm_t[model-1]) //当计数器在PWM定制时间内的时候,输出相关的pwm控制信号{ monter=0; }else { monter=1; }}voidcheck_water_level()//检测水位是否正常函数{uchari; if(water_normal==0) //水位是否正常状态检测 {led=1; TR0=0; monter=1; //关闭电机 speaker=0; //蜂鸣器报警 lcd_write_string(0,1,"WaterLev:Normal");//液晶屏显示 for(i=0;i<20;i++) //灯闪烁报警 { led=~led; delay(100); } led=0; speaker=1; } if(water_low==0) //水位过低检测 {led=1; TR0=1; //开启电机 monter=0; speaker=0; //蜂鸣器报警 lcd_write_string(0,1,"WaterLev:Low");//液晶屏显示 for(i=0;i<20;i++)//灯闪烁报警 { led=~led; delay(100); } led=0; speaker=1; }}voidkey_scan() //按键扫描函数{uchari;if(key_up==0) //检测是否增加按键按下 {delay(15); if(key_up==0) {TR0=0; //有按键按下,电机一定要停止转动 model++; //pwm速度定制值调整加大 if(model==5) model=1; i=model+0x30; lcd_write_char(14,0,i);//液晶显示变化 while(!key_up); //按键是否释放检测 } } if(key_down==0) //检测是否减少

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论