基于简单IO口的8LED显示温度控制器设计.docx

上传人:b****7 文档编号:9169487 上传时间:2023-02-03 格式:DOCX 页数:34 大小:662.12KB
下载 相关 举报
基于简单IO口的8LED显示温度控制器设计.docx_第1页
第1页 / 共34页
基于简单IO口的8LED显示温度控制器设计.docx_第2页
第2页 / 共34页
基于简单IO口的8LED显示温度控制器设计.docx_第3页
第3页 / 共34页
基于简单IO口的8LED显示温度控制器设计.docx_第4页
第4页 / 共34页
基于简单IO口的8LED显示温度控制器设计.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

基于简单IO口的8LED显示温度控制器设计.docx

《基于简单IO口的8LED显示温度控制器设计.docx》由会员分享,可在线阅读,更多相关《基于简单IO口的8LED显示温度控制器设计.docx(34页珍藏版)》请在冰豆网上搜索。

基于简单IO口的8LED显示温度控制器设计.docx

基于简单IO口的8LED显示温度控制器设计

一、实验目的及要求 ……………………………………………2

1、实验目的…………………………………………………2

2、设计要求…………………………………………………2

二、要求分析 ……………………………………………………2

三、系统框架图 …………………………………………………2

四、元件明细表 …………………………………………………3

1、单片机……………………………………………………3

2、显示屏……………………………………………………4

五、系统电路总体设计……………………………………………4

六、系统电路总体设计……………………………………………5

1、系统工作原理……………………………………………5

2、硬件系统设计……………………………………………6

3、系统程序设计……………………………………………11

七、系统总体调试…………………………………………………15

八、实验总结………………………………………………………17

九、附录 参考文献………………………………………………18

十、附录 程序清单………………………………………………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

8LED

锁存器

74HC373

DS18B20

 

四.元件明细表

元件名称

型号

单片机

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成了我们很好的助手。

在查阅资料的过程中,我们要判断优劣、取舍相关知识,不知不觉中我们查阅资料的能力也得到了很好的锻炼。

我们学习的知识是有限的,在以后的工作中我们肯定会遇到许多未知的领域,这方面的能力便会使我们受益非浅。

而且在设计过程中,总是遇到这样或那样的问题。

有时发现一个问题的时候,需要做大量的工作来进行调试,然后才能解决。

自然而然,我分析问题解决问题的能力得到了增强。

为以后的工作积累了经验,增强了信心。

通过这次的软件设计,我熟悉了单片机开发的每个步骤,它不但检查了我的整个知识面的掌握程度,知道了自己的不足,让我更加牢固的掌握了单片机方面的相关知识!

这次的软件设计也让我学会了在遇到问题时,如何冷静的思考问题以及解决问题!

更让我懂得了学习贵在坚持。

我学到了更多以前没有学到过的知识。

在这里,我很感谢指导老师和同学给我的帮助,使我能顺利完成我的软件设计。

总之通过本次设计,让我很好的锻炼了理论联系实际,如何把理论应用于实际,又如何实践中遇到的问题怎样用理论去解决。

感谢学校给我们大家这样一次课程设计的机会,为我们以后的工作打下了坚实的基础。

 

附录参考文献

雷晓平,李晓东,罗海天.2021.单片机原理及应用.机械工业出版社

于珍珠,赵娜,赵刚等.2021.基于51单片机的温度测量系统.单片机开发与应用.23(1-2):

146-148

齐建家,胡天明.2021.基于DS18B20的数字温度设计及其应用.黑龙江工程学院学报.22

(2):

59-62

罗平,陶冶.袁永超.2021.基于DS18B20的温度测量系统.农机化研究.(10):

161-164

曹柏荣.2021.单片机原理及其应用技术.上海:

原子能出版社

曹海平.2021.基于单片机和DS18B20的分布式多点温度检测系统的设计.自动化技术与应用.27(11):

90-93

魏英智.2021.DS18B20在温度控制中的应用.煤矿机械.(3):

92-93

魏泽鼎.2021.单片机应用技术与实例.北京:

电子工业出版社

 

附录程序清单

#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=

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1