基于单片机温度控制系统设计的显示电路设计部分Word文件下载.docx
- 文档编号:19922032
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:17
- 大小:81.81KB
基于单片机温度控制系统设计的显示电路设计部分Word文件下载.docx
《基于单片机温度控制系统设计的显示电路设计部分Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机温度控制系统设计的显示电路设计部分Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
实验结果证明了设计方案的正确性与可行性,以此为理论基础,对我们设计彩灯电路具有很强的使用和参考价值。
关键词:
温度控制系统;
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_();
for(i=0;
i<
8;
i++)
{
code1=ch&
0x80;
ch=ch<
<
1;
if(code1)
{
DIN=1;
CLK=0;
CLK=1;
}
else
DIN=0;
}
}
/*向MAX7219写入一个字(16位)*/
voidSendword(ucharaddr,ucharnumber)
LOAD=0;
Sendchar(addr);
Sendchar(number);
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<
reg51.h>
//MAX7219端口定义
#include<
intrins.h>
#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);
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的子程序
i>
i--)
DQ=0;
DQ=dat&
0x01;
delay(5);
DQ=1;
dat>
ReadTemperature(void)//从DS18B20中读出两个字节的温度数据
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
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写入一个字节数据*/
//温度显示-----------------------
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|=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;
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<
T_MOREN)//判断继电器是否工作,当温度小于T0时,继电器导通
JIDIANQI=1;
JIDIANQI=0;
delayms(30);
//延时三秒,即每三秒扫描一次,显示一次
2.基于单片机的温控系统仿真图
如下图为基于单片机的温控系统部分仿真图
图基于单片机的温控系统仿真图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 控制系统 设计 显示 电路设计 部分
![提示](https://static.bdocx.com/images/bang_tan.gif)