实习报告基于液晶显示的单片机温度控制设计.docx
《实习报告基于液晶显示的单片机温度控制设计.docx》由会员分享,可在线阅读,更多相关《实习报告基于液晶显示的单片机温度控制设计.docx(15页珍藏版)》请在冰点文库上搜索。
实习报告基于液晶显示的单片机温度控制设计
《基于液晶显示的单片机温度控制设计》
实习报告
专业班级:
电子信息科学与技术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
元器件清单
序号
名称
规格
数量
1
单片机
AT89C52
1个
2
晶振
12Mhz
1个
3
LCD显示器
1602
1片
4
温度传感器
DS18B20
1只
5
发光二极管
红色
1只
6
发光二极管
绿色
1只
7
电解电容
10μF
1只
8
电位器
10K
1个
9
瓷片电容
20pF
2片
10
色环电阻
510
1只
11
色环电阻
4.7K
1只
12
按钮开关
1只
13
按键
1只
14
通用焊接板
1块
15
插针插座
若干
1
杜邦线
若干
附录三:
源程序代码
#include//52单片机头文件,一般不要改动,里面包含特殊功能寄存器的定义
#defineucharunsignedchar
#defineuintunsignedint
sbitlcdrs=P2^2;//数据命令选择控制
sbitlcdrw=P2^1;//读/写选择控制
sbitlcden=P2^0;//使能信号
sbitDQ=P1^2;
sbitk1=P1^0;
sbitbeep=P1^7;
uchart1[2];
ucharcodet0[]="+-";
ucharreaddata0;
ucharreaddata1;
uchardat,i,r,p;
/**************************LCD子函数*************************/
/*********延时函数********/
voiddelay(ucharz)
{
ucharx,y;
for(x=1000;x>1;x--)
for(y=z;y>1;y--);
}
/*****写命令函数****/
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/*****写数据函数*****/
voidwrite_date(uchardate)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
/*****初始化液晶程序******/
voidinit_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);
write_com(0x01);
write_com(0x0c);
write_com(0x06);//设置光标状态默认0x06,为读一个字符光标加1
}
/*****在屏幕右侧显示出数据*****/
voiddisplay()
{
write_com(0x8c);
write_com(0x80);//设置初始化数据指针位置,设置在屏幕的未显示区,然后移动到屏幕的正方
t1[0]=i+0x30;
t1[1]=p+0x30;
write_date(t0[0]);
write_date(t1[0]);
write_date(t1[1]);
delay(5);
}
/**************************DS18B20子函数*************************/
voiddelay1(unsignedinttime)//延迟函数
{
while(time--);
}
/**************复位函数********/
voidDS20(void)
{
bitx=1;
DQ=1;//DQ复位
delay1(8);
DQ=0;//单片机将DQ拉低
delay1(90);//精确延时大于480us
DQ=1;//拉高总线
delay1(8);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay1(100);
}
/***********读函数**************/
unsignedcharReadOneChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay1(4);
}
return(dat);
}
/*************写函数****************/
voidWriteOneChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay1
(2);
DQ=1;
dat>>=1;
}
}
voidmain()
{
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;
}
}
}
}
}
}