}
}
}
}
P1=a;//送扫描 if((P1&0xf0)!=0xf0) { }
a=(a<<1)|0x01;
b=P1;//读按键
P1=0xf0;
while((P1&0xf0)!=0xf0); //判断按键松开 swith(b) //读数 { }
case 0xee: key=0;break; case 0xed: key=1;break; case 0xeb: key=2;break; case 0xe7: key=3;break; case 0xde: key=4;break; case 0xdd: key=5;break; case 0xdb:key=6;break; case 0xb7: key=7;break; case 0xbe: key=8;break; case 0xbd: key=9;break;
case 0xbb: key=10;break; //运行键 case 0xb7: key=11;break; default :key=0;break;
void ADC0809() {
int i;
26
}
xdata uint cChannelIndex;
P0=0xFF; //端口初始化 EX0=1; //开中断 EA=1;
cChannelIndex=0;
cCurrentAddr=ADC0809CH0;
SelectChannel(ADC0809CH0,cChannelIndex); while(EOC==0); ce_temp=P0; return ce_temp
void DAC0832(pid_data) //DA转换 { }
void time_t0() interrupt 1 //50ms中断 { }
void main(void)
27
cs=0,wr1=1; P0=ce_temp; uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--); wr1=1,cs=1;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; hao_mao++; if(hao_mao==20) hao_mao=0; ADC0809()
if(ce_temp>350) danger=1; // 警报
{
SCON=0;//串行口方式0 TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;//开总中断 ETO=1; TR0=1; while(1) {
while(key!=10) //判断测定值 { } while(1) { } } }
int PID_control(int error1) {
disp(set_temp); //显示测定值 key_scan(); if(key!=0xff)
set_temp=(set_temp*10+key);
ADC0809();
dis(ce_temp); //显示测量温度 if(ce_temp|=set_temp)
PID_control(set_temp-ce_temp) else
DAC0832(0) ; //不加热
DAC0832(pid_data); //加热
//位置式PID控制算法
float Temp_P,Temp_D,Temp_PID; static float Temp_I;
28
}
static float last_error; if(error1==0) { } else { }
Temp_P=Kp*error1;
Temp_I=Kp*Ki*error1+Temp_I; Temp_D=Kp*Kd*(error1-last_error); last_error=error1;
pid_data=Temp_P+Temp_I+Temp_D; return(pid_data); Temp_I=0; last_error=0; return(0);
29
第八章 设计总结
8.1总结
这次课程设计是我第一次用单片做大作业,刚开始感觉真的真难,都不知怎么下手,但在不断与同学及师兄讨论之后终于渐渐明白的到底要做什么,于是就是不停的查阅论文和书籍。虽然很多都是看不懂,但看多了也就渐渐看下去了,并且有了些眉目,于是就开始正式工作起来。PID参数部分感觉是最简单的,因为事先有先听老师的建议,先学了matlaB和simulink,于是很快就上手了,参数感觉调的还可以。但真真的大块头才来了。首先是protel软件的使用,由于上课时没仔细看师兄这个的讲解,于是课下就得花了很多时间去研究。幸好在图书馆类又找到类似的参考书,花了近一天才把这个给学会。但这个仅仅是开始。尽管大二有学过单片机的课程,但真的要做起东西来还是什么都不懂,所以还是从头才是学,一点一点的啃,看了很多书,查了很多论文,有了些许眉目之后就开始画图,幸好老师要求的结构并不多,所以在完成了基本的结构之后我也加了些自己想画的,如键盘,LED显示器,报警器等。这些入了门还是很快就能学会。
但感觉最难的还是编程,无论是控制程序还是PID程序,都让人一头雾水。因为本学期开头有学了C语言,于是我觉得挑战自己用C语言编程,虽然从来没有用C语言编过单片机的程序,但通过学习一些基本的模块还是勉勉强强能把这个编出来。 现在东西做的差不多了,实话说有小小的成就感,毕竟就花了一个星期的时间能将这么多东西都复习起来并作出一个综合的作品出来,感觉还是很不容易。但遗憾还是有的,一是时间太短,很多东西都没法去细细研究下,如数模及后续的温度控制过程,我现在还是不懂。二是虽然写出程序了,但没有条件也没机会调试,感觉好像有很多问题,但又不知如何下手去修改,匆匆忙忙做出来,实在太粗糙。唯有希望大四或读研阶段做控制时能在此方向再去研究下,争取有更多收获。
8.2参考文献
1、《过程装备控制技术及应用》第二版. 王毅、张早校 主编. 化学工业出版社 2、《单片机原理C51应用技术》耿永刚 主编编.电子工业出版社
30
3、《单片机微型计算机原理与应用》第二版.胡乾斌 李光斌 李玲 喻红编著. 华中科技大学大学出版社
4、《单片机原理与应用及C51程序设计》谢维成 杨加国 主编. 清华大学出版社 5、《MCS-51单片机温度控制系统的设计》(陕西科技大学)张开生 郭国法 维普资
讯
6、《基于MATLAB的控制系统计算机仿真》 翟亮 清华大学出版社 7、《MATLAB与控制系统的数字仿真及CAD》 黄道平 编著.化学工业出版社
8、《单片机温度控制实验系统》储海兵,谭功全,曹 亢,任善荣 (东南大学自动化学院,江苏南京210096) 维普咨询 9、《C程序设计》唐浩强,清华大学出版社
31