基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx

上传人:b****2 文档编号:704942 上传时间:2023-04-29 格式:DOCX 页数:20 大小:81.81KB
下载 相关 举报
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第1页
第1页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第2页
第2页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第3页
第3页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第4页
第4页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第5页
第5页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第6页
第6页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第7页
第7页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第8页
第8页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第9页
第9页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第10页
第10页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第11页
第11页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第12页
第12页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第13页
第13页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第14页
第14页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第15页
第15页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第16页
第16页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第17页
第17页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第18页
第18页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第19页
第19页 / 共20页
基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx

《基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx》由会员分享,可在线阅读,更多相关《基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx(20页珍藏版)》请在冰点文库上搜索。

基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文.docx

基于单片机温度控制系统设计的显示电路设计部分课程设计任务书毕设论文

课程设计任务书

学院

专业

学生姓名

班级学号

课程设计题目

基于单片机温度控制系统设计-----显示电路设计

实践教学要求与任务:

1)构成单片机温度控制系统

2)显示电路设计

3)实验调试

4)THFCS-1现场总线控制系统实验

5)撰写实验报告

 

工作计划与进度安排:

1)第1~2天,查阅文献,构成单片机温度控制系统

2)第3~4天,显示电路设计

3)第5~6天,实验调试

4)第7~9天,THFCS-1现场总线控制系统实验

5)第10天,撰写实验报告

指导教师:

201年月日

专业负责人:

201年月日

学院教学副院长:

201年月日

摘要

本论文着重阐述了温度控制系统的设计方法,以AT89C51单片机作为主控核心,按键、数码管等较少的辅助硬件电路相结合,采用模块设计,利用软件实现对温度进行控制。

本系统具有体积小、硬件少、电路结构简单、软件功能完善,控制系统可靠,性价比较高等优点。

论文主要论述了基于单片机的温度控制系统的设计过程。

主要工作如下:

重点论证了系统方案的选择及其实现方法;全文详细论述了系统的软、硬件电路,其中硬件部分重点介绍了单片机的基本结构和各引脚以及晶振电路、复位电路的工作原理,软件部分重点叙述主程序和子程序的C语言实现;硬件、软件电路调试过程;所有源程序均采用C语言编译,并在KeiluVision2软件里编译、调试;在Proteus环境下实现软、硬件电路仿真。

实验结果证明了设计方案的正确性与可行性,以此为理论基础,对我们设计彩灯电路具有很强的使用和参考价值。

关键词:

温度控制系统;AT89C51单片机;模块设计

目录

1绪论2

2系统概述3

2.1设计思路3

2.2原理分析3

3.系统软件设计4

3.1软件设计主要思路4

3.2显示程序流程图及其源代码4

4.系统调试7

4.1软件调试7

4.2软件仿真结果及分析8

结束语9

附录10

1绪论

在工业自动化高度发达的今天,对一些过程控制要求很高。

传统的度监控一般都采用模拟电路设计。

其缺点是:

转换速率低,实时性差。

抗干扰能力弱,特别是在高频电路中,很容易产生自激。

而采用单片机控制能很好弥补以上缺点。

a)精度高,实时性强,能及时发现问题。

b)采用数字电路,抗干扰能力强。

单片微型计算机简称单片机,又称为微控制器(MCU),它的出现是计算机发展史上的一个重要里程碑,它以体积小、功能全、性价比高等诸多优点而独具特色。

随着社会的发展、科技的进步,各种方便于生活的自动控制系统开始进入了人们的生活,以单片机为核心的控制系统就是其中之一。

本温控系统主要以AT89C51单片机作为主控核心,18B20温度传感器和MAX7219驱动芯片为辅以及按键、数码管等较少的其它辅助硬件电路相结合,采用模块设计,利用软件实现对温度进行控制。

本系统具有体积小、硬件少、电路结构简单、软件功能完善,控制系统可靠,性价比较高等优点。

 

2系统概述

2.1设计思路

运用单片机AT89C2051对可编程数字温度传感器DS18B20进行编程控制,采集实时温度。

通过数码管显示该温度。

并设置相应的默认工作温度,当实际温度小于默认工作温度,启动加热装置。

另外,通过一些按键,可以调节工作温度,以便适合不同的场所需求。

2.2原理分析

控制信号

温度值

 

图2-2-1温度监控器结构

 

如图1所示,首先,由单片机送出温度传感器的初始化控制信号,温度传感器进行复位操作。

接着发出读温度命令,温度传感器开始工作。

并将采集到的温度信号以十六进制代码形式通过AT89C2051引脚送到单片机内部。

经过软件将温度信号送到MAX7219,并在数码管上显示。

同时,将采集的温度与设定默认温度比较,并通过AT89C2051的P1.4端口控制继电器是否工作。

此外,通过外部中断程序调节默认设定温度。

 

3.系统软件设计

3.1软件设计主要思路

本系统主要有四部分组成,即温度采集环节,显示环节,继电器控制环节以及调节环节。

因此程序也主要由以上四部分组成。

程序首先开外中断1,并设置相关参数,其次,测试数码管显示。

然后进入一个死循环,即每个三秒用18B20采集一次温度,然后用MAX7219驱动数码管显示采集温度的温度。

与此同时,每次采集得到的温度都要与已设定温度进行比较,如果温度小于设定温度,那么接通继电器,是加热装置工作,否则不工作。

为了保证调节的灵敏度,故把调节部分放到中断之中。

当程序进入中断,那么就可以通过按键增加或减小设定的默认温度,即继电器工作的零界温度。

由此完成了整个温度控制系统的设计。

 

3.2显示程序流程图及其源代码

3.2.1显示程序流程图

本子程序主要通过MAX7219驱动数码管显示温度的。

首先获取要现实的数据,判断数据是否大于零,如果大于0,则symbol=0;否则symbol=1,并取反且在第一位数码管中显示负号。

然后,所得到的数据进行处理,并得到个位,十位及小数点后一位,将这些数据送入MAX7219中在后三位显示。

如图5:

 

 

YN

 

 

图3-2-1显示程序流程图

3.2.2显示程序部分源代码

 

/*向MAX7219写入一个字节数据*/

voidSendchar(ucharch)

{

uchari,code1;

_nop_();

_nop_();

_nop_();

for(i=0;i<8;i++)

{

code1=ch&0x80;

ch=ch<<1;

if(code1)

{

DIN=1;

CLK=0;

CLK=1;

}

else

{

DIN=0;

CLK=0;

CLK=1;

}

}

}

/*向MAX7219写入一个字(16位)*/

voidSendword(ucharaddr,ucharnumber)

{

LOAD=0;

_nop_();

_nop_();

_nop_();

Sendchar(addr);

_nop_();

_nop_();

_nop_();

Sendchar(number);

_nop_();

_nop_();

_nop_();

LOAD=1;

}

/*MAX7219初始化*/

voidStart()

{

Sendword(Scanbit,Scannum);

Sendword(Decode,Demode);

Sendword(Light,Lightgrade);

Sendword(Lowpower,Norpw);

}

详细程序见附录

4.系统调试

4.1软件调试

4.1.1单片机C语言

   单片机C语言程序设计不同于通用计算机应用程序设计,它必须针对具体的微控制器及外围电路来完成,为了便于学习单片机应用程序设计和系统开发,很多公司退出了单片机实验箱、仿真器和开发板等,这些硬件设备可用于验证单片机程序,开发和调试单片机应用系统。

开发8051单片机系统时,使用C语言会使开发周期大为缩短,开发效率大幅提高,程序可读性好且易于移植,所以使用C语言开发单片机系统已经成为必然趋势[17]。

C语言在单片机系统开发中的优势:

   ⑴用C语言编写的程序可读性强;

   ⑵在不了解单片机指令系统而仅熟悉8051单片机存储结构时就可以开发单片机程序;

   ⑶寄存器分配和不同存储器寻址及数据类型等细节可由编译器管理;

   ⑷程序可分为多个不同的函数,这使程序设计结构化;

   ⑸函数库丰富,数据处理能力强;

   ⑹程序编写及调试时间大大缩短,开发效率远高于汇编语言;

   ⑺C语言具有模块化编程技术,已编写好的通用程序模块很容易植入新程序,这进一步提高了程序开发效率。

   

4.1.2KeiluVision4

   C51单片机支持HEX文件,我采用的编译器是KeiluVision2软件,该软件是美国KeilSoftware公司开发的,关于8051系列MCU的开发工具,是目前世界上最好的51单片机开发工具之一。

软件本身支持数百种51系列单片机芯片,可以用来编译C源码,汇编源程序以及两者的混合编程代码,连接重定位目标文件和库文件,创建HEX文件,调试目标程序等,是一种集成化的文件管理编译环境。

   

   

4.2软件仿真结果及分析

   完成单片机系统仿真电路图设计后,即可开始仿真运行单片机绑定的程序文件,双击单片机,打开单片机属性窗口(也可以先在单片机上单击右键,再单击左键,或者选中单片机后按下(Ctrl+E组合键),在“ProgramFiles”项中选择对应的HEX文件。

   在仿真电路和程序都没有问题时,直接单击Proteus主窗口下的“运行”(Play)按钮,即可仿真运行单片机系统,在运行过程中如果希望观察内存、24C0X、温度寄存器、时钟芯片等内部数据可在运行时单击“单步”(Step)或“暂停”(Pause)按钮,然后再“调试”(Debug)菜单中打开相应设备。

   如果要观察仿真电路中某些位置的电压或波形等,可向电路中添加相应的虚拟仪器,例如,电压表、示波器等。

 

结束语

通过本次的设计,使我了解了51系列单片机的基本工作原理。

以及对其编程的技巧和注意事项等。

对自动控制原理有了一个新的认识,学到许多书本上没有的知识。

特别是实际动手方面的能力。

在此过程中也遇到很多的困难,经过自己的思考,翻阅资料及老师耐心的讲解问题都得到了解决。

并且把这些经历作为宝贵的经验记录了下来。

以便以后查阅。

使我学以至用,把书本与实际联系起来。

为我们今后的发展打下了坚实的基础。

 

附录

1.基于单片机的温控系统完整程序代码

//规定默认设定温度为T0=50度,K0键为开始设置键,K1键为加一度键,K2键为减一度键

#include

//MAX7219端口定义

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDIN=P1^0;

sbitCLK=P1^1;

sbitLOAD=P1^2;

sbitJIDIANQI=P2^7;//继电器接口

sbitK0=P3^2;

sbitK1=P1^5;

sbitK2=P1^6;

sbitK3=P1^7;

sbitDQ=P3^3;//DS18B20定义单片机数据引脚

#defineNoop0x00

#definereg00x01

#definereg10x02

#definereg20x03

#definereg30x04

#defineDecode0x09

#defineLight0x0a

#defineScanbit0x0b

#defineLowpower0x0c

#defineDisplayTest0x0f

#defineLowpw0x00

#defineNorpw0x01

#defineScannum0x03

#defineDemode0xff

#defineLightgrade0x0a

#defineTeststart0x01

#defineTestend0x00

ucharDisBuffer[4]={0,0,0,0};

 

unsignedinttemperature;

ucharsymbol;

unsignedintT_MOREN=0x28;//规定默认设定温度为T0=40度

unsignedintT_time;

unsignedcharkey_s,key_v;

voiddelay(unsignedinti)//延时程序

{while(i--);}

Init_DS18B20(void)//DS18B20复位初始化

{

unsignedcharx=0;

DQ=1;

delay(8);

DQ=0;

delay(80);

DQ=1;

delay(14);

x=DQ;

delay(20);

}

ReadOneChar(void)//读DS18B20的程序

{

unsignedchari=0;

unsignedchardat=0;

for(i=8;i>0;i--)

{

DQ=0;

dat>>=1;

DQ=1;

if(DQ)

dat|=0x80;

delay(4);

}

return(dat);

}

WriteOneChar(unsignedchardat)//写DS18B20的子程序

{

unsignedchari=0;

for(i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

delay(5);

DQ=1;

dat>>=1;

}

}

ReadTemperature(void)//从DS18B20中读出两个字节的温度数据

{

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

Init_DS18B20();

WriteOneChar(0xCC);

WriteOneChar(0x44);

Init_DS18B20();

WriteOneChar(0xCC);

WriteOneChar(0xBE);

a=ReadOneChar();

b=ReadOneChar();

t=b;

t<<=8;//进行精度转换

t=t|a;

if(t<0x0fff)symbol=0;

else

{

t=~t+1;

symbol=1;

}

temperature=t*0.625;

return(temperature);

}

/*向MAX7219写入一个字节数据*/

voidSendchar(ucharch)

{

uchari,code1;

_nop_();

for(i=0;i<8;i++)

{

code1=ch&0x80;

ch=ch<<1;

if(code1)

{

DIN=1;

CLK=0;

CLK=1;

}

else

{

DIN=0;

CLK=0;

CLK=1;

}

}

}

/*向MAX7219写入一个字(16位)*/

voidSendword(ucharaddr,ucharnumber)

{

LOAD=0;

_nop_();

Sendchar(addr);

_nop_();

Sendchar(number);

_nop_();

LOAD=1;

}

/*MAX7219初始化*/

voidStart()

{

Sendword(Scanbit,Scannum);

Sendword(Decode,Demode);

Sendword(Light,Lightgrade);

Sendword(Lowpower,Norpw);

}

//温度显示-----------------------

voidtext_start()//第一次使用数码管测试

{

Start();

Sendword(DisplayTest,Teststart);

delay(3000000);

Sendword(DisplayTest,Testend);

}

temperature_view(uinttemperature_x)

{

DisBuffer[1]=temperature_x/100;

DisBuffer[2]=(temperature_x%100)/10;

DisBuffer[3]=temperature_x%10;

if(symbol==0)DisBuffer[0]=0x0f;

elseDisBuffer[0]=0x0a;

if(DisBuffer[1]==0x00)

{

DisBuffer[0]=0x0f;

if(DisBuffer[1]==0x00)

DisBuffer[1]=0x0f;

}

Sendword(reg0,DisBuffer[0]);

Sendword(reg1,DisBuffer[1]);

Sendword(reg2,DisBuffer[2]);

Sendword(reg3,DisBuffer[3]);

}

voiddelayms(uintms)//延时子程序,单位为ms

{

unsignedchari;

while(ms--)

{

for(i=0;i<120;i++);

}

}

bitscan_key()

{

key_s=0x00;

key_s|=K3;

key_s<<=1;

key_s|=K2;

key_s<<=1;

key_s|=K1;

return(key_s^key_v);

}

//INT0中断服务程序

int0()interrupt0using0

{

temperature_view(T_MOREN);

key_v=0x07;

for(;;)

{

if(scan_key())

{

delayms(10);

if(scan_key())

{

key_v=key_s;

if((key_v&0x01)==0)//K1加一

{

T_MOREN=1+T_MOREN;

temperature_view(T_MOREN);

}

elseif((key_v&0x02)==0)//K2减一

{

T_MOREN=T_MOREN-1;

temperature_view(T_MOREN);

}

elseif((key_v&0x04)==0)//K3退出

{

gotoEXIT;

}

}

}

}

EXIT:

temperature_view(T_time);

}

voidmain(void)

{

EA=1;//开中断总开关

EX0=1;//允许INT0中断

IT0=1;//下降沿产生中断

//延时3秒,重新测定一次温度,并用数码管显示,同时控制继电器的开关

 

text_start();//第一次使用数码管测试

while

(1)

{

T_time=ReadTemperature();//温度值传给T_time

temperature_view(T_time);//显示温度

if(T_time

JIDIANQI=1;

else

JIDIANQI=0;

delayms(30);//延时三秒,即每三秒扫描一次,显示一次

}

}

 

2.基于单片机的温控系统仿真图

如下图为基于单片机的温控系统部分仿真图

图基于单片机的温控系统仿真图

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2