欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    太原理工造纸原料蒸煮过程.docx

    • 资源ID:908723       资源大小:215.57KB        全文页数:29页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    太原理工造纸原料蒸煮过程.docx

    造纸原料蒸煮过程压力微机控制系统微型计算机控制技术课程设计学院:信息工程学院班级:自动化0501班学号:05001154姓名:尚伟指导教师:贾敏智目录一、工艺要求3二、系统的组成和工作原理4三、硬件电路51、压力变送及A/D转换电路52、D/A转换及隔离输出电路63、显示电路84 .上下限报警也路95 .控制系统的总电路图10四、数字控制器的设计11五、软件设计121、内存地址分配122、主程序流程图123、定时中断处理程序流程图144、AD转换自检程序流程图155 .DA转换自检程序流程图166 .RAM自检程序流程图167 .按键处理程序流程图188 .数字控制器流程图19六、程序清单201 .主程序202 .AD转换程序253 .标度变换程序274 .滤波程序275 .RAM自检程序296 .数字控制器程序307 .显示及按键处理程序318 .DA转换程序40七、系统调试41八、设计总结42九、参考文献42一、工艺要求造纸原料蒸煮过程压力微机控制系统蒸煮过程是制浆造纸生产中的关键工序之一,对于整个造纸生产过程中纸浆得率和纸的质量有很大影响,它要求根据原料的特点、纸浆的质量和生产设备的实际情况制定出合理的蒸煮工艺,确定装球量、用碱量、蒸煮温度和压力。造纸厂蒸煮车间有五个蒸球,依靠调节其进气量以到达控制蒸球工作压力和温度,调节喷料阀控制装料量。用微机控制技术实现该过程的自动控制,要求蒸球的实际工作压力准确跟踪给定压力曲线。P个P1:低压保昼值P2:高压保压值.Tl:相转时间,T2:升低压时间,T3:低压保PlJl<II持时间,T4:升高压时间,T5:高压保持时间装料控制系统示意图二、系统的组成和工作原理本压力控制系统的原理框图如下列图所示它采用Atmel公司的AT89S51单片机作为控制核心,AT89S5I是低功耗的8位CMoS单片机,具有8K字节在线可编程FlaSh存储器,内部有带看门狗。通过其ISP接口线可以方便地在线调试程序。A/D转换器采用具有8通道输入的ADC0809oDBY-I31型压力变送器将0-1.28MPa的压力信号转换为O-IOmA的电流输出,通过500Q也阻转化为0-5V的电压信号供应A/D转换器采样。单片机定时预定值为5s,用户可根据实际在调试时进行修改依次对5个蒸球的压力进行采样。采样值经过内部程序数字滤波后与给定值进行比拟给定值通过程序计算按照用户给定的压力曲线变化,得到的偏差信号经PlD算法程序后输出8位的阀门控制数字量。该数字量经D/A转换器AD558转换成O-IOV的电压信号,0-1OV的电压信号再经隔离放大器ICISO1002与工业现场隔离,输出4-20mA的标准电流信号控制蒸汽调节阀的开度。当蒸球的压力大于给定值时,偏差信号E=R-C小于零,经PlD运算后输出量减小,蒸汽调节阀的开度随之减小,从而使蒸球内的压力降低,重新回到平衡状态。通过对PlD参数的整定可以使蒸球的实际工作压力准确跟踪给定压力曲线。三、硬件电路1、压力变送及A/D转换电路电路如下图:压力变送器为DBY/31型,其量程可调范围为0lMPa至03Mpa°本系统中调整为01.28Mpa°ADCO809的每个输入通道前对地接有一500。的电阻,用于将压力变送器送来的010mA电流信号转换为05V的电压信号,ADC0809八个输入通道的地址为FEOOHFE07H0单片机执行写总线指令后启动A/D转换,通过查询EOC的状态判断转换是否结束。执行读总线指令后将转换后的数据读入单片机内部。被测压力与输出量关系:压力(MpaJ输出数字量DBY-131压力变送00.6351.275000000001000000011111111器性能指标:输出电流010mADC振幅0.1mm(双向)灵敏限0.1%供电电源220V50HZ负载电阻01.5kC消耗功率6W来回变差不大于根本误差的绝对值结构形式现场安装式工作条件环境温度:-10C55C仪表重量约15Kg相对湿度85%仪表管结头螺纹M20×1.5M18×l.5工作振动频率25HzADC0809技术指标供电电源单一+5V模拟量输入范围0-5V分辨率8位最大不可调误差<±ILSB功耗15mW转换速度取决于芯片的时钟频率2、D/A转换及隔离输出电路D/A转换器采用8位电压输出型D/A转换器DACO832DACO832数/模转换器的内部,具有两极输入数据缓冲器和一个R-2RT型电阻网络。即包括一个数据存放器、DAC存放器和D/A转换器三大局部。数据存放器和DAC存放器实现两次缓冲,故在揄出的同时,还可以接收一个数据,提高了转换速度。当多芯片工作时,可用同步信号实现各模拟量的同时输出。该器件采用先进的CMOS工艺,功耗低,输出漏电流误差小,主要特性有:输出电流线性度可在满量程下调节;转换时间为1US;数据输入可采用双缓冲、单缓冲或直通方式;增益温度补偿为0.02%FS°C:每次输入数字为8为二进数;功耗为20mW;逻辑电平与TTL兼容;单一电源供电,可在515V内。DACo832可工作在单,双缓冲器方式。单缓冲器方式即输入存放器的信号和DAC存放器的信号同时控制,使一个数据直接写入DAC存放器。这种方式适用于只有一路模拟量揄出或几路模拟量不需要同步输出的系统;双缓冲器方式即输入存放器的信号和DAC存放器的信号分开控制,这种方式适用于几路模拟量需要同步揄出的系统。为了提高转换精度,可增加D/A转换器的位数。隔离放大器采用ISOlOo2,1So系列隔离放大器在同一芯片上提供了电源及信号的隔离,该混合集成芯片在同一芯片上集成了一个磁电耦合DC/DC变换电源及一个电流/也压输出的光也耦合隔离放大器。该芯片除为内部放大也路供电外,还可向外部输出一路隔离电压,供外部电路扩展使用。这一特点可方便地为外部电路基准电源及外部放大电路或其他用户应用电路供也。输入及输出侧宽爬也距离及内部隔离措施使该芯片可提供30(X)VAC绝缘电压。ISO系列产品使用非常方便,几乎无需外部元件,即可实现信号电流源长线传输如图。3 .显示电路LED显示器LED显示块是由发光二极管显示字段的显示器件,常使用七段LED。这种显示块有共阴极与共阳极两种接法。N位LED显示器有N根位选线和8XN根段选线。根据显示方式不同,位选线与段选线的连接方法不同。段选线控制字符选择,位选线控制显示器的亮暗。LED显示方式有静态显示方式因其占用I/O资源较多,故在位数较多时不采用和动态显示方式,如八位LED动态显示电路只需要两个8位I/O口。其中一个控制段选码,另一个控制位选码。由于所有位的段选码皆由一个1/0控制,因此,在每个瞬间,八位LED只可能显示相同的字符,必须采用扫描显示方式。即在每一瞬间只使某一位显示相应字符。在此瞬间,段选控制I/O口输出相应字符段选码,位选控制I/O口在该显示位送入选通电平以保证该位显示相应字符。如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。段选、位选码每送一次后延时l5ms0本控制系统的采用8255A进行DO犷展,而后接LED数码管电路加以显示,各数妈管含义及电路如下图:4 .上下限报警电路本控制系统的采用8255A进行DO扩展,报警输入信号由PA口输入,由PB输出以提示报警及正常工作状态,电路如下图:5 .控制系统的总电路图四、数字控制器的设计本设计采用最小拍随动系统数字控制器因为GO(S) =1.25l + 25s所以G(Z)=Z三:悬=QZ)(厚-匚/)T=。,1 OS)=(l-Z-1)(- I-Z1-0.98Z175所以G(Z)=(IZ-)(匚亨0.25(1-0.92Z,)r.11.=:IAI-IJl-0.98Zl由式1-1知,该数字控制器为最少拍无波纹随动系统控制。假设输入为单位阶跃,取(Z)=Z7,所以G,(z)=l-(z)=1-Z”又取采样周期T=0.5s,得。(Z) =Ge(z)G(z)4Zl(l-0.98Z-l)(l-Z,)(l-0.92Z,)二 U(Z)E(z)式 1-2从而有(4Z-,-3.92Z-2)E(z)=(1-1.92Z,-0.92Z2)t(z)由差分方程得控制器输出为:U(k)=4E(k-1)-3.92E(k-2)+1.92U(k-1)+0.92U(k-2)式1-3最少拍随动系统的误差为:E(k)=R(k)-C(k)其中E(Q分为:1)碱液设定值R(Q与实际输出碱液C/)之差2)水设定值R(k)与实际输出水C(Z)之差因为%L=1.5QK所以E(Z)水=R(Q水C(Z)水C(Z)为第k次采样时实际输出碱液或实际输出水五:软件设计主程序1 .内存地址分配2 .主程序流程图开始3 .定时中断处理程序流程图定时器中断处理程序4 .AD转换自检右汗(17.AXD转换自检程序流程图5.6.DA轮RAM自检程序RAM自检科入口按键处理程序VRE亚(彳星序+设检查标志单元,设检查字AAH取标准码一A8.数字控制3ffMVA输、开始1.主程序初始化启动按钮按下?等指Z计算偏差E#incTuocD/A指示Q转W结果:、八、LW按键处理程序流程图设计数:设地址指针F-一11数字控制器流程图入口E(k)=R(k)-C(k)假序等待启动按钮信号灯点亮n产相等?等待启动信号MI75ieIIIfkWEfk-1V3.92E(k-2W1.921Kk-IHOO?.!Jfk-21动控制,且系统故障返回1#define PORT_4A8255#define PORT_4B8255#define PORT_4C8255#define PORT_4COM8255 端#define PORT_OA8255#define PORT_OB8255#define PORT_OC8255#define PORT_OCOM8255 端#define ADC0809IN_0#define ADC0809IN_l#define ADC0809IN_2#define CHANNELS 3/DAC转换地址输出通道1输出通道2/碱液控制手动操作地址水控制手动操作地址定义水设定值地址定义碱液设定值地址定义上限报警设定值地址定义下限报警设定值地址XBYTE0X2000XBYTE0X3001XBYTE0X3002XBYTE0x5000XBYTE0x6000DBYTE0X60DBYTE0X61DBYTE0X62DBYTE0X63#defineuncharunsignedchar#defineunintunsignediniXBYTE0X4000XBYTE0X4001XBYTE0X4002定义4 口 8255的地址XBYTE0X4003XBYTEOXOOOOXBYTEOXOOO1XBYTE0X0002XBYTEOXOOO3定义O口8255的地址XBYTEOxlOOOXBYTEOxlOOlXBYTE0xl002/3个通道,INO接液位检测,INTI接水流量变送器信号,IN2接碱液流量变送器信号#defineDAC0832BUFF#defineCD40511N.l#defineCD4051IN_2#definePl#defineP2#defineSetwater#defineSetJye#defineSet_up_alarm#defineSet_down_alarm#defineRealwaterDBYTE0x64定义水实际输出值地址#defineRealJyeDBYTEOx65定义碱液实际输出值设定值地址#define HighDBYTE0X66定义液位高度值地址#define Water_SampleDBYTE0x67定义水采样值起始地址,采样6个值,67H6CH为存放采样值地址,#define Lye_SampleDBYTE0x6D定义碱液采样值起始地址,采样6个值,6DH72H为存放采样值地址#define HigkSampleDBYTE0x73定义液位采样值起始地址,采样6个值,73H78H为存放采样值地址uncharcodetable=Ox3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,Ox7F,0x6F;/共阴极LED显示数字09unintT_count=0;定义一个定时器定时0.5s计数单元uncharSam_count=0;定义一个采样数的单元unchardata*Water_sam,*Lye_sam,*HIGH_sam;定义分别指向水、碱液、液位采样值的指针floatWater_control,Lye_control;定义水和碱液控制器输出单元bitADCheck(void);bit DACheck(void);定义A/D和D/A自检程序voidsetjnit(void)设定值初值子程序unchar *add_set定义设定值指针addr_set=&Set_water;指向水设定值地址*add_set=40;水设定初值为40addr_set+ ;指向碱液设定值地址*add_set=60;/碱液设定初值为60addr_set+;指向上限报警设定值地址*add_set=90;addr_set+;*add_set=10;上限报警设定初值为90指向下限报警设定值地址下限报警设定初值为90uncharalarm(uncharheight)/越限报警子程序(if(height>Set_up_alarm)如果液位高于上限报警值,那么报警并显示,返回1(PORT_4B8255=0x84;上限报警灯亮,电笛响return1;)elseif(height>Set_down_alarm)如果液位低于下限报警值,那么报警并显示,返回1(PoRT_4B8255=0x82;下限报警灯亮,电笛响return1;)else液位高度正常,那么正常工作指示灯亮,返回0PORT_4B8255=0x88;return0;main()bitADCheck(void);bitDACheck(void);bitROMCheck(void);uncharmulti_filter(void);voidDAC0832(uncharx,unchary);voidkey(void);floatDignal_ContolIer(uncharRk,uncharCk);函数声明初始化8255定时器等TMOD=0x02;初始化定时器0,自动重装入初值工作方式2TH0=0x38;初值为56,单片机主频为12MHz。定时0.5s需要2500个200usTL0=0x38;PTO=I;置定时器O高优先级ETO=I;允许定时器O中断ITO=I;Fro=I:置外部中断0为边沿触发方式EXO=I;开放外部中断0=/m=i:置外部中断1为边沿触发方式EXl=I;开放外部中断1,且EA=1(允许单片机响应中断)EA=I;/EA=I,允许单片机响应中断PORT_0Ce)M8255=0x8000;初始化0口8255,其A口,B口C口均作为输出接数码管显示PORT_4COM8255=0x90;/4口8255初始化,其A口作输入,其B口作输出(接键盘和指示灯SetJnit();对水、碱液、上限报警、下限报警各值初始化Water_sam=Water_Sample;Lye_sam=Lye_Sample;HIGH_sam=High_Sample ; if(ROMCheck) (Pl = I;P2=l;PORT_4B8255;EA=O;while(l);)set_init();设定默认值while(l) if(ADCcheckDACheck) (Pl=I;P2=l;PORT_4B8255;EA=O;while(l);分别指向各自采样值地址开机检测ROM是否正常工作如果有故障那么转到手动操作系统故障显示灯亮且电笛响不允许中断死循环等待处理死循环调用A/D和D/A自检程序如果有故障那么转到手动操作系统故障显示灯亮且电笛响不允许中断死循环等待处理key();调用键盘程序display();调用数码管显示程序TRO=I;启动定时器ADCO809IN_0=l;启动A/D转换2.AD转换程序#include<absacc.h>#include<reg5l.h>#defineuncharunsignedcharXBYTEOxlOOOXBYTEOxlOOlXBYTE0xl002#defineADC0809IN_0#defineADCO8O9IN_1#defineADC0809IN_2#defineCHANNELS33个通道,INO接液位检测,INTl接水流量变送器信号,IN2接碱液流量变送器信号bitbdataflag;设置标志位voidADC0809(unchardata*a,unchardata*b,unchardata*c)unchari;uncharxdata*addr;addr=&ADC0809IN_0;指针指向ADC0809通道O地址IT1=1;IT1=1:置外部中断1为边沿触发方式EXl=I;开放外部中断1EA=I;EA=I,允许单片机响应中断for(i=0;i<CHANNELSii+)flag=O;设置标志*addr=O;启动转换while(!flag);if(i=0)* a=*addr;转换出来的值给通道0elseif(i=l)* b=*addr;转换出来的值给通道1else* c=*addr;转换出来的值给通道2addr÷+;)service_int1()interrupt2using1/INTl中断效劳程序,使用第一组存放器flag=l;转换结束标志)3 .标度变换程序#include<reg5l.h>#include<absacc.h>#defineuncharunsignedchar#defineunintunsignedintunchardataConversion(uncharx)标度转换子程序(return100*x255;/Ax=100*Nx255)4 .滤波程序#include<reg5l.h>#include<absacc.h>#defineuncharunsignedchar#defineunintunsignedintuncharmulti_filter(uncharGET_COUNT,unchardata*BUFF)/采用复合数字滤波法,GET_COUNT为采样值个数/*BUFF为指向采样值存储地址的指针unchardata*addr;/定义一个地址inti,j;unchardatabuffer;unsignedintSUM=O;累加值BUFF=0x67;/"旨针才旨向67Haddr=BUFF;for(j=0;j<GET_COUNT-1;j+)采用冒泡法排序,来去除最大值和最小值for(i=0;i<GET_COUNT-j-1;i+)(if(*(addr+i)>*(addr+i+1)(buffer=*(addr+i);*(addr+i)=*(addr+i+1);*(addr+i÷l)=buffer;)for(i=0;i<GET_COUNT-2;i+)累加去除最大值和最小值后的值SUM+=*(addr+i+1);retum(SUM(GET.COUNT-2);返回采用复合数字滤波法滤波后的值5 .RAM自检程序#include<reg5l.h>#include<absacc.h>#defineuncharunsignedchar#defineunintunsignedchar#definexRAMDBYTEOxOO检查内部128B的RAM#defineR_count0x7F设计数初值bitROMCheck(Void)(unchardata*x;设RAM地址指针uncharbdataFLAG;设检查标识单元uncharbdataCHECK;设检查字单元uninti,j,k,r;uncharbdatatemp;FLAG=O;i=k=r=O;变量初始化CHECK=OxAA;设检查字AAHwhile(FLAG!=2)检查标志二02?是,那么结束(for(i=R_count;i>0;i)(*(x÷j)=CHECK;检查字写入内存单元if(temp=*(x+j)!=OxAA)写入内容=检查字?return1;否,那么返回1j+;修改地址)FLAG+;检查标志加1CHECK=0x55;修改检查字55H)j=0;设地址指针,从头再检查returnO;6 .数字控制器程序staticfloatdataE_l;设置E(K-I)staticfloatdataE_2;设置E(K-2)staticfloatdataU;设置U(K-I)staticfloatdataU_2;设置U(K-2)floatDignaLContoller(floatRk,floatCk)/Rk为给定值,Ck为测量值(floatdataU_0;设置U(K)floatdataE_0;设置E(k)E_0=Rk-Ck;计算偏差E(k)U_0=4*E_l-3.92*E.2÷1.92*U_1+0.92*U.2;最少拍无波纹控制算式E_2=E_1;E_l=E_0;/E(k)赋值给E(K-I),E(kl)赋值给E(K-2)U_2=U_1;U_l=U_0;/U(k)赋值给U(K-I),U(k-1)赋值给U(K-2)return(U_0);)7 .显示与按键处理程序#include<reg51.h>#include<absacc.h>XBYTE0X4000XBYTE0X4001XBYTE0X4002#definePORT_4A8255#definePORT_4B8255#definePORT_4C8255#define PORT_4COM8255XBYTE0X4003定义4口8255的地址端#define PORT_OA8255XBYTEOXOOOO#define PORT_OB8255XBYTE0X0001#define PORT_OC8255XBYTE0X0002#define PORT_OCOM8255XBYTE0X0003 定义。口 8255 的地址端#defineuncharunsignedchar#defineunintunsignedini#define Set_waterDBYTE0X60定义水设定值地址#define SetJyeDBYTE0X61定义碱液设定值地址#define Set_up_alarmDBYTE0X62定义上限报警设定值地址#define Set_down_alarmDBYTEOX63定义下限报警设定值地址#define Real waterDBYTE0x64定义水实际榆出值地址#define RealJyeDBYTEOx65定义碱液实际输出值设定值地#define HighDBYTE0X66定义液位高度值地址#defineuncharunsignedchar#defineunintunsignediniuncharK_Start=O,K_Stop=0,K_Water=O,K_Lye=0,K_Up_A1arm=0,K_Down_Alarm=0,KJNC=O,K.DEC=0;uncharcodetable=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;共阴极LED显示数字09unsignedSelect;定义一个位选端unchardata*addr_pointer;定义一个指向DATA区空间的指针delaylms()/延迟Imsunchari;for(i=0;i<173;i+);voiddisplay(void)unchari;Select=0x80;首先选择最高位addr_pointer=&Set_water;给指针赋值,指向DATA区地址60H处,即水设定值存储地址PORT_0CQM8255=0x8000;初始化0口8255,其A口,B口,C口均作为榆出PORT_4COM8255=Ox90;/4口8255初始化,其A口作输入,其B,C作输出for(i=0;i<8;i+)(PORT_0A8255=table(*(addJPOinter+i)10;高位显示PORTJ)B8255=SeIeCt;输出位选码至PB口delaylms();延时Imsi+;准备显示低位Select=Select»1;PORT_0A8255=table(*(addJPOimer+i)%10;低位显示PORT_OB8255=Select;输出位选码到PB口delaylms();/延时Ims)Select=OxSO;for(i=0;i<6;i+)PORT_0C8255=table(*(addr_pointer+i)/10;高位显示PORT_OB8255=Select;输出位选码到PB口delaylms();/延时Imsi+;准备显示低位Select=Select»1;PoRT_0C8255=tabIe(*(addJPOinter+i)%10;低位显示PORT_OB8255=Select;输出位选码至UPB口delaylms();/延时Ims)voiddis2_modify(unchartemp,unchar*add)修改数码管子程序/temp为欲修改显示某个数码管值的位选端,add为指向修改数码管的地址unchari,slct;高位停止显示输出位选码到PB 口循环来延迟一段足以让人延时Ims/选择下一位低位停止显示输出位选码至U PB 口slct=temp;PORT_OA8255=0x00;PORT_OB8255=temp;for(i=0;i<100;i+)看出数码管闪烁的效果delaylms();slct=slct>>l;PORT_OA8255=0x00;PORT_OB8255=slct;循环来延迟一段足以让人看出数码for(i=0;i<100;i+)管闪烁的效果delay lms();slct=temp;PORT_0A8255=table(*add)10;PORT_OB8255=slct;for(i=0;i<100;i+)看出数码管闪烁的效果delay lms();slct=slct>>l;延时Ims高位显示输出位选码到PB 口循环来延迟一段足以让人延时Ims选择下一位PORT_OA8255=table(*add)%l;低位显示PORT_OB8255=slct;for(i=0;i<100;i+) 管闪烁的效果delay lms();榆出位选码到PB口循环来延迟一段足以让人看出数码延时ImsvoidINC_OR_DEC(unchartemp,unchar*add)加1或减1子程序/temp为欲修改显示某个数码管值的位选端,add为指向修改数码管的地址display();数码管扫描显示dis2_modify(temp,add);闪烁要修改的数码管display();/数码管扫描显示if(KJNC)如果加1键按下,显示加1KJNC=O;加1键每按一次那么加1,故在次将其清零(*add)+;/设定值加1if(K_DEC)如果减1键按下,显示减1(K_DEC=O;减1键每按一次那么加1,故在次将其清零(*add);设定值减1)dis2_modify(temp,add);/N烁显示修改后的数码管display();数码管扫描显示)voidkey(void)(ITO=I;ITO=I:置外部中断0为边沿触发方式PXO=I;置外部中断0高优先级EXO=I;开放外部中断0EA=I;/EA=I,允许单片机响应中断PORT_4CoM8255=0x90;/4口8255初始化,其A口作输入,其B口作输出if(!K_Start)while(!K_Start)(PORT_OB8255=0x20;如果启动按钮没有按下,那么显示等待启动按钮按下灯,并死循环等待按下)PoRT_OB8255=PORT_OB8255&&OxDF;启动按钮按下,那么等待启动信号灯熄灭if(K_Stop)如果停止按钮按下,那么K_Start清零,等待其再次按下启动K_Start=O;while(!K_Start)如果启动按钮没有按下,那么显示停止信号灯,并且数码管显示停止时的各种值(PORTj)B8255=0x10;display();)K_Stop=0;启动按钮按下时,使K_Stop清零PoRT_0B8255=Pe)RT_0B8255&&0xEF;启动按钮按下,那么停止信号灯熄灭)if(K_Water)/当水设定值键按一下,那么相应两个数码管闪烁以表示需要设定,当水设定值键再按一下,那么停止设定SeleCt=OX80;/水设定值的数码管显示位选端addr_pointer=&Set_water;给指针赋值,指向DATA区地址60H处,即水设定值存储地址INC_OR_DEC(Select,addr_pointer);)if(K_Lye)当碱液设定值键按一下,那么相应两个数码管闪烁以表示需要设定,当碱液设定值键再按一下,那么停止设定Select=0x20;碱液设定值的数码管显示位选端addr_pointer=&Setye;给指针赋值,指向DATA区地址60H处,即碱液设定值存储地址INC_OR_DEC(Seleet,addjpointer);/调用加1或减1子程序)if(K_Up_AIarm)当上限报警设定值键按一下,那么相应两个数码管闪烁以表示需要设定当上限报警设定值键再按一下,那么停止设定Select=0x08;/上限报警设定值的数码管显示位选端addr_pointer=&Set_lye;给指针赋值,指向DATA区地址62H处,即上限报警设定值存储地址INC_OR_DEC(SeIeCt,addjpointer);调用加1或减1子程序)if(K_Down_Alarm)当下限报警设定值键按一下,那么相应两个数码管闪烁以表示需要设定当下限报警设定值键再按一下,那么停止设定Select=0x02;下限报警设定值的数码管显示位选端addr_pointer=&Set_lye;给指针赋值,指向DATA区地址63H处,即下限报警设定值存储地址INC_OR_DEC(SeIeCt,addjpointer);/调用加1或减1子程序)ServiceJntOOinterrupt0using1/INTl中断效劳程序,使用第一组存放器uninti;uncharPort_A;Port_A=PORT_4A8255;将4 口 8255A端口的值赋给Port_Afor(i=0;i<20000;i+);/延迟去抖Port_A=-Port_A;将A端口的值取反来判断键是否还按下,也可判断是哪个键按下if(Port_A)如果如果确实有键按下(Switch(PorcA)判断是哪个键按下,且假设多于两个键同时按下,视为无效(caseOxO1:K-Start=1;break;如果是SAO=1,那么K-Start=1,表示启动按钮有效case0x02:K_Stop=1;break;如果是SA1=1,那么K_Stop=1,表示停止按钮有效case0x04:K_Water=-K_Water;break;如果是SA2=1,那么K_Water=l,表示水设定值按钮有效case0x08:K_Lye=-K_Lye;break;如果是SA3=1,那么KjLye=I,表示碱液设定值按钮有效

    注意事项

    本文(太原理工造纸原料蒸煮过程.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开