版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.储罐液位控制系统计算机控制技术课程设计核心:单片机 89s52片外扩展: 8KB RAM存储器 6264,I/O 口扩展 8155转换器: ADC0809,DAC0832锁存器等: 74HC373,74H377,74HC245和 3-8 译码器 74HC138输入 / 输出部件: 6 个 LED,4 个按键89S52 的 RD及 PSEN用与门接在一起后送入6264 的 OE端,使得.6264 既可以作为数据存储器,也可以作为程序存储器。液位信号(电压值)从 ADC0809的 IN0 引脚输入, A/D 转换后存储。液位给定值由键盘设定,与液位信号比较得出偏差值。若超限,则报警, LED4现
2、实 P, 同时以 P1.0 驱动报警器,以 P1.1 驱动蜂鸣器。按达林算法计算控制器的输出值。输出值经 D/A 转换得到模拟电压值并输出。液位信号的电压值经标度转换后, 变为液位值存储 , 送 LED显示。6个 LED显示如图 a 所示。LED5显示 H或 L,LED4为超限指示,LED3LED0.显示液位值, LED1数码管加小数点,显示范围为000.0999.9 。显示器与键盘设置LED5LED4LED3LED2LED1LED0H199.5键盘设定液位的高低报警限。采用4 键方式, 4 个按键的功能如图b 所示。显示与键盘循环扫描,无键按下时,LED显示实时液位,右键按下时,进入液位报警
3、限的修改。先按选择键方可进入修改,先按其他 3 个键无效。进入修改状态后,待修改的显示位LED5闪动,按 +或- 键可循环选择 H 或 L,同时后 4 位 LED显示对应的液位值。按确认件后调到下一个待修改的显示为 LED3并闪动,按 +或- 键循环修改09 数字,再按确认键调到下一位置,如此进行,知道 4 个数字修改完毕后退出修改状态。在修改状态时,若不按确认键,则 8 秒后退出修改状态。从视觉舒适的角度考虑,数字应为每 0.4 秒闪动一次。显示器与键盘设计选择+-确定数据采集: A/D 转换,采样周期为10s。数字滤波:采用5 个数平均滤波法。标度转换:将液位变送器的标准电压信号转换为液位
4、值。.动态显示:动态循环显示。键盘扫描:读键值并判断功能。控制计算:达林算法。控制输出: D/A 转换。报警处理:超过高、低报警器限时驱动报警灯及蜂鸣器。./ 实现程序 /#include <reg52.h>#include <math.h>#define uchar unsigned char#define uint unsigned intuchar xdata *p=0x0000;uchar xdata *p1=0x2000;uint getdata;/采样值uint w=0,jishi8=0;/计数加长计时,时间uint yh,yl,ye;/液位高低限及期望值s
5、bit jingdeng=P10;sbit jingsheng=P11;uchar code table=/段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x38;/19个字符uchar dispbuf4=0,0,0,0;float e2=0,0,u6=0,0,0,0,0,0;float con=0;jingdeng=0;/警灯jingsheng=0;/,蜂鸣器初始化viod main()void intdingshi();/定时器初始化/键盘扫描及修改设定
6、值/void keyscan();/实时液位显示/void led();/达林算法实现,DAC控制输出 /void dalin();void control(); / 输出控制量/报警程序 /void baojing();while(1)./键盘扫描及修改设定值/keyscan();/实时液位显示/led();/达林算法实现,DAC控制输出 /dalin();control(); / 输出控制量/报警程序 /baojing();viod delay(uchar i)/延时while(i-)_nop_();/ 实现每八秒采样一次/void intdingshi()/定时器初始化TMOD=0x01
7、;IT0=1;TH0=0x3C;TL0=0xB0;/定时 50msTR0=1;/启动定时器EA=1;/开中断ET0=1;void dingshi() interrupt 1 /定时器 0 中断,实现八秒定时TH0=0x3C;TL0=0xB0;/定时 50msw+;jishi8+;while(w=200)p=0x8000;/指针 ADC地址*p=0x00;/qi dongEX0=1;/打开外部中断0,采样一次w=0;.TR0=1;/启动定时器void waibu() interrupt 0 /外部中断0,实现 ADC采样 5 次 , 取平均值uint i=0,a5=0;p=0x8000;/指针
8、ADC地址P0=*p;getdata=P0;a5=a5+getdata;i+;if(i=5)qy=a5/5;/平均滤波i=0;a5=0;/ 实时液位显示/void led()dispbuf3=qy/100;dispbuf2=(qy%100)/10;dispbuf1=(qy%100)%10;dispbuf0=int(qy-dispbuf3*100-dispbuf2*10-dispbuf0)*10);p=0xC000;*p=0xFE;p1=0xE000;*p1=tabledispbuf0;delay(5);*p=(*p)<<1;*p1=tabledispbuf1;delay(5);*p
9、=(*p)<<1;*p1=tabledispbuf2;delay(5);*p=(*p)<<1;*p1=tabledispbuf3;delay(5);/ 达林算法实现,DAC控制输出 /void dalin()e0=qy-ye;/求出输入误差u0=0.9355*u1+0.0645*u5+0.8377*e0-0.8054*e1;.con=u0,/数字控制量输出e1=e0;u5=u4;u4=u3;u3=u2;u2=u1;u1=u0;void control()/输出控制量p=0x6000;*p=con;/ 键盘扫描及修改设定值/void keyscan()uint a=16,
10、b=dispbuf3,c=dispbuf2,d=dispbuf1,e=dispbuf0;/记录各位设定值p=0xA000;P0=*p;if(P0=0xfe)/说明开始修改, 键 0void dispplay(a,b,c,d,e);void dispplay(a,b,c,d,e);/延时 10msp=0xA000;P0=*p;if(P0=0xfe)p1=0xc000;/字位*p1=0xdf;/led5位选p1=0xe000;/字段disp(18);/初始显示 "L"P0=*p;while(P0!=0xf7)/键 3void dispplay(a,b,c,d,e);void d
11、ispplay(a,b,c,d,e);/延时 10msp=0xA000;P0=*p;/读键盘if(P0=0xfd)/键 1a+;if(a>=18)a=18;elseif(P0=0xfb)/键 2.a-;if(a<=16)a=16;p1=0xc000;/字位*p1=0xdf;p1=0xe000;/字段disp(a);/初始显示 "L"if(jishu8>=160)/超时跳出扫描jishu8=0;goto keyz; key2:P0=*p;while(P0!=0xf7)void dispplay(a,b,c,d,e);/延时 10msvoid dispplay
12、(a,b,c,d,e);p=0xA000;P0=*p;if(P0=0xfd)b+;if(b>=9)b=9;elseif(P0=0xfb)if(b>=1);b-;else b=0;p1=0xc000;/字位*p1=0xf7;/led3位选p1=0xe000;/字段disp(b);/初始显示 "L"if(jishu8>=160)jishu8=0;goto keyz;key3:P0=*p;while(P0!=0xf7)void dispplay(a,b,c,d,e);void dispplay(a,b,c,d,e);/延时 10ms.p=0xA000;P0=*p
13、;if(P0=0xfd)c+;if(c>=9)c=9;elseif(P0=0xfb)if(c>=1);c-;else c=0;p1=0xc000;/字位*p1=0xfb;/led2位选p1=0xe000;/字段disp(c);/初始显示 "L"if(jishu8>=160)jishu8=0;goto keyz;key4: P0=*p;while(P0!=0xf7)/键 3void dispplay(a,b,c,d,e);void dispplay(a,b,c,d,e);/延时 10msp=0xA000;P0=*p;if(P0=0xfd)/键 1d+;if(
14、d>=9)d=9;elseif(P0=0xfb)/键 2if(d>=1);d-;else d=0;p1=0xc000;/字位*p1=0xfd;/led1位选p1=0xe000;/字段disp(d);/初始显示 "L".if(jishu8>=160)jishu8=0;goto keyz;key5:P0=*p;while(P0!=0xf7)void dispplay(a,b,c,d,e);void dispplay(a,b,c,d,e);/延时 10msp=0xA000;P0=*p;if(P0=0xfd)e+;if(e>=9)e=9;elseif(P0=
15、0xfb)if(e>=1);e-;else e=0;p1=0xc000;/字位*p1=0xfe;/led0位选p1=0xe000;/字段disp(e);/初始显示 "L"if(jishu8>=160)jishu8=0;goto keyz;if(a=18)yl=b*100+c*10p+d+e*0.1;/液位低限 shedingelseif(a=16)yh=b*100+c*10p+d+e*0.1; /液位高限elseif(a=17)ye=b*100+c*10p+d+e*0.1; /液位期望值keyz: return.disp(uint x)*p1=tablex;/ 扫描时液位显示,充当延时除颤程序/void dispplay(uint x0,uint x1,uint x2,uint x3,uint x4,)p=0xC000;*p=0xFE;p1=0xE000;*p1=tablex1;delay(5);*p=(*p)<<1;*p1=tablex2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论