欢迎来到天天文库
浏览记录
ID:43414686
大小:29.01 KB
页数:7页
时间:2019-10-02
《水温控制系统设计c程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、程序清单以下是水温控制系统的主程序,由于按键扫描和数码显示电路比较简单故没有单独列出来,可以参考语句后面的注释。#includeunsignedchardisplay_code[10]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x67};unsignedchardisplay_buffer[4];bitset=0;bitpid_allow=0;sbiteoc=P3^3;sbitoe=P3^2;sbits
2、t=P3^4;sbitk1=P2^4;sbitk2=P2^5;sbitk3=P2^6;sbitk4=P2^7;sbitlight=P3^6;sbitheal=P3^7;unsignedchari=0;floatt,t_now,tout=100,t_diff=0,t_target=60,temp=0;unsignedintk=5000;intttemp1=0;unsignedcharttemp2=0,ttemp3=1;floatKP=28,KI=2.5;voiddisplay(void); //
3、数码管显示voidadc0809(void); //AD转换voidpid(void); //pid控制量计算voidp_out(void); //输出控制voidmain(){ TMOD=0x11; TL0=(65536-3000)%256; TH0=(65536-3000)/256; TL1=(65536-40000)%256; TH1=(65536-40000)/256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; light=0; heal=1
4、; while(1) { display_buffer[0]=(unsignedchar)t_now/10; //刷新显示 display_buffer[1]=(unsignedchar)t_now%10; display_buffer[2]=(unsignedchar)t_target/10; display_buffer[3]=(unsignedchar)t_target%10; if(set==0) //按键扫描 { if(k1==0) //复
5、位 { while(k--); if(k1==0){t_target=40;} } if(k2==0) //目标温度+1 { while(k--); if(k2==0){if((t_target++)>=90)t_target=90;} } if(k3==0) //目标温度-1 { while(k--); if(k3==0){if((t_target--)<=40)t_target=40;} } if(k4=
6、=0) //开始工作 { while(k--); if(k4==0){pid_allow=1;set=1;light=1;} } } elseif(set==1) { if(k1==0) //停止,复位 { while(k--); if(k1==0){t_target=40;light=0;set=0;heal=1;tout=0;temp=0;tout=100;t_diff=0;} } } }} /**************
7、************************************** 函数:定时器0中断程序 功能:3000uS中断一回,对数码管进行显示*****************************************************/voidtime0()interrupt1using0{ TL0=(65536-3000)%256; TH0=(65536-3000)/256; display();}/**************************************
8、************** 函数:定时器1中断程序 功能:40000uS中断一回,进行AD转换,控制输出量*****************************************************/voidtime1()interrupt3using0{ TL1=(65536-40000)%256; TH1=(65536-40000)/256; adc0809();// if(pid_allow==1) if((pid_allow==1)&&(t_target-t_now<=
此文档下载收益归作者所有