单片机课程设计分析方案赵鑫.docx

上传人:b****6 文档编号:13150593 上传时间:2023-06-11 格式:DOCX 页数:18 大小:165.23KB
下载 相关 举报
单片机课程设计分析方案赵鑫.docx_第1页
第1页 / 共18页
单片机课程设计分析方案赵鑫.docx_第2页
第2页 / 共18页
单片机课程设计分析方案赵鑫.docx_第3页
第3页 / 共18页
单片机课程设计分析方案赵鑫.docx_第4页
第4页 / 共18页
单片机课程设计分析方案赵鑫.docx_第5页
第5页 / 共18页
单片机课程设计分析方案赵鑫.docx_第6页
第6页 / 共18页
单片机课程设计分析方案赵鑫.docx_第7页
第7页 / 共18页
单片机课程设计分析方案赵鑫.docx_第8页
第8页 / 共18页
单片机课程设计分析方案赵鑫.docx_第9页
第9页 / 共18页
单片机课程设计分析方案赵鑫.docx_第10页
第10页 / 共18页
单片机课程设计分析方案赵鑫.docx_第11页
第11页 / 共18页
单片机课程设计分析方案赵鑫.docx_第12页
第12页 / 共18页
单片机课程设计分析方案赵鑫.docx_第13页
第13页 / 共18页
单片机课程设计分析方案赵鑫.docx_第14页
第14页 / 共18页
单片机课程设计分析方案赵鑫.docx_第15页
第15页 / 共18页
单片机课程设计分析方案赵鑫.docx_第16页
第16页 / 共18页
单片机课程设计分析方案赵鑫.docx_第17页
第17页 / 共18页
单片机课程设计分析方案赵鑫.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计分析方案赵鑫.docx

《单片机课程设计分析方案赵鑫.docx》由会员分享,可在线阅读,更多相关《单片机课程设计分析方案赵鑫.docx(18页珍藏版)》请在冰点文库上搜索。

单片机课程设计分析方案赵鑫.docx

单片机课程设计分析方案赵鑫

 

单片机课程设计报告

 

题目:

数字温度计

 

院<系)工学院<电气工程系)

专业电子信息工程

年级10-2班

姓名赵鑫学号10043225

指导教师舒昌

 

2018年12月1日

电子信息工程专业10级学生单片机原理课程设计任务书

课程设计题目

三、数字温度计

指导教师

舒昌

职称

讲师

设计任务和要求:

1.基本要求

(1)采用DS18B20作为温度传感器进行温度检测

(2)对采集温度进行显示<显示温度分辨率0.1℃)

(3)采集温度数值应采用数字滤波措施,保证显示数据稳定

(4)显示数据,无数据位必须消隐。

2.设计步骤

(1>使用Proteus按设计要求绘制电路图。

(2>按要求编写相应程序。

(3>使用Proteus仿真程序,对程序进行调试。

(4>撰写课程设计报告

3.撰写课程设计报告

课程设计报告内容包括题目、摘要、目录、正文、结论、致谢、参考文献等。

学生在完成上述全部工作之后,应将全部内容以先后顺序写成设计报告一份,阐述整个设计内容,要求重点突出、特色鲜明、语言简练、文字通畅,字迹工整。

报告书以A4纸打印,装订成册<文字不少于3000字)。

 

数字温度计

摘要:

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

 

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机STC89S51,测温传感器使用DS18B20,用LCD实现温度显示,能准确达到以上要求。

 

   随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。

    

关键词:

单片机,数字控制,温度计

一、设计任务与要求

(1>采用DS18B20作为温度传感器进行温度检测

(2>对采集温度进行显示<显示温度分辨率0.1℃)

(3>采集温度数值应采用数字滤波措施,保证显示数据稳定

(4>显示数据,无数据位必须消隐。

二.方案设计与论证

数字温度计是测温仪器类型的其中之一。

根据所用测温物质的不同和测温范围的不同,有煤油温度计、酒精温度计、水银温度计、气体温度计、电阻温度计、温差电偶温度计、辐射温度计和光测温度计、双金属温度计等。

<1)、温度传感模块

方案一:

采用热敏电阻,热敏电阻精度、重复性、可靠性较差,对于检测1摄氏度的信号是不适用的,也不能满足测量范围。

在温度测量系统中,也常采用单片温度传感器,比如AD590,LM35等。

但这些芯片输出的都是模拟信号,必须经过A/D转换后才能送给计算机,这样就使测温系统的硬件结构较复杂。

另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。

方案二:

采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。

便于单片机处理及控制,节省硬件电路。

且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。

DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度装置,它直接输出温度的数字信号到微控制器。

每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。

这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。

综上分析,我们选用第二种方案。

图1.温度传感模块仿真图

(2>、显示模块

方案一:

采用8位段数码管,将单片机得到的数据通过数码管显示出来。

该方案简单易行,但所需的元件较多,且不容易进行操作,可读性差,一旦设定后很难再加入其他的功能,显示格式受限制,且大耗电量大,不宜用电池给系统供电。

方案二:

采用液晶显示器件,液晶显示平稳、省电、美观,更容易实现题目要求,对后续的园艺通兼容性高,只需将软件作修改即可,可操作性强,也易于读数,采用RT1602两行十六个字符的显示,能同时显示其它的信息如日期、时间、星期、温度。

综上分析,我们采用了第二个方案

图2.显示模块仿真图

 

三、单元电路设计

采用AT89S52单片机作为控制核心对温度传感器DS18B20控制,读取温度信号并进行计算处理,并送到液晶显示器LCD1602显示。

按照系统设计功能的要求,确定系统由3个模块组成:

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

四、总原理图

图3.总原理图

DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。

初始时,计数器1预置的是与-55℃相对应的一个预置值。

以后计数器1每一个循环的预置数都由斜率累加器提供。

为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。

计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。

DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。

在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃时,温度寄存器的最低位就进位然后置0。

这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表

0.5℃,四舍五入最大量化误差为±1/2LSB,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。

测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。

DS18B20测量温度时使用特有的温度测量技术。

DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。

当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。

芯片内部还有斜率累加器,可对频率的非线性度加以补偿。

测量结果存入温度寄存器中。

一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。

DS18B20工作过程一般遵循以下协议:

初始化——ROM操作命令——存储器操作命令——处理数据

DS18B20的高速暂存存储器由9个字节组成,其分配如图3所示。

当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

表1.存储器分配表

 

五、软件部分

系统程序主要包括主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示等等。

1.主程序

主要功能是完成DS18B20的初始化工作,并进行读温度,将温度转化成为压缩BCD码并在显示器上显示传感器所测得的实际温度。

2.读出温度子程序

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

3.温度转换命令子程序

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辩率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

4.计算温度子程序

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

六、调试与分析

数字温度计在测量中除误差外,还有内部固定偏差,视觉,环境温度的变化,选用期间的温漂,器件的精度,电源电压的波动,输入端各种杂散参数以及测量信号写波分量等因素引起的系统误差。

一起精度不高,认为读书存在误差。

测量值达不到理论值,多次测量取平均值误差降到最小。

 

图4.调试前

 

图5.调试后

七、总结与心得

通过这次基于DS18B20传感器测量温度的设计,我学到了许多东西。

这次设计加强了我们独立思考的能力。

一个好的设计需要通过我们不断的思维,不断的改善。

经过设计之后,我们不像以前那样,遇到问题都不愿意独立思考,只会一味的向别人求助。

现在,我们会通过自己的思考,解决我们自己遇到的问题和困难。

还有,我们学会不能手高眼低,要踏踏实实,从基础学起、做起。

一开始我们通过讨论,初步有了设计的方案,觉得还是比较简单的。

但是,具体到设计时,我们遇到了很多麻烦,比如如何将传感器得到的温度转换成为对应的电信号,如何将电信号输送到单片机进行控制,如何把测得的温度用数字显示出来等等。

这就要求我们学习要一步一个脚印,掌握扎实的理论基础了。

最重要的一点是,我们在这次设计中培养了自己的学习能力。

就那DS18B20来说,由于我们书本上没有介绍到这种温度传感器,所以我们就通过学习DS18B20的说明书,了解它工作的原理以及特性,并弄清楚在实际应用时要注意的事项,对DS18B20进行初始化、编程的要求和规定等。

培养了自主学习的能力,无论以后我们要做什么样的设计,我们都能够通过查阅资料来实现。

最后,本次设计能够顺利完成,我要特别感谢实验室老师给予的大力支持和热心帮助。

七、参考文献

【1】梁森,欧阳三泰,王侃夫.自动检测技术及应用【M】.北京:

机械工业出版社,2009.

【2】高洪志.MCS-51单片机原理及应用技术教程【M】北京:

人民邮电出版社,2009.

 

附件

完整程序如下:

#include

#include

typedefunsignedcharuint8。

#defineuintunsignedint

#defineucharunsignedchar

sbitDQ=P3^3。

//定义DQ引脚为P3.3

ucharcodeBw[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39}。

//百位编码

ucharcodeXsw[16]={0x30,0x31,0x31,0x32,0x33,0x33,0x34,0x34,0x35,0x36,0x36,0x37,0x38,0x38,0x39,0x39}。

//小数位编码

sbitRS=P2^0。

sbitRW=P2^1。

sbitEN=P2^2。

sbitBUSY=P0^7。

ucharwendu。

uchartemp_g,temp_d。

unsignedcharcodeword1[]={"Temperature:

"}。

voiddelay(uintxms>

{

uinti,j。

for(i=xms。

i>0。

--i>

for(j=110。

j>0。

--j>。

}

voidDelayus(intt>//在11.059MHz的晶振条件下调用本函数需要24μs,然后每次计数需16μs

{

ints。

for(s=0。

s

s++>。

}

等待繁忙标志

voidwait(void>

{

P0=0xFF。

do

{

RS=0。

RW=1。

EN=0。

EN=1。

}while(BUSY==1>。

EN=0。

}

写数据

voidw_dat(uint8dat>

{

wait(>。

EN=0。

P0=dat。

RS=1。

RW=0。

EN=1。

EN=0。

}

写命令

voidw_cmd(uint8cmd>

{

wait(>。

EN=0。

P0=cmd。

RS=0。

RW=0。

EN=1。

EN=0。

}

发送字符串到LCD

voidw_string(uint8addr_start,uint8*p>

{

w_cmd(addr_start>。

while(*p!

='\0'>

{

w_dat(*p++>。

}

}

初始化1602

voidInit_LCD1602(void>

{

w_cmd(0x38>。

//16*2显示,5*7点阵,8位数据接口

w_cmd(0x0c>。

//显示器开、光标开、光标允许闪烁

w_cmd(0x06>。

//文字不动,光标自动右移

w_cmd(0x01>。

//清屏

}

ucharReset(>//完成单总线的复位操作。

{

uchard。

DQ=0。

//将DQ线拉低

Delayus(29>。

//保持480μs.复位时间为480μs,因此延时时间为(480-24>/16=28.5,取29μs。

DQ=1。

//DQ返回高电平

Delayus(3>。

//等待存在脉冲.经过70μs之后检测存在脉冲,因此延时时间为(70-24>/16=2.875,取3μs。

d=DQ。

//获得存在信号

Delayus(25>。

//等待时间隙结束

return(d>。

//返回存在信号,0=器件存在,1=无器件

}

voidwrite_bit(ucharbitval>//向单总线写入1位值:

bitval

{

DQ=0。

//将DQ拉低开始写时间隙

if(bitval==1>

DQ=1。

//如果写1,DQ返回高电平

Delayus(5>。

//在时间隙内保持电平值,

DQ=1。

//Delayus函数每次循环延时16μs,因此Delayus(5>=5*16+24=104μs

}

voidds18write_byte(charval>//向单总线写入一个字节值:

val

{

uchari。

uchartemp。

for(i=0。

i<8。

i++>//写入字节,每次写入一位

{

temp=val>>i。

temp&=0x01。

write_bit(temp>。

}

Delayus(5>。

}

ucharread_bit(>//从单总线上读取一位信号,所需延时时间为15μs,因此无法调用前面定义

{//的Delayus(>函数,而采用一个for(>循环来实现延时。

uchari。

DQ=0。

//将DQ拉低开始读时间隙

DQ=1。

//然后返回高电平

for(i=0。

i<3。

i++>。

//延时15μs

return(DQ>。

//返回DQ线上的电平值

}

uchards18read_byte(>//从单总线读取一个字节的值

{

uchari。

ucharvalue=0。

for(i=0。

i<8。

i++>

{//读取字节,每次读取一个字节

if(read_bit(>>

value|=0x01<

//然后将其左移

Delayus(6>。

}

return(value>。

}

intReadtemperature(>//如果单总线节点上只有一个器件则可以直接掉用本函数。

如果节点上有多个器

{//件,为了避免数据冲突,应使用MatchROM函数来选中特定器件。

uchartemp_d,temp_g,k,get[2],temp。

Reset(>。

ds18write_byte(0xcc>。

//跳过ROM

ds18write_byte(0x44>。

//启动温度转换

Delayus(5>。

Reset(>。

ds18write_byte(0xcc>。

//跳过ROM

ds18write_byte(0xbe>。

//读暂存器

for(k=0。

k<2。

k++>

{

get[k]=ds18read_byte(>。

}

temp_d=get[0]。

//低位

temp_g=get[1]。

//高位

if((temp_g&0xf0>==0xf0>//正负号判断

{

temp_d=~temp_d。

if(temp_d==0xff>//保证-48<1111110100000000)、-32和-16显示正常

{

temp_d=temp_d+0x01。

//00000000

temp_g=~temp_g。

//00000010

temp_g=temp_g+0x01。

//00000011

}

else

{

temp_d=temp_d+0x01。

temp_g=~temp_g。

}

w_cmd(0xc5>。

w_dat(Xsw[temp_d&0x0f]>。

//查表得小数位的值

temp=((temp_d&0xf0>>>4>|((temp_g&0x0f><<4>。

w_cmd(0xc1>。

w_dat(0x2d>。

//负号

}

else//正数

{

w_cmd(0xc5>。

w_dat(Xsw[temp_d&0x0f]>。

//查表得小数位的值

temp=((temp_d&0xf0>>>4>|((temp_g&0x0f><<4>。

w_cmd(0xc1>。

w_dat(Bw[temp/100]>。

}

returntemp。

}

main(>

{

Init_LCD1602(>。

w_string(0x80,word1>。

while(1>

{

wendu=Readtemperature(>。

temp_g=wendu%100/10+'0'。

//这里要特别注意啊少了%100就差很多

temp_d=wendu%10+'0'。

w_cmd(0xc2>。

delay(2>。

w_dat(temp_g>。

delay(2>。

w_dat(temp_d>。

delay(2>。

w_cmd(0xc4>。

delay(2>。

w_dat(0x2e>。

//小数点

delay(2>。

w_cmd(0xc6>。

delay(2>。

w_dat(0xdf>。

//温度符号

delay(2>。

w_dat(0x43>。

 

电气信息工程系单片机课程设计成绩评定表

专业:

电子信息工程班级:

电子10—2学号:

10043225姓名:

赵鑫

课题名称

 

设计任务与要求

1.基本要求

<1)采用DS18B20作为温度传感器进行温度检测

<2)对采集温度进行显示<显示温度分辨率0.1℃)

<3)采集温度数值应采用数字滤波措施,保证显示数据稳定

<4)显示数据,无数据位必须消隐。

 

2.设计步骤

(1>使用Proteus按设计要求绘制电路图。

(2>按要求编写相应程序。

(3>使用Proteus仿真程序,对程序进行调试。

(4>撰写课程设计报告

 

指导教师评语

 

成绩:

指导教师:

时间:

年月日

 

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2