. ... . 《基于液晶显示的单片机温度控制设计》实习报告专业班级:电子信息科学与技术11级组长:彪组别:一组员:邢路飞王晓东李梁刚蔡云云李德龙宋文杰指导教师:谢艳新王海波学期:2013-2014学年第1学期实习地点:组成原理及单片机实验室《基于液晶显示的单片机温度控制设计》实习报告一、实验目的随着现代科技的不段发展,对温度测量的工具越来越多并且精度也是越来高,但随着生活水平的不段提高,越来越多的人健康的关注倍加重视,特别是对暖空气的变化更加注意,在此我们特设计有关温度控制的系统,通过它可以设置度的上下限,当温度低于所设的温度的下限或是高于所设的温度的上限时就会发生报警,因此可以提醒您要注意温度变化。
本制作轻巧灵便适合在私人家庭中运用,使用时可以通过四个按键的作用来设置系统初值,即可达到准确提醒您的作用。
二、设计题目:基于液晶显示的单片机温度控制设计三、功能描述本次设本系统主要研究的是利用MCS-51系列单片机中的AT89C51单片机来实现温度检测及控制,通过对89C51的P1口的高4位设置上限值、下限值、,因考虑到在设置温度TH和TL,所以本次设计采用四个按键来控制,通过按键之间的协调作用来完成温度设置值,由于温度的不同我们采取不同的信息来作为信号处理,所以在硬件电路中用蜂鸣器来报警做为提醒实现温度从IN0输入89C51的P1口低4位设置报警系统。
ADC0809实现模拟输入到数字量的转换,通过1602数码管显示数据。
四、系统硬件设计4.1时钟振荡电路时钟振荡电路如图1所示。
图1 时钟振荡电路图4.2测温电路测温电路如图2所示。
图2 测温电路图4.3复位电路复位电路如图3所示。
图3 复位电路图4.4 报警电路报警电路如图4所示。
图4 报警电路图4.5显示电路显示电路如图5所示。
图5 显示电路图五、系统软件系统5.1主程序设计主程序流程图如图6所示。
图6 主程序流程图5.2液晶显示程序设计液晶显示程序流程图如图7所示。
图7 液晶显示程序流程图5.3温度采集程序设计温度采集程序流程图如图8所示。
图8 温度采集程序流程图六、程序调试温度计的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便。
硬件调试时,可先检查印制板及焊接的质量是否符合要求,有无虚焊点及线路间有无短路、断路。
然后用万用表测试或通电检测,检查无误后,可通电检查LCD液晶显示器亮度情况,一般情况下取背光电压为4~5.5V即可得到满意的效果。
测温程序设计中,向DS18B20发温度命令转换后,程序要等待DS18B20的返回信号,一旦线路不好或断线,将陷入死循环。
LCD程序也较为复杂,在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了问题。
我们可以实用Proteus软件进行整体电路的仿真。
Proteus可提供的调试手段Proteus 提供了比较丰富的测试信号用于电路的测试。
在绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力。
同时在软件的编程方面得到更到的提高,对编程能力得到加强。
同时对所学的知识得到很大的提高与巩固,对自己的动手能力有了极大的帮助。
七、心得体会在本次实习中,我通过查阅资料,请教于老师及同学。
基本完成了硬件设计、程序设计、安装调试等环节。
但其中有很多问题值得我去思考。
1.实习作风不好:不能积极对待,注意力不够集中;2. 实习效率不高:单片机课程功底较差,实践动手能力不强;3. 独立解决问题的能力较差。
以为三点都值得我反思,本次实习揭露了我的不足,希望在以后学生工作中得到改进。
八、实验总结在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,从这次的设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
本次设计中,我遇到了一些难题,然而这些难题让我不断的学习,在困难中进步,在此我要感谢学校给我们提供这次机会,感谢指导教师给我的提供了宝贵的意见以及同学对于我的帮助,我将继续以务实的态度,在接下来的毕业设计中,争取做出更好的成绩。
九、参考文献[1] 杨拴科.模拟电子技术基础.高等教育出版社.2004[2] 阎石.数字电子技术基础(第五版).高等教育出版社2008[3] 谭浩强.C程序设计.清华大学出版社.2006[4] 赵负图.传感器集成电路手册.化学工业出版社.2002[5] 郁有文.传感器原理及工程应用(第三版).西安电子科技大学出版社. 2008[6] 高峰.单片微型计算机与接口技术.科学出版社.2003[7] 余发山.王福忠.单片机原理及应用技术.中国矿业大学出版社.2003[8] 汤竞南.51单片机C语言开发与实例.人民邮电出版社.2008附录1:电路原理图附录2附录三: 源程序代码#include<reg52.h> //52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义#define uchar unsigned char#define uint unsigned intsbit lcdrs=P2^2; //数据命令选择控制sbit lcdrw=P2^1; //读/写选择控制sbit lcden=P2^0; //使能信号sbit DQ=P1^2;sbit k1=P1^0;sbit beep=P1^7;uchar t1[2];uchar code t0[]="+-";uchar readdata0;uchar readdata1;uchar dat,i,r,p;/**************************LCD子函数*************************//*********延时函数********/void delay(uchar z){uchar x,y;for(x=1000;x>1;x--)for(y=z;y>1;y--);}/*****写命令函数****/void write_(uchar ){lcdrs=0;P0=;delay(5);lcden=1;delay(5);lcden=0;}/*****写数据函数*****/void write_date(uchar date){lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}/*****初始化液晶程序******/void init_lcd(){lcden=0;lcdrw=0;write_(0x38);write_(0x01);write_(0x0c);write_(0x06); //设置光标状态默认0x06,为读一个字符光标加1 }/*****在屏幕右侧显示出数据*****/void display(){write_(0x8c);write_(0x80); //设置初始化数据指针位置,设置在屏幕的未显示区,然后移动到屏幕的正方t1[0]= i+0x30;t1[1]= p+0x30;write_date(t0[0]);write_date(t1[0]);write_date(t1[1]);delay(5);}/**************************DS18B20子函数*************************/void delay1(unsigned int time) //延迟函数{while(time--);}/**************复位函数********/void DS20(void){bit x=1;DQ = 1; //DQ复位delay1(8);DQ = 0; //单片机将DQ拉低delay1(90); //精确延时大于480usDQ = 1; //拉高总线delay1(8);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay1(100);}/***********读函数**************/unsigned char ReadOneChar(void){unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat |=0x80;delay1(4);}return(dat);}/*************写函数****************/void WriteOneChar(unsigned char dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay1(2);DQ = 1;dat>>=1;}}void main(){init_lcd(); //LCD初始化while(1){if(k1==0){delay1(5);if(k1==0){while(1){delay1(40);DS20(); //复位WriteOneChar(0xcc); //跳过ROM 命令WriteOneChar(0x44); //温度转换命令delay1(40);DS20(); //复位WriteOneChar(0xcc); //跳过ROM 命令WriteOneChar(0xbe); //读DS1820 温度暂存器命令delay1(40);readdata0=ReadOneChar(); //读取温度值低位readdata1=ReadOneChar(); //读取温度值高位readdata0/=16;readdata1*=16;r=readdata0+readdata1;i=r/10;p=r%10;P1=P1&0xfb; //关掉发光二级管display();if(i>3){beep=0;delay(5);beep=1;break;}}}}}}。