IO接口温度控制器报告.docx
- 文档编号:23048121
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:30
- 大小:674.33KB
IO接口温度控制器报告.docx
《IO接口温度控制器报告.docx》由会员分享,可在线阅读,更多相关《IO接口温度控制器报告.docx(30页珍藏版)》请在冰豆网上搜索。
IO接口温度控制器报告
目录
1、实验目的及要求 ……………………………………………2
1、实验目的…………………………………………………2
2、设计要求…………………………………………………2
2、要求分析 ……………………………………………………2
3、系统框架图 …………………………………………………2
4、元件明细表 …………………………………………………3
1、单片机……………………………………………………3
2、显示屏……………………………………………………4
5、系统电路总体设计……………………………………………4
6、系统电路总体设计……………………………………………5
1、系统工作原理……………………………………………5
2、硬件系统设计……………………………………………6
3、系统程序设计……………………………………………11
7、系统总体调试…………………………………………………15
8、实验总结………………………………………………………17
9、附录 参考文献………………………………………………18
10、附录 程序清单………………………………………………19
基于简单I/O口的8LED显示温度控制器设计
一、设计要求
(1)基本要求:
1用18B20或AD590温度传感器作温度探头,采集温度数据并转换成BCD码在数码管上显示。
2记录间隔可任意设定(1S到1h,步长1s),能按设定时间存储数据。
3通过键回放温度和记录时间参数。
(2)发挥部分:
1通过DA回放数据(直方图),用模拟示波器显示。
2设定温度告警门限。
3通过声、光告警显示。
(3)动态显示格式:
自定
注:
基于简单IO口是指显示器由74HC373控制
二、要求分析
根据设计要求,需要利用DS18B20作为温度探头,采集温度数据并转换成BCD码在数码管上显示。
当按下键盘的设定步长按键后,可以设定任意长度的步长,能按设定时间存储数据。
当按下键盘的读取存储数据按键后,可以通过按键1-9来回放相应的温度和记录时间参数。
三、系统框架图
四.元件明细表
元件名称
型号
单片机
89C51
温度探测器
DS18B20
锁存器
74LS373
数码显示器
7SEG-MPX8-CC-BLUE
4*4键盘
KEYPAD-SMALLCALC
1、单片机
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
作为嵌入式系统控制核心的单片机具有其体积小、功能全、性价比高等诸多优点。
51系列单片机是国内目前应用最广泛的单片机之一,随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51系列单片机的发展又进入了一个新的阶段。
在今后很长一段时间内51系列单片机仍将占据嵌入式系统产品的中低端市场。
2、显示屏
五、总体方案的确定
在温度采集方面,在设计开始时就准备了两种方案:
一种是采用热敏电阻式传感器和ADC0809转换器进行数据采集。
具体方案如下:
温度传感器的模拟信号转换为数字信号后由P0口输入。
ADC0809由P3.0启动转换,由P3.1控制输出。
信号传输采用无条件输入方式,启动A/D转换后延时100微妙从P0口采集数据。
时间延迟由T0实现。
另一种是采用单线数字温度传感器DS18B20进行数据采集。
DSB18B20S数字温度计提供9到12位温度读数,指示器件的温度信息经过单线接口送入DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线和地,读写和完成温度变换所需的电源可以由数据线本身提供,甚至不需要外部电源。
而总体方案和系统电路图方面基本上和热敏式传感器相同,只在数据采集方面有所差别。
根据选择传感器的原则,考虑到模拟量输出传感器会带来许多不便,具体体现在接线多、信号处理复杂等,在硬件实现方面比较困难。
而且热敏电阻式温度传感器互换性差,非线性严重。
而数字温度传感器DS18B20接线简单,数字输出量能直接作为单片机的输入数据,同时考虑到只是在普通环境下测量,无论在灵敏度、线性范围、稳定性,还是在精度方面,DS18B20的强大功能已足够满足设计需要。
在本次设计中,温度数据采集用到的传感器是DS18B20。
具体电路图如图1所示。
图1数字传感器式温度控制器
六、系统电路总体设计
1、系统工作原理
该温度控制系统用到89C51单片机作为系统的CPU进行控制控制,由数字传感器DS18B20进行数据采集,89C51对采集到的数据进行处理,得到各种信号。
而这些信号将作为LED数码管显示的信号输入,同时将利用单片机的其它使能端口实现键盘的控制作用。
2、硬件系统设计
系统的硬件部分主要可分为温度采集电路,信号处理与控制控制,温度显示电路,键盘控制电路四大部分。
(1)温度采集电路
本系统中采集温度使用的是DS18B20数字温度传感器。
DS18B20是Dallas半导体公司生产的世界上第一片支持“一线总线”接口的温度传感器。
与之前的传感器相比,DS18B20体积更小、适用电压更宽、更经济。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20“一线总线”数字化温度传感器支持“一线总线”接口,测量温度范围为-55℃到+125℃,在-10到+85℃范围内,精度为±0.5℃。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V到5.5V的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20可以程序设定9到12位的分辨率,精度为±0.5℃。
当分辨率为12位时,转换时间为750ms。
使得用户可选择更小的封装方式,更宽的电压适用范围和分辨率设定,同时用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20一般为三极管型封装,包括温度传感器、64位激光ROM单线单口、存放中间数据的高速暂存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验码发生器等。
其引脚图如图2所示。
这三个引脚分别为:
GND——电源地;QD——数字信号输入/输出端;VDD——外接供电电源(可选5V)。
图2DS18B20引脚图
在单片机89C51中,输入/输出端口分别P0、P1、P2、P3。
其中P3是一个带内部上拉电阻的8位双向I/O端口。
P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写1时,通过内部的上拉电阻吧端口拉到高电位,这时可用作输入口。
P3作输入口使用时,因为有内部的上拉电阻,那些被电阻拉低的引脚会输出一个电流。
在该系统中,DS18B20的数字信号输入/输出端连接到89C51的P3.7中,作为89C51的数据输入。
(2)信号处理与控制电路
信号处理与控制采用51单片机基本电路。
此电路以51单片机为核心,51的具体引脚图如图3。
在该系统中,要使单片机实现信号处理与控制,则要使单片机的18、19脚(XTAL2、XTAL1)接12MHz的晶振和两个电容,组成片内振荡电路,为单片机提供时钟脉冲。
9脚(RST)接按键复位电路,提供复位信号给单片机。
图389C51引脚图
89C51芯片内部有一个高增益反相放大器,用于构成振荡器。
反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
两个电容通常取30pF左右,稳定频率并对震荡频率有微调作用。
如图4所示。
图4晶振电路
手动复位是通过接通一按钮开关,使单片机进入复位状态。
系统上电运行后,若需要复位,则通过手动复位来实现的。
如图5所示。
图5手动复位电路
(3)温度显示电路
本系统中,温度显示硬件由74HC373和八位LED数码管构成。
1.八位LED数码管
八位数码管引脚图如图6所示。
它的1、2、3、4、5、6、7、8脚为位选脚,分别对应从左到右八个数码管,输入低电平选通。
剩下的其他引脚为数据输入脚,此电路中数码管的8个数据引脚(a、b、c、d、e、f、g、dp)。
图6LED数码管引脚图
2、74HC373
373为三态输出的八口透明锁存器,共有74HC373和74LS373两种线路结构形式。
在本系统中,采用74HC373,因为在PROTUES仿真里,用74LS373会被报错。
74HC373的D0-D7脚分别与单片机的P0.0-P0.7脚相连。
74HC373引脚图如图7所示:
图774HC373引脚图
(4)键盘控制电路
键盘控制电路的作用是通过按键回放温度和记录时间参数。
当所设置的功能键或数字键按下时,单片机系统应该完成该按键所设定的功能,因此,键的输入信息是与软件结构密切相关的。
在本系统中采用4*4的键盘,键盘的列线与P1口的低4位相连,行线与P1口的高4位相连。
键盘控制电路如图8所示:
图8键盘控制电路
3、系统程序设计
(1)主程序模块(如图9所示)。
图9主程序流程图
(2)DS18B20的工作流程如图10所示。
图11DS18B20的工作流程
(3)温度显示流程图如图11所示。
图11温度显示流程图
(4)键盘控制电路流程图如图12所示
图12键盘控制电路流程图
完整的程序请详见附录。
七、系统的调试
1、程序调试过程中遇到的问题和解决办法
1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器
采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
2)在DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要
等待DS1820的返回信号,一旦DS1820连线未接好,当程序读该DS1820时,将没有返回信号,程序进入死循环。
这一点在进行DS1820软件设计时也要给予一定的重视。
3)编程时要注意,在程序开始时,要写入各定时器中断的入口地址。
4)编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,
不便于查找或更改。
5)程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加
清晰化。
6)编程前要加流程图,这样会使思路清晰。
2、调试结果
(1)温度显示结果
DS1820采集温度数据并转换成BCD码在8位LED上显示,结果如图13所示:
图13温度显示结果
(2)键盘控制显示结果
通过键盘回放温度和记录时间参数,结果如图13所示:
图13键盘控制显示结果
八、实验总结
这次的课程设计,我觉得我学到了很多的东西,受益匪浅。
首先我了解了proteus软件的基本使用方法,以及利用这个软件用来仿真,对于电路的设计有了一定的理解,懂得了如何利用C语言联系实际来进行编程,同时在编程的过程中,了解一些管脚的使用方法,以及在C语言中使用的代码和一些器件的初始化方法,同时也让我明白了自己的一些不足,认识到仅仅把书本上的知识学好是远远不够的,需要拓宽自己的知识面,来应付未来的挑战。
当然在本次课程设计中,我遇到了很多没有遇到过的困难,于是图书馆和INTERNET成了我们很好的助手。
在查阅资料的过程中,我们要判断优劣、取舍相关知识,不知不觉中我们查阅资料的能力也得到了很好的锻炼。
我们学习的知识是有限的,在以后的工作中我们肯定会遇到许多未知的领域,这方面的能力便会使我们受益非浅。
而且在设计过程中,总是遇到这样或那样的问题。
有时发现一个问题的时候,需要做大量的工作来进行调试,然后才能解决。
自然而然,我分析问题解决问题的能力得到了增强。
为以后的工作积累了经验,增强了信心。
通过这次的软件设计,我熟悉了单片机开发的每个步骤,它不但检查了我的整个知识面的掌握程度,知道了自己的不足,让我更加牢固的掌握了单片机方面的相关知识!
这次的软件设计也让我学会了在遇到问题时,如何冷静的思考问题以及解决问题!
更让我懂得了学习贵在坚持。
我学到了更多以前没有学到过的知识。
在这里,我很感谢指导老师和同学给我的帮助,使我能顺利完成我的软件设计。
总之通过本次设计,让我很好的锻炼了理论联系实际,如何把理论应用于实际,又如何实践中遇到的问题怎样用理论去解决。
感谢学校给我们大家这样一次课程设计的机会,为我们以后的工作打下了坚实的基础。
附录参考文献
雷晓平,李晓东,罗海天.2006.单片机原理及应用.机械工业出版社
于珍珠,赵娜,赵刚等.2007.基于51单片机的温度测量系统.单片机开发与应用.23(1-2):
146-148
齐建家,胡天明.2008.基于DS18B20的数字温度设计及其应用.黑龙江工程学院学报.22
(2):
59-62
罗平,陶冶.袁永超.2007.基于DS18B20的温度测量系统.农机化研究.(10):
161-164
曹柏荣.2003.单片机原理及其应用技术.上海:
原子能出版社
曹海平.2008.基于单片机和DS18B20的分布式多点温度检测系统的设计.自动化技术与应用.27(11):
90-93
魏英智.2005.DS18B20在温度控制中的应用.煤矿机械.(3):
92-93
魏泽鼎.2005.单片机应用技术与实例.北京:
电子工业出版社
附录程序清单
#include
#include
#include
#include
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
typedefsignedcharschar;
typedefsignedintsint;
#defineDQP3_7//温度检测P3.7
#defineKEY_SET14//on/c
#defineKEY_COMFIRM15//=
externvoidDelayXms(uintxms);
externucharKeyScan();
ucharcodedis_code[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9、负号,共阴极数码管
uinttimecnt=0,step=1,stepcnt=0;
uchartemptable[11],position=0;
schartemp=0;
//延时函数
voidDelayXus(uinti)
{
while(i--);
}
//初始化函数
voidInitialDS18B20()
{
ucharx=0;
DQ=1;//DQ复位
DelayXus(8);//稍做延时
DQ=0;//单片机将DQ拉低
DelayXus(80);//精确延时大于480us
DQ=1;//拉高总线
DelayXus(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
DelayXus(20);
}
//读一个字节
ucharReadByte()
{
uchari=0,dat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
DelayXus(4);
}
returndat;
}
//写一个字节
voidWriteByte(uchardat)
{
uchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
DelayXus(5);
DQ=1;
dat>>=1;
}
//DelayXus(4);
}
//读取温度
uintReadTemperature()
{
uchara=0;
ucharb=0;
uintt=0;
floattt=0;
InitialDS18B20();
WriteByte(0xCC);//跳过读序号列号的操作
WriteByte(0x44);//启动温度转换
InitialDS18B20();
WriteByte(0xCC);//跳过读序号列号的操作
WriteByte(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ReadByte();
b=ReadByte();
t=b;
t<<=8;
t=t|a;
tt=t*0.0625;//5/8;
//t=tt*10+0.5;//放大10倍输出并四舍五入---此行没用
returnt;
}
/*******************************************
*ledplay数码管显示,chan0-8,num数值0-9、负号
*/
voidledplay(ucharchan,ucharnum)
{
if(chan<8&&num<=10)
{
P2=0xff;
P2=(~(0x01< P0=dis_code[num];//显示 DelayXms(100);//delay(); } } voidInitTimer1(void) { TMOD=0x10; TH1=0xFC; TL1=0x18; EA=1; ET1=1; TR1=1; } /******************************************* *tempdisplay温度显示函数 */ voidtempdisplay(schartem) {schartempbit1=0; schartempbit2=0; //if((tem<=-40)||(tem>=125))return; if(tem<0) { ledplay(5,10);tem=256-tem; } if(tem>99) { ledplay(5,1);tem=tem-100; } tempbit1=tem%10;//个位HexToBcd tempbit2=tem/10;//十位 ledplay(6,tempbit2); ledplay(7,tempbit1); } /******************************************* *Timer1Interrupt定时器1000us*1000=1s */ voidTimer1Interrupt(void)interrupt3 { TH1=0xFC; TL1=0x18; timecnt++; if(timecnt>=1000)//1s-------------温度值存放 { timecnt=0; stepcnt++; if(stepcnt>=step) { stepcnt=0; if(position<10)temptable[position++]=temp; else{temptable[position]=temp;position=0; } } } } uintsetStep() { ucharkey,i=0; uintstep=0; P2=0xff;//清屏 for(;;) { key=KeyScan(); if(key==KEY_COMFIRM)returnstep; if(key<10) { step=key; for(;;) { key=KeyScan(); ledplay(7,step); if(key==KEY_COMFIRM)returnstep; if(key<10) {step=step*10+key; for(;;) { key=KeyScan(); if(key==KEY_COMFIRM)returnstep; ledplay(6,step/10); ledplay(7,step%10); if(key<10) { step=step*10+key; for(;;) { key=KeyScan(); if(key==KEY_COMFIRM)returnstep; ledplay(5,step/100); ledplay(6,(step%100)/10); ledplay(7,step%10); if(key<10) {step=step*10+key; for(;;) { key=KeyScan(); if(key==KEY_COMFIRM)returnstep; ledplay(4,step/1000); ledplay(5,(step%1000)/100); ledplay(6,(step%100)/10); ledplay(7,step%10); } } } } } } } } } } voidmain() { uinti=0,j; InitTimer1(); for(;;) { ucharkey=0xff,dis; i=ReadTemperature();//读温度 if(i! =0xffff)temp=i>>4; tempdisplay(temp);//主循环显示温度 key=KeyScan();//检查按键 ledplay(0,key); if(key==KEY_SET)//进入设置状态 { if(0! =(j=setStep())) step=j; } if(key<10)//如果有0-9按键按下, { if(key==0)key=10;//按下0,显示10秒前 dis=((position>=key)? (position-key):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IO 接口 温度 控制器 报告