基于51单片机的液位控制器_第1页
基于51单片机的液位控制器_第2页
基于51单片机的液位控制器_第3页
基于51单片机的液位控制器_第4页
基于51单片机的液位控制器_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、(1)判断液位高度(2)用力控软件绘出工程平面图以及用keil编辑程序(3)设置相应的实时控制和报警(4)确定I/O端口功能#include #define uint unsigned intvoid delay(uint a;void display1(uint a;void key_control(;void pour_liquid(;void emit_liquid(;/ void alarm1(;int alarm(;void give_out(;void control(;uint ADC( ;sbit ALE=P20;sbit EOC=P21;sbit OE=P22;sbit cl

2、k=P23;/sbit p17=p17;sbit P14=P14;sbit P15=P15;sbit P16=P16;sbit P24=P24;sbit P25=P25;sbit P26=P26;sbit P27=P27;/*模数转换器工作的前提条件是(由于在本题中不需要地址锁存,所以ALE不管,eoc为数模转换完毕由低电平变成了高电平,oe为打开三态门数据接收,start为数模开始转换负跳变为开始工作)clk为数模转换器提供时钟*/显示uint TAB=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09 ;/提供时钟脉冲void timer0_

3、int(void interrupt 1 /时钟中断 定时器/计数器0clk=clk; /计数器提供工作时钟void timer1_int(void interrupt 3 /报警 定时器/计数器1uint recieve;recieve=ADC(; /接收转换后的数据TH1=0xB1;TL0=0XDF; /给定时器重新装初值 /缓冲区 半场鸣.void main(uint data1;TMOD=0X12; /使定时器0 工作在方式2 定时器1 工作方式2TR0=1; /开计数器/定时器0TR1=1; /开计数器/定时器1IE=0X8A; /开中断,能响应计数器溢出中断TH0=240; TH1

4、=0xB1;TL0=0; TL0=0XDF; /中断时间 定时器0 :15us 定时器1 :20msIP=0x02; /优先级的设置:定时器0的优先级高于定时器1的优先级while(1data1=ADC(;/模数转换display1(data1;alarm(;control(;/数模转换uint ADC( /返回数据为液体的高度uint data1;ALE=0;ALE=1;ALE=0;/给start端开始信号即使数模转换器开始工作delay(100;while(EOC=0;OE=1; /接收转换后的数据data1=P0;OE=0;data1=(uint50.0*data1/255.0;retu

5、rn data1;/报警int alarm( uint a ;int recieve;a=ADC(;if(a>35&&a<=40 /缓冲区P24=0 ;/ P25=1;recieve=1;else if(a>40 /报警 ;液体过多;需放掉一部分P24=0;P25=1;recieve=2;else if(a<=35&&a>=15 /在合适区P24=0;P25=0;recieve=3;else if(a<15 /液体过少,需加液体P24=1;P25=0;recieve=4;return recieve;/选通数码管void di

6、splay1(uint a uint temp1,temp2,temp3,temp4;temp1=a/1000; temp2=a%1000/100;temp3=a%100/10;temp4=a%10;if(temp1P1=TABtemp1;delay(100;P1=TABtemp2|0x10;delay(100;P1=TABtemp3|0x20;delay(100;P1=TABtemp4|0x30;delay(100;else if(temp1=0P16=1;if(temp2P1=TABtemp2|0x10;delay(100;P1=TABtemp3|0x20;delay(100;P1=TAB

7、temp4|0x30;delay(100;else if(temp2=0P16=1;if(temp3P1=TABtemp3|0x20;delay(100;P1=TABtemp4|0x30;delay(100;else if(temp3=0P16=1;P1=TABtemp4|0x30;delay(100;/延时程序段void delay(uint auint i;for(i=a;i>0;i-;/开关控制void key_control(uint a;a=ADC(;if(a>=15&&a<35P27=0;P3=0X63;P27=1;else if(a>35&

8、amp;&a<40P27=0;P3=0X63;P27=1;P25=1;P24=0;else if(a<15|a>=40P27=0;P3=(uinta*5.5;/注如液体时void pour_liquid(P27=0;P3=0X46; /开 注入液体开关P27=1; /锁存地址,直到注入液体大于35米时/if(a>35;/ P27=0; /如果在35米到40米之间断开注入液体开关那么不进行报警了/return 1;/else return 0;/需要清洗容器时 ,将液体清放完全/*void emit_liquid(alarm(;P27=0;P3=0XBC;P27=

9、1; */清放液体时,如果液体高度在35米到40米之间关闭清放液体开关那么也不进行报警了/*void give_out( uint a;a=ADC(;alarm(;P27=0;P3=0XBC; /开 输出液体开关P27=1; /锁存地址,直到输出液体小雨40米时if(a>35&&a<40;/ P27=0; /如果在35米到40米之间断开注入液体开关那么不进行报警了return 3;else return 2; */控制液体的流量void control( uint a;int recieve1;a=ADC(;recieve1=alarm(;if(recieve1!=1P26=1;if(recieve1=1 if(P26=0/关闭两开关 P26=0;P25=0;display1(a;/ recieve1=alarm1(;P27=0;P3=0X63;P27=1;else if(P26=1 display1(a;/alarm(;key_control(;P25=1;if(recieve1=2 /大于40米key_control(;/ recieve1=alarm(;display1(a;if(recieve1=3 /合适区key_control(;/recieve1=alarm(;display1(a;i

温馨提示

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

评论

0/150

提交评论