单片微型计算机原理与接口技术课程设计报告温度测量.docx

上传人:b****5 文档编号:2930769 上传时间:2022-11-16 格式:DOCX 页数:24 大小:429.90KB
下载 相关 举报
单片微型计算机原理与接口技术课程设计报告温度测量.docx_第1页
第1页 / 共24页
单片微型计算机原理与接口技术课程设计报告温度测量.docx_第2页
第2页 / 共24页
单片微型计算机原理与接口技术课程设计报告温度测量.docx_第3页
第3页 / 共24页
单片微型计算机原理与接口技术课程设计报告温度测量.docx_第4页
第4页 / 共24页
单片微型计算机原理与接口技术课程设计报告温度测量.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

单片微型计算机原理与接口技术课程设计报告温度测量.docx

《单片微型计算机原理与接口技术课程设计报告温度测量.docx》由会员分享,可在线阅读,更多相关《单片微型计算机原理与接口技术课程设计报告温度测量.docx(24页珍藏版)》请在冰豆网上搜索。

单片微型计算机原理与接口技术课程设计报告温度测量.docx

单片微型计算机原理与接口技术课程设计报告温度测量

 

单片微型计算机原理与接口技术课程设计报告

 

题目:

温度测量

班级:

学号:

姓名:

指导老师:

实习日期:

6.27~7.1

1、课程设计要求

(1)通过按键设置温度上、下限

(2)读入A/D转换数据:

若数据<下限,则显示温度并显示L、报警并使步进电机正转;

若数据>上限,则显示温度并显示H、报警并使步进电机反转;

若下限<数据<上限,则显示C

(3)本机地址为06H,当接到上位机发的06H时,则回发06H

当接到上位机发的AAH时,则将当前温度发给上位机

当接到上位机发的55H时,则小灯亮,提示修改上、下限

2、方案论证

由于本设计是于AT89C51单片机的温度测量系统,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上将被测温度显示出来。

但是这种设计需要用到A/D转换电路,还要涉及到电阻与温度的对应值的计算,比较麻烦。

所以采用DS18B20温度传感器,这样可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都容易实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。

步进电机模块,由于步进电机的额定工作电流过大,单片机无法独立驱动其工作,因而在接口电路与步进电机之间加入ULN2003A驱动芯片,利用驱动芯片的电流放大作用,使步进电机可靠的运转。

总体设计方框图如图2.1所示。

图2.1总体设计方框图

3、硬件系统设计及原理图

3.1单片机主控电路

本设计中采用美国Atmel公司的8位单片机AT89C51作为单片机控制模块的核心部件,该型单片机在本设计中的应用如下:

晶振采用12MHZ,复位电路采用上电加按钮复位。

图3.1.2复位电路

3.2显示电路

显示电路采用4位共阴极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。

P2口的低四位作为数码管的位选端。

采用动态扫描的方式显示。

图3.2数码管显示电路

3.3温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。

图3.3温度传感器与单片机的连接

3.4温度上下限调整按键

本系统设计三个按键,采用查询方式,一个用于选择切换设置温度上下限和当前温度,另外两个分别用于设置报警温度的加和减。

均采用软件消抖。

图3.4按键电路

3.5步进电机

3.5.1步进电机驱动电路

本设计选用驱动芯片ULN2003驱动四相步进电机。

ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。

ULN2003的每一对达林顿都串联一个2.7K的基极电阻,在5V的工作电压下它能与TTL和CMOS电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V的电压,输出还可以在高负载电流并行运行。

图3.5.2.1ULN2003方框图

表3.5.2ULN2003极限值参数

ULN2003与单片机连接驱动步进电机原理图如下:

图3.5.2.2步进电机驱动电路

3.6双机通信

利用单片机串行口实现两个单片机(主机、从机)之间的通信,其中一个单片机作为主机(发送方),另一个为从机(接收方),主机读入按键值并将相应命令发送给从机,从机收到命令后执行相应的功能。

双机通信示意图如下:

图3.6双机通信示意图

4、软件清单

系统程序主要包括主程序和通信程序。

其中主程序包括延时函数、扫描显示函数、DS18B20复位函数、DS18B20写命令函数、DS18B20读1字节函数、读出温度函数、温度数据处理函数、报警函数、步进电机函数、设置温度显示转换函数、按键查询程序、主函数。

通信上位机程序包括延时函数、扫描显示函数、初始化函数、按键查询程序、主函数。

下位机函数包括初始化、接收程序、主函数。

上位机软件清单:

#include"reg51.h"

#include"intrins.h"//_nop_();延时函数用

#definedmP0//段码输出口

#defineucharunsignedchar

#defineuintunsignedint

uinth;

sbitw0=P2^0;//数码管4

sbitw1=P2^1;//数码管3

sbitw2=P2^2;//数码管2

sbitw3=P2^3;//数码管1

sbitaa=P1^0;

sbitbb=P1^1;

sbitcc=P1^2;

ucharidatabuf[1];

ucharcodetable_dm[15]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x38,0x76,0x39};

//共阴LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"'L''H''C'

uchardatadisplay[4]={0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用

/******11us延时函数*******/

voiddelay(uintt)

{

for(;t>0;t--);

}

/************scan*************/

voidscan()

{

intj;

for(j=0;j<4;j++)

{

switch(j)

{

case0:

dm=table_dm[display[0]];w0=0;delay(50);w0=1;

case1:

dm=table_dm[display[1]];w1=0;delay(50);w1=1;

case2:

dm=table_dm[display[2]];w2=0;delay(50);w2=1;

case3:

dm=table_dm[display[3]];w3=0;delay(50);w3=1;

}

}

}

/**********初始化函数***********/

voidinit()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

PCON=0x00;

TR1=1;

SCON=0x50;

}

/*************keyscan***********/

voidkeyscan()

{

if(aa==0)

{

SBUF=0x06;

do{}while(TI==0);TI=0;

}

elseif(bb==0)

{

SBUF=0xaa;

do{}while(TI==0);TI=0;

}

elseif(cc==0)

{SBUF=0x55;

display[3]=0x0d;

display[2]=0x0d;

display[1]=0x0d;

display[0]=0x0d;

do{}while(TI==0);TI=0;

}

else;

}

/************main***************/

voidmain()

{

init();

dm=0x00;//初始化端口

w0=0;

w1=0;

w2=0;

w3=0;

for(h=0;h<4;h++)//开机显示"0000"

{

display[h]=0;

}

while

(1)

{

scan();

keyscan();

if(RI==1)

{

RI=0;

buf[0]=SBUF;

if(buf[0]==0x55)

{

}

elseif(buf[0]==0x06)

{

display[3]=0x0a;

display[2]=0x0a;

display[1]=buf[0]%100/10;

display[0]=buf[0]%10;

}

else

{

display[3]=0x0a;

display[2]=0x0e;

display[1]=buf[0]%100/10;

display[0]=buf[0]%10;

}

}

}

}

下位机软件清单

#include"reg51.h"

#include"intrins.h"//_nop_();延时函数用

#definedmP0//段码输出口

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeTable[4]={0x03,0x06,0x0c,0x09};

ucharcodeTable1[4]={0x09,0x0c,0x06,0x03};

sbitDQ=P2^7;//温度输入口

sbitw0=P2^0;//数码管4

sbitw1=P2^1;//数码管3

sbitw2=P2^2;//数码管2

sbitw3=P2^3;//数码管1

sbitbeep=P3^7;//蜂鸣器和指示灯

sbitset=P2^6;//温度设置切换键

sbitadd=P2^4;//温度加

sbitdec=P2^5;//温度减

sbitlig=P3^6;

inttemp1=0;//显示当前温度和设置温度的标志位为0时显示当前温度

uinth;

uinttemp;

ucharr;

ucharhigh=35,low=20;

ucharsign;

ucharq=0;

uchartt=0;

ucharscale;

ucharidatabuf[1]={0x00};

intnum=0;

intnum1=0;

//*****温度小数部分用查表法****//

ucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//小数断码表

ucharcodetable_dm[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x38,0x76,0x39};

//共阴LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"'L''H''C'

uchartable_dm1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//个位带小数点的断码表

uchardatatemp_data[2]={0x00,0x00};//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用

/**********延时函数************/

voiddelay(uintt)

{

for(;t>0;t--);

}

//********扫描显示函数******//

voidscan()

{

intj;

for(j=0;j<4;j++)

{

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

当前位置:首页 > 表格模板 > 合同协议

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

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