恒温箱温度计算机控制系统设计报告(编辑修改稿)内容摘要:

图 10 中断服务程序流程图 五、系统调试与仿真 硬件调试时,可先检查印制板及焊接的质量是否符合要求,有无虚焊点及线路间有无短路、断路。 然后用万用表检测,检查无误后,可通电检查 LCD 液晶显示器亮度情况,一般情况下取背光电压为 4~ 即可得到满意的效果,再依次检查各部分结构安装是否牢固。 软件调试是在 proteus 编译器下进行,源程序编译及仿真调试应分段或以子程序为单位逐个进行,最后结合硬件实时调试。 子程序调试包括: 1).LCD1602 显示程序; 2).延时函数子程序; 3).DS18B20 读出温度子程序、温度转换命令子程序、计算温 度子程序、显示数据刷新子程序。 六、设计心得 这次课程设计是对过去所学的知识的一次回顾与巩固,也是一次特别的实践能力。 通过该次课程设计,不但培养了我们实践动手的能力,而且也学到了很多东西。 因为以前学习的知识,都是基于理论,就算是实验课,器材也是学校已经弄好了,我们做实验基本就是连接线路,也根本了解的不深入。 但是,这次的课程设计,不但要我们自己买器材,更要我们设计电路、画出电路图、画出 PCB、最终焊接成一块板子,然后调试板子,板子调试差不多了就要开始设计程序了。 恒温箱顾名思义就是要让温度基本恒定在一个我们期望 的值,所以在设计程序时,就要想一个算法来控制单片机,使之能够恒定温度。 当然对于这种控制,最好的算法莫过于 PID 算法,因为此法简单而有效,工业上也有很多的应用,如果需要更精确的控制,可以在 PID 的基础增加一些算法,比如模糊控制、鲁棒控制等。 看到完成的课程设计时,我知道还有一些不足,很多地方需要更进一步的改进,但是我仍然很高兴,因为我尽心尽力的将它全部都完成了,我尽到自己最大的努力。 虽然还是有很多不懂之处,但是在同学的帮助下也弄懂了不少。 参考文献 ( 1) 郭天祥,新概念 51 单片机 c语言教程,电子工业出 版社, 2020 ( 2) 陈跃东, DS18B20 集成温度传感器原理与应用 [J],安徽教育出版社, 2020,523 ( 3) 李广弟,《单片机基础》 [M],北京航空航天大学出版社, 1994, 156 ( 4) 谭浩强, C程序设计(第二版) [M],清华大学出版社 ,2020 ( 5) 付家才,单片机控制工程实践技术 [M],化学工业出版社 ,2020 附录一 源程序代码 include //=============================================// //============液晶初始化及显示模块 =============// //=============================================// sbit RS=P2^5。 //数据 /命令选择端 sbit RW=P2^6。 //读 /写选择端 sbit E=P2^7。 //使能端 uchar table[10]={39。 039。 ,39。 139。 ,39。 239。 ,39。 339。 ,39。 439。 ,39。 539。 ,39。 639。 ,39。 739。 ,39。 839。 ,39。 939。 }。 //delay延时函数 void delay1602(int z) { int i,j。 for(j=z。 j=0。 j) for(i=11。 i=0。 i)。 } uchar gfReverse_Bits(uchar Data) { Data=(Data4)|(Data4)。 Data=((Data2)amp。 0xcc)|((Data2)amp。 0x33)。 Data=((Data1)amp。 0xaa)|((Data1)amp。 0x55)。 return Data。 } //写 为命令 void write_(uchar ) { =gfReverse_Bits()。 E=0。 RS=0。 RW=0。 P0=。 E=1。 delay1602(20)。 E=0。 RS=1。 } //写 dat为数据 void write_dat ( uchar dat ) { dat=gfReverse_Bits(dat)。 E=0。 RS=1。 RW=0。 P0=dat。 E=1。 delay1602(20)。 E=0。 RS=0。 } //初始化液晶屏 void init_1602() { write_(0x38)。 delay1602(50)。 write_(0x38)。 write_(0x0c)。 write_(0x06)。 write_(0x01)。 write_(0x80)。 } //液晶显示函数 //address为显示地址: //0x80第一行, 0x80+0x40第二行 //mean[]为意义字符串 //value为显示值 //unit[]单位字符串 void dispaly(uchar address,uchar mean[],float value,uchar unit[]) { uchar *pt。 int Val。 write_(address)。 for(pt=mean。 *pt!=39。 \039。 pt++) { write_dat(*pt)。 } Val = (int)(value*10)。 write_dat(table[Val/100])。 write_dat(table[Val%100/10])。 write_dat(39。 .39。 )。 write_dat(table[Val%10])。 for(pt=unit。 *pt!=39。 \039。 pt++) { write_dat(*pt)。 } } void bdispaly(uchar ad,uchar sta[]) { uchar *pp。 write_(ad)。 for(pp=sta。 *pp!=39。 \039。 pp++) { write_dat(*pp)。 } } include //=============================================// //=============DS18b20模块初始化 ===============// //=============================================// sbit DQ = P2^1。 //delayDs18b20延时函数 void delayDs18b20(uint i)//延时函数 { while(i)。 } //。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。