单片机报告.docx

上传人:b****3 文档编号:26585222 上传时间:2023-06-20 格式:DOCX 页数:22 大小:237.38KB
下载 相关 举报
单片机报告.docx_第1页
第1页 / 共22页
单片机报告.docx_第2页
第2页 / 共22页
单片机报告.docx_第3页
第3页 / 共22页
单片机报告.docx_第4页
第4页 / 共22页
单片机报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机报告.docx

《单片机报告.docx》由会员分享,可在线阅读,更多相关《单片机报告.docx(22页珍藏版)》请在冰豆网上搜索。

单片机报告.docx

单片机报告

 

《单片机原理及应用》

课程设计报告

 

课题名称

基于数字温度传感器的数字温度计

学院

自动控制与机械工程

专业

电气工程及其自动化

班级

12级

姓名

学号

201204170204

时间

2014年7月

目录

一、设计的任务3

二、设计方案的总体设计框图3

1、硬件电路简述3

2、模块及功能4

(1)主控电路4

(2)晶振电路6

(3)温度检测电路6

(4)显示电路8

(5)报警电路9

三、系统软件算法设计10

1、程序总流程10

2、读出温度子程序11

3、计算温度子程序12

四、调试过程13

1、调试13

2、仿真电路图13

五、总结14

六、参考文献14

七、附录(程序源代码)15

一、设计任务和要求

基于AT89C51单片机,使用数字温度传感器DS18B20,设计一个的数字显示温度计。

具体要求如下:

1.控制器使用单片机89C51,测温传感器使用DS18B20,用5位LED数码管,实现温度显示。

2.温度测量范围为-55~125℃,精确到0.5℃。

3.设置上下报警温度,当温度不在设置范围内时,可以报警。

4.使用4个DS18B20,构成4路温度检测器。

系统由单片机最小系统、显示电路、温度传感器等组成。

本电路是由AT89C2051单片机为控制核心,具有与MCS-51系列单片机完全兼容,程序加密等功能,带2KB字节可编程闪存,工作电压范围为2.7~6V,全静态工作频率为0~24MHZ;温度传感器电路主要由DS18B20测温器件构成,该器件主要功能有:

采用单总线技术;每只DS18B20具有一个独立的不可修改的64位序列号;低压供电,电源范围为3~5V;测温范围为-55℃~+125℃,误差为±0.5℃。

温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C51,温度传感器采用DS18B20,用LED显示屏以串口传送数据实现温度显示。

二、设计方案的总体设计框图

1、硬件电路框图

图1总体设计框图

2、硬件电路简述

(1)主控电路

单片机AT89C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

晶振采用12MHZ。

图2主控芯片AT89C51

管脚说明:

VCC:

供电电压。

GND:

接地。

P0口:

P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:

口管脚备选功能

P3.0RXD(串行输入口)

P3.1TXD(串行输出口)

P3.2/INT0(外部中断0)

P3.3/INT1(外部中断1)

P3.4T0(记时器0外部输入)

P3.5T1(记时器1外部输入)

P3.6/WR(外部数据存储器写选通)

P3.7/RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:

每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:

外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:

当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

(2)晶振电路

图3晶振电路

(3)温度检测电路

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

DS18B20的性能特点如下:

(1)独特的单线接口仅需要一个端口引脚进行通信,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

(2)DS18B20支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点组网测温;

(3)无须外部器件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;

4)可通过数据线供电,电压范围为3.0-5.5V;

(5)零待机功耗;

(6)温度以9或12位数字,

对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;

(7)用户可定义报警设置;

(8)报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

(9)负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;

(10)测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力DS18B20采用3脚PR35封装或8脚SOIC封装,其引脚排列及内部结构框图如图及测温原理图如下所示:

图4PR-35封装图5SOSI封装

图6温度检测电路

主机控制DS18B20完成温度转换过程是:

每一次读写之前都要对DS18B20进行复位,即将数据总线下拉500us,然后释放,DS18B20收到信号后等待16-60us左右,之后发出60-240us的存在低脉冲,主CPU收到此此信号表示复位成功;复位成功后发送一条ROM指令令,然后发送RAM指令,这样才能对DS18B20进行预订的读写操作。

(4)显示电路

图7显示电路

(5)报警电路

本设计采用LED灯组报警电路,当温度低于10℃或大于60℃时,LED灯组就会自动报警。

图8报警电路

3、总体电路图

图9总体电路图

 

三、系统软件算法的设计

整个系统是由硬件配合软件来实现的,在硬件确定后,编写的软件的功能也就基本定型了。

所以软件的功能大致可分为两个部分:

一是监控,这也是系统的核心部分,二是执行部分,完成各个具体的功能。

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

1、程序总的流程图

图10总的流程图

 

2、读出温度子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。

如图11示

图11读出温度子程序

 

3、计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,如图9所示

图12计算温度子程序

 

四、调试过程

1、调试

通过查找众多资料,终于确定了整个设计方案,即使用AT89C51单片机和S18B20作为本设计的核心芯片。

有了以上资料和基本电路图,经过一段时间的看图分析,终于弄明白了大概的数字温度计原理,这才开始软件仿真。

2、仿真电路图

图13仿真电路

 

五、总结

本次课设的任务是采用AT89C51单片机作控制器,温度传感器选用DS18B20来设计数字温度计,系统由3个模块组成:

主控制器、测温电路及显示电路。

主控制器由单片AT89C51实现,测温电路由温度传感器DS18B20实现,显示电路由6位LED数码管直读显示。

通过本次课设使我学会了很多东西,通过自己找材料,向老师答疑,与同学讨论,自己修改,研究,最终完成本次课设。

在这个过程中,不但使我对单片机课程所学的知识有了更深入的了解,而且还培养了我的自学能力。

有些不懂的问题通过向老师请教得到解决,使我受益匪浅。

课设的过程是艰辛的,但是收获是巨大的。

首先,我再一次的加深巩固了对已有的知识的理解及认识;其次,我第一次将课本知识运用到了实际设计,使得所学知识在更深的层次上得到了加深。

再次,因为这次课程设计的确在某些方面存有一定难度,这对我来讲都是一种锻炼,培养了我自学、查阅搜集资料的能力;再有,计算操作工程中,我们曾经面临过失败、品味过茫然,但是最终我还是坚持下来了,这就是我意志、耐力和新年上的胜利,在今后的日子里,它必将成为我的宝贵财富。

六、参考文献

[1]吴亦峰,陈德为.单片机原理与接口技术.北京:

电子工业出版社,2010

[2]李广弟.单片机基础[M].北京:

北京航空航天大学出版社,1994

[3]阎石.数字电子技术基础(第三版).北京:

高等教育出版社,1989

[4]廖常初.现场总线概述J].电工技术,1999.

[5]谭浩强著.程序设计与开发技术.北京:

清华大学出版社,1991.

 

七、附录(源程序代码)

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管0-F编码

sfrPORTD=0x80;//P0数据端口

sbitwei_1=P2^1;//5个数码管位选

sbitwei_2=P2^2;

sbitwei_3=P2^3;

sbitwei_4=P2^4;

sbitwei_5=P2^5;

sbitLED1=P3^6;

sbitLED2=P3^7;

bitfuhao;

sbitfengming=P2^0;//蜂鸣器引脚

sbitDQ=P3^5;//定义DS18B20总线I/O

voidDelay_DS18B20(intnum);

uchardisplay_data[5];

uintshangxian=600;//上限设置值

uintxiaxian=100;//下限设置值

uintgetdata;

ucharflang;

ucharread_byte();

voiddelay(uintz)//1MS延时

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidDelay_DS18B20(intnum);

bitflag=1;

uinttempb20;

floatf_temp;

floattemp_ra;

/*****初始化DS18B20*****///探头1

voidInit_DS18B20()

{

unsignedcharx;

DQ=1;//DQ复位

Delay_DS18B20(8);//稍做延时

DQ=0;//单片机将DQ拉低

Delay_DS18B20(80);//精确延时,大于480us

DQ=1;//拉高总线

Delay_DS18B20(14);

x=DQ;//稍做延时后,如果x=0则初始化成功,x=1则初始化失败

Delay_DS18B20(20);

}

/*****延时子程序*****/

voidDelay_DS18B20(intnum)

{

while(num--);

}

/*****写一个字节*****/

voidWriteOneChar(unsignedchardat)

{

unsignedchari=0;

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

{

if(flag)

DQ=0;

DQ=dat&0x01;

Delay_DS18B20(5);

DQ=1;

dat>>=1;

}

}

/*****读一个字节*****/

unsignedcharReadOneChar(void)

{

unsignedchari=0;

unsignedchardat=0;

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

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

Delay_DS18B20(4);

}

return(dat);

}

/*****读取温度*****/

unsignedintReadTemperature(void)//读取温度并转换

{

unsignedchara=0;

unsignedcharb=0;

unsignedintt=0;

floattt=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0x44);//启动温度转换

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序号列号的操作

WriteOneChar(0xBE);//读取温度寄存器

a=ReadOneChar();//读低8位

b=ReadOneChar();//读高8位

tempb20=b;

tempb20<<=8;

tempb20=tempb20|a;

if((b&0xfc)==0xfc)

{

fuhao=1;

tempb20=((~tempb20)+1);

f_temp=tempb20*0.0625;

tempb20=f_temp*10+0.5;

}

else

{

fuhao=0;

f_temp=tempb20*0.0625;

tempb20=f_temp*10+0.5;

}

returntempb20;

}

voiddelay1(uinty)

{

ucharz;

z=y;

while(y--);

}

voidtimetoseg()//数码管转换成段码程序

{

//getdata=1254;

if(flang==0)//平时转换显示温度

{

display_data[0]=ledcode[getdata/1000];

display_data[1]=ledcode[getdata/100%10];

display_data[2]=ledcode[getdata/10%10]&0x7f;

display_data[3]=ledcode[getdata%10];

display_data[4]=0xc6;

if(fuhao)

display_data[0]=0xbf;

}

elseif(flang==1)//上限值转换

{

display_data[0]=0xfe;

display_data[1]=ledcode[shangxian/10];

display_data[2]=ledcode[shangxian%10];

}

elseif(flang==2)//下限值转换

{

display_data[0]=0xf7;

display_data[1]=ledcode[xiaxian/10];

display_data[2]=ledcode[xiaxian%10];

}

}

voidshaomiao()//数码管扫描程序

{

PORTD=display_data[0];//显示第一个数码管

wei_1=0;

delay(5);wei_1=1;

PORTD=display_data[1];//显示第2个数码管

wei_2=0;

delay(5);wei_2=1;

PORTD=display_data[2];//显示第3个数码管

wei_3=0;

delay(5);wei_3=1;

PORTD=display_data[3];//显示第3个数码管

wei_4=0;

delay(5);wei_4=1;

PORTD=display_data[4];//显示第3个数码管

wei_5=0;

delay(5);wei_5=1;

}

voidmain()

{

ucharjishu;

while

(1)

{

getdata=ReadTemperature();//获取温度值并减去DS18B20的温漂误差;

timetoseg();//转换数码管的段码

shaomiao();//扫描显示

if(getdata>shangxian)

LED1=0;

else

LED1=1;

if(getdata

LED2=0;

else

LED2=1;

if((getdata>shangxian)|(getdata

{

jishu++;

if(jishu==20)

{

jishu=0;fengming=~fengming;

}

}

else

fengming=1;

}

}

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

当前位置:首页 > PPT模板 > 商务科技

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

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