121408213恒温控制模拟Word格式文档下载.docx
《121408213恒温控制模拟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《121408213恒温控制模拟Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
![121408213恒温控制模拟Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/6afd1daf-9c63-46e8-abde-a20ce68a8d9c/6afd1daf-9c63-46e8-abde-a20ce68a8d9c1.gif)
(20分)
课程设计
报告质量
(40分)
表达情况
(10分)
回答问题
工作态度与纪律
独立工作
能力
得分
课程设计成绩评定
班级姓名学号
成绩:
分(折合等级)
指导教师签字年月日
目录
一、设计目的-----------------------------------------------------4
二、设计要求-----------------------------------------------------4
三、总体设计-----------------------------------------------------4
四、各部分电路设计--------------------------------------------4
1、主控单片机---------------------------------------------------------5
2、温度采集-------------------------------------------------------------5
3、蜂鸣器报警----------------------------------------------------------6
4、数码管显示----------------------------------------------------------6
五、源程序代码-------------------------------------------------7
六、设计总结---------------------------------------------------18
1、设计过程中遇到的问题及解决方法-------------------------18
2、设计体会----------------------------------------------------------------18
3、对设计的建议---------------------------------------------------------19
参考文献--------------------------------------------------------19
一、设计目的
基于MCS-51系列单片机,设计一个恒温控制模拟系统,实现对温度的采集,显示,报警一体化。
能够正常的在数码管上显示温度,并且在所规定的超限范围实施报警以便工作人员进行相应的工作。
二、设计要求
1、对一定的范围进行控制,低于此范围则加热,高于此范围则降温。
2、要求给出正常、加温、降温信号。
三、总体设计
如图显示,是基于STC90C51单片机设计的恒温控制模拟系统,由左边温度传感器DS18B20数字传感器采集温度并转换成数字数据存放在内部的存储器,由CPU读数据传送给数码管显示,并且根据温度的上下限而适时的向蜂鸣器传送超限信号使蜂鸣器报警。
四、各部分电路设计
1、主控单片机
如图是STC9051主芯片,其引脚都已经显示。
2、温度采集
本设计采用数字传感器DS18B20,DS18B20是一种可组网的单线数字温度传感器,它采用单线总线结构,集温度测量和A/D转换于一体,直接输出数字量,用一根I/O线就可以传送数据与命令,其温度测量范围为-55oC~+125oC,精度为+/-0.5oC,使用中无需外部器件,可利用数据线或外部电源提供电能,供电电压范围为3.3~5.5V,通过编程实现9~12位分辨率读出温度数据。
使用时,与单将DS18B20的数据DQ片机的一位具有三态功能的双向口连接就可以实现数据传输,为保证在有效的时钟周期内提供足够电流,采用外部电源单独供电,在数据线上加一个6.8KΩ的上拉电阻
3、蜂鸣器报警
此为蜂鸣器报警电路图,由程序设定的P1^2口对J17输入连接由ULN2003输出给蜂鸣器进行报警。
4、数码管显示电路
数码管显示电路,由八个数码管构成显示位,由U15三八译码器构成位选电路,U16锁存器构成段选电路,输入端上面已经显示与CPU的的P1口和P2口连接进行控制。
五、源程序代码
/********************************************************************
*文件名:
基于DS18B20芯片的恒温控制模拟设计
*描述:
该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上显示出来,并且对上下限温度进行报警。
*创建人:
李辉
*日期:
2011年1月6日18点42分
***********************************************************************/
#include<
reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
#definejump_ROM0xCC
#definestart0x44
#defineread_EEROM0xBE
sbitDQ=P2^3;
//DS18B20数据口
sbitbeep=P1^2;
//蜂鸣器
uintwarn_l=5;
//定义温度下限值
uintwarn_h=17;
//定义温度上限值
unsignedcharTMPH,TMPL;
ucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
*名称:
delay()
*功能:
延时,延时时间大概为140US。
*输入:
无
*输出:
voiddelay_1()
{
inti,j;
for(i=0;
i<
=10;
i++)
for(j=0;
j<
=2;
j++)
;
}
延时函数
voiddelay(uintN)
inti;
N;
;
Delay_1ms()
延时子程序,延时时间为1ms*x
x(延时一毫秒的个数)
voidDelay_1ms(uinti)//1ms延时
ucharx,j;
j<
i;
j++)
for(x=0;
x<
=148;
x++);
Reset()
复位DS18B20
ucharReset(void)
uchardeceive_ready;
DQ=0;
delay(29);
DQ=1;
delay(3);
deceive_ready=DQ;
delay(25);
return(deceive_ready);
read_bit()
从DS18B20读一个位值
从DS18B20读出的一个位值
ucharread_bit(void)
uchari;
3;
i++);
return(DQ);
write_bit()
向DS18B20写一位
bitval(要对DS18B20写入的位值)
voidwrite_bit(ucharbitval)
DQ=0;
if(bitval==1)
DQ=1;
delay(5);
read_byte()
从DS18B20读一个字节
从DS18B20读到的值
ucharread_byte(void)
uchari,m,receive_data;
m=1;
receive_data=0;
8;
{
if(read_bit())
{
receive_data=receive_data+(m<
<
i);
}
delay(6);
}
return(receive_data);
write_byte()
向DS18B20写一个字节
val(要对DS18B20写入的命令值)
voidwrite_byte(ucharval)
uchari,temp;
temp=val>
>
i;
temp=temp&
0x01;
write_bit(temp);
delay(5);
/*******************************************************************
warn()
蜂鸣器报警
beep
蜂鸣器
*******************************************************************/
voidwarn(uints)
i=s;
beep=0;
while(i--);
beep=1;
i=s;
/*****************************************************************
deal()
根据温度上下限控制蜂鸣器间隔
temp
*****************************************************************/
voiddeal(uintt)
if(t<
warn_l)
warn(40);
elseif(t>
warn_h)
warn(10);
Main()
主函数
voidmain()
uinttemp;
P2=0x00;
while
(1)
{
Reset();
write_byte(jump_ROM);
write_byte(start);
write_byte(read_EEROM);
TMPL=read_byte();
TMPH=read_byte();
temp=TMPL/16+TMPH*16;
deal(temp);
P0=table[temp/10%10];
P2=6;
Delay_1ms(5);
P0=table[temp%10];
P2=7;
六、设计总结
1、设计过程中遇见的问题及解决的方法
就是蜂鸣器无法报警,或者就是报警不正常,刚开始蜂鸣器怎么也不响,后来经过认真的分析本机的电路图,才知道蜂鸣器那端的锁存器不是和其他的单片机一样,直接和数据总线连的,原来它是一个单独的模块,而没有进行连接,对照以后拿出连接线把它给单片机联系起来了。
报警不正常,刚开始设计好程序以后,编译也成功就是下载到机子上蜂鸣器一直处在报警状态,不管是什么温度,后来,认真审查所编写的上下限程序,发现我的单片机和我所参考的单片机不一样,所以他们用的数据换算也不一样,所参考的程序是上下限实际温度都乘以10,后来把温度该过来以后才显示正常。
2、设计体会
从刚开始学C语言开始,就有很深的体会,C语言编程序很简单,比汇编简单而且程序也不复杂一目了然,经过几天的学习和查找资料逐渐的对C语言和本机的电路图,芯片,有所了解跟别的不一样端口连接也不一样,慢慢的就开始自己思考,探索,搜集资料等等,逐渐的使自己的这方面知识开始充实起来,知道了很多课本没有学到的知识,并且通过实践所得的经验和书本上学的理论是有一定的差距的,实践是才是关键,有很多在书本上的只是编写的程序在实践中不管用,相当于是错误的结果,只有在实践中才能找到属于自己的编写程序风格和应用的能力。
让我更对扩展后的知识痴迷觉得自己很妙小了,学了以后才知道,单片机只是入门学习,后面还有AVR,STM32,ARM等等上位机,才知道世界究竟有多大。
3、对设计的建议
在变成过程中,我一直在思考,那个上下限温度用键盘输入应该更切合实际的应用,更能在生活中广泛应用,还有对一个单片机系统一个温度采集器太浪费了,无法实现单片机强大的功能,就想到是否可以实现多路采集,后来查阅资料知道,可以实现多路采集并且在生活中都在应用多路采集和键盘输入,灵活而方便更能体现单片机的功能的强大和远程控制等等。
参考文献
《51单片机入门及开发》郭天祥著
《单片微型计算机原理及应用》张毅坤等著
《传感器与自动检测技术》余成波著
《STC90C516RD+原理图及相关应用》本板子所带