基于液晶显示的单片机温度控制设计概要文档格式.docx
《基于液晶显示的单片机温度控制设计概要文档格式.docx》由会员分享,可在线阅读,更多相关《基于液晶显示的单片机温度控制设计概要文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![基于液晶显示的单片机温度控制设计概要文档格式.docx](https://file1.bdocx.com/fileroot1/2022-9/30/e0366dab-2b9e-42ec-80f5-dd56c270529d/e0366dab-2b9e-42ec-80f5-dd56c270529d1.gif)
时钟振荡电路如图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
3
LCD显示器
1602
1片
4
温度传感器
DS18B20
1只
5
发光二极管
红色
6
绿色
7
电解电容
10μF
8
电位器
10K
9
瓷片电容
20pF
2片
10
色环电阻
510
11
4.7K
1只
12
按钮开关
13
按键
14
通用焊接板
1块
15
插针插座
若干
杜邦线
附录三:
源程序代码
#include<
reg52.h>
//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>
y--);
}
/*****写命令函数****/
voidwrite_com(ucharcom)
lcdrs=0;
P0=com;
delay(5);
lcden=1;
lcden=0;
/*****写数据函数*****/
voidwrite_date(uchardate)
lcdrs=1;
P0=date;
/*****初始化液晶程序******/
voidinit_lcd()
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]);
/**************************DS18B20子函数*************************/
voiddelay1(unsignedinttime)//延迟函数
while(time--);
/**************复位函数********/
voidDS20(void)
bitx=1;
DQ=1;
//DQ复位
delay1(8);
DQ=0;
//单片机将DQ拉低
delay1(90);
//精确延时大于480us
//拉高总线
x=DQ;
//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay1(100);
/***********读函数**************/
unsignedcharReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
//给脉冲信号
dat>
>
=1;
if(DQ)
dat|=0x80;
delay1(4);
return(dat);
/*************写函数****************/
voidWriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=8;
i>
i--)
DQ=dat&
0x01;
delay1
(2);
voidmain()
init_lcd();
//LCD初始化
while
(1)
{
if(k1==0)
delay1(5);
if(k1==0)
{
delay1(40);
DS20();
//复位
WriteOneChar(0xcc);
//跳过ROM命令
WriteOneChar(0x44);
//温度转换命令
WriteOneChar(0xbe);
//读DS1820温度暂存器命令
readdata0=ReadOneChar();
//读取温度值低位
readdata1=ReadOneChar();
//