微机原理与单片机与接口技术课程设计_第1页
微机原理与单片机与接口技术课程设计_第2页
微机原理与单片机与接口技术课程设计_第3页
微机原理与单片机与接口技术课程设计_第4页
微机原理与单片机与接口技术课程设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南理工富塞;

《微机原理与单片机接口技术》课程设计

实时测温报警系统

姓名:

学号:

专业班级:电信13-4

指导老师:

所在学院:电气工程与自动化学院

2016年月日

摘要

本设计是•款基于单片机的实时温度测量装置,其中单片是数据处理的核心,用来接

受和处理温度传感器测的数据。用温度传感器来获得采样的温度,单片机将得到的温度

数据处理后,通过液晶显示屏来显示,关于时间显示方面是通过单片机的定时中断来实

现的,并通过按键来调整显示时间。本文简要介绍基于单片机的测温系统的设计原理.,

并依据系统的原理制作出实物,能够简洁的实现温度的测量。本测温系统主要有以下几

个模块构成:测温模块、显示模块、按键限制模块、时间显示模块以及报警模块等儿个

模块组成。测温模块主体是一个测温传感器DS18B20来进行温度的测量,温度报警模块

是一个鸣蜂器,显示模块是通过液晶显示屏1602来进行温度和时间的显示,按键限制是

由触电开关跟单片机构成,时间显示模块是单片机的定时中断跟1602液晶显示屏构成。

本设计的核心是型号为STC12C5A60S2的单片机。本系统的工作先由DSI8B20测量温

度,经过DS18B20内部的转换电路得到一组12位精度为0.0625的温度数值通过一根单

数据线将数据交给单片机,单片机处理数据后将最终温度显示在液晶显示屏上,当温度

超过设定值的时候鸣蜂器鸣笛报警,单片机内部的定时中断程序将时间也同一E寸间显示

在液晶显示屏上,通过按键可以暂停时间和温度测量的刷新,来调整时间。本设计最终

做得的实物能够进行()〜125(的测量,24小时以内的时间显示以刚好间调整。

关键字:单片机技术、温度采集、液晶1602显示。

书目

1、概述................................................................4

1.1设计背景及意义.................................................4

1.2设计目的.......................................................4

1.3温度测试报警系统完成的功能....................................4

2、系统总体方案及硬件计...............................................5

2.1总体方案设计...................................................5

2.2硬件设计.......................................................5

3、软件设计...........................................................II

3.1DS18B20程序编架...............................................11

3.21602液晶显不程序编写框架......................................11

3.3时间及按键程序编写框架.........................................11

3.4总程序编写框架.................................................11

4、软件仿真...........................................................12

5、课程设计体会.......................................................13

参考文献

附1:源程序代码

附2:系统原理图

1概述

1.1设计背景及意义

温度是生产过程和科学试验中普遍而且重要的物理参数,随着社会的发展,科技

的进步,以及测温仪器在各个领域的应用,智能化已是现代温度限制系统发展的主流方

向。特殊是近年来,温度限制系统已应用到人们生活的各个方面,但温度限制始终是一

个未开发的领域,却又是与人们休戚相关的一个实际问题。针对这种实际状况,设计一

个温度限制系统,具有广泛的应用前景与实际意义。

温度是一个重要的物理量,它反映了物体冷热的程度,与自然界中的各种物理和化

学过程相联系。在工、农业生产和日常生活中,各个环节都与温度紧密相联,温度的精

确监测及限制占据着极其重要地位。比如,发电厂锅炉的温度必需限制在肯定的范围之

内;很多化学反应的工艺过程必需在适当的温度下才能正常进行等。没有合适的温度环

境,很多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保

障。可见,温度的测量和限制是特别重要的。

随着电子技术和微型计算机的快速发展,单片机在电子产品中的应用已经越来越广

泛。利用单片机对温度进行限制的技术也随之而生,并日益发展和完善,且越来越显示

出它的优越性。

1.2设计目的

本设计的内容是温度测试报警系统,限制对象是温度。温度限制在日常生活及工业领

域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温度限制。而以往温度限制是

由人工完成的而且不够重视,其实在很多场所温度都须要监控以防止发生意外。针对此问

题,本系统设计的目的是实现一种可连续高精度调温的温度测试报警系统,它应用广泛,

功能强大,小巧美观,便于携带,是一款既好用又廉价的限制系统.

1.3温度测试报警系统完成的功能

本设计是对温度进行实时监测与报警,设计的温度报警系统实现了基本的温度测

试和报警功能:当温度超过设定的温度阀值的时候鸣蜂器发声来进行报警,同时通过1602

液晶显示屏显示当时的时间跟温度便于对温度的管理。

2系统总体方案及硬件设计

2.1总体方案设计

考虑运用温度传感器,结合单片机电路设计,采纳一只DS18B20温度传感器,干脆

读取被测温度值,之后进行转换,依次完成设计要求。

在本系统的电路设计方框图如图1.1所示,它由三部分组成:①限制部分主芯片采纳单

片机STC12C5160S2;②显示部分采纳液晶屏1602进行显示;③温度采集部分采纳

DS18B20温度传感器。

图2—1温度计电路总体设计方案

2.2硬件设计

1.限制部分

单片机STC12C516OS2具有低电压供电和体积小等特点,很适合便携手持式产品的设

计运用,系统应用三节电池供电。

2.显示部分

显示电路采纳1602液晶显示屏。

3.温度采集部分

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传

感器,与传统的热敏电阻等测温元件相比,它能干脆读出被测温。这一部分主要完成对温

度信号的采集和转换工作,由DS18B2O数字温度传感器及其与单片机的接口部分组成。数

字温度传感器DS18B20把采集到的温度通过数据引脚传到单片机的P1.3口,单片机接受

温度并存储。此部分只用到DS18B2O和单片机,硬件很简沽

1)DS18B20的性能特点如下⑼:

1)独特的单线接口仅须要•个端口引脚进行通信;

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

3)无须外部器件;

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

5)零待机功耗;

6)温度以3位数字显示:

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

8)报警搜寻吩咐识别并标记超过程序限定温度(温度报警条件)的器件;

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

(2)DS18B20的内部结构

DS18B20采纳3脚PR-35封装,如图1.2所示;DS18B20的内部结构,如图3所

不O

DALLAS

18B20

图2—2DS18B20封装

(3)DS18B20内部结构主要由四部分组成⑸:

1)64位光刻ROM。起先8位是产品类型的编号,接着是每个器件的惟一的序号,共

有48位,最终8位是前56位的CRC校验码,这也是多个DS18B20可以采纳一线进行通

信的缘由“纥64位闪速ROM的结构如下.

表2-]ROM结构

8b检验CRC48b序列号8b工厂代码(10H)

MSBLSBMSBLSBMSBLSB

图2—3DS18B20内部结构

2)非挥发的温度报警触发器TH和TL,可通过软件写入用户报警上下限值。

3)高速暂存存储,可以设置DS18B20温度转换的精度。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电

擦除的E2PRAMO高速暂存RAM的结构为8字节的存储器,结构如图1.3所示。头2个

字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位

时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换辨别率。

DS18B20工作时寄存器中的辨别率转换为相应精度的温度数值。它的内部存储器结构和字

节定义如图1.3所示。低5位始终为1,TM是工作模式位,用于设置DS18B20在工作模

式还是在测试模式。

表2-2DS18B20内部存储器结构

ByteO温度剜量值LSB(50H)

Bytel温度刎量值MSB(50H)E2PROM

Byte2TH高温寄存器G——9TH高温寄存器

Byte3TL低温寄存器(———TL低温寄存器

Bytc4配位寄存器V——今配位寄存器

Bytc5预留(FFH)

Byte6预留(0CH)

Byte7预留(IOH)

Byte8循月、兀余码校验(CRC)

2)非挥发的温度报警触发器TH和TL,可通过软件写入用户报警上下限值。

3)高速暂存存储,可以设置DS18B20温度转换的精度。

DS18B20出厂时该位被设置为(),用户要去改动,R1和R0确定温度转换的精

度位数,来设置辨别率,如图1.4。

图2-3DS18B20字节定义

TMR1R011111

由表1.1可见,辨别率越高,所须要的温度数据转换时间越长。因此,在实

际应用中要将辨别率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读

出前面全部8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

当DS18B20接收到温度转换吩咐后,起先启动转换。转换完成后的温度值

就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。

单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式

以0.0625℃/LSB形式表示。

当符号位S=0时,表示测得的温度值为正值,可以干脆将二进制位转换为

十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,

再计算十进制数值。表L2是一部分温度值对应的二进制温度数据⑹。

表2-4DS18B20温度转换时辰表

R1R0辨别率/位温度最大转向时间/ms

00993.75

011()187.5

1011375

1112750

表2—5一部分温度对应值表

温度/℃二进制表示十六进制表示

+125000001111101000007D0H

+85()000010101010000O55OH

+25.062500000001100100000191H

+10.125()00()()()(X)1010000100A2H

+0.500000000000000100008H

000000000000010000000H

-0.5111111111111()()()()FFF8H

续表2—5

-10.1251111111101011110FF5EH

-25.06251111111()()11()1111FE6FH

-551111110010010000FC90H

4)CRC的产生

在64bROM的最高有效字节中存储有循环冗余校验码(CRC)。主机依据

ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以推

断主机收到的ROM数据是否正确。另外,由于DS18B20单线通信功能是分时

完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种

操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)一发ROM功能

吩咐一发存储器操作吩咐一处理数。

4.液晶显示部分

1.管脚:

1602共16个管脚,但是编程用到的主要管脚不过三个,分别为:RS(数据吩咐

选择端),R/W(读写选择端),E(使能信号);以后编程便主要围绕这三个管

脚绽开进行初始化,写吩咐,写数据。

以下详细阐述这三个管脚:

RS为寄存器选择,高电平选择数据寄存器,低电平选择指令寄存器。

R/W为读写选择,高电平进行读操作,低电平进行写操作。

E端为使能端,后面和时序联系在一起。除此外,D0〜D7分别为8位双向数据

线。

2.指令集:

LCD_1602初始化指令小结:

0x38设置16*2显示,5*7点阵,8位数据接口

0x01清屏

OxOF开显示,显示光标,光标闪耀

0x08只开显示

OxOe开显示,显示光标,光标不闪耀

0x0c开显示,不显示光标

0x06地址加I,当写入数据的时候光标右移

0x02地址计数器AC=0;(此时地址为0x80)光标归原点,但是DDRAM中

断内容不变

0x18光标和显示一起向左移动

3.显示地址:

LCD1602内部RAM显示缓冲区地址的映射图,0()〜0F、40〜4F分别对应

LCD1602的上下两行的每一个字符,只要往对应的RAM地址写入要显示字符

的ASCH代码,就可以显示出来。

3软件设计

3.1DS18B20程序编写框架

查询DS18B20的技术手册,通过技术手册上的时序图编写初始化指令、写指

令、读指令程序,最终编写一个获得温度的函数,通过函数返回值将测的数据传

递给单片机。

3.21602液晶显不程序编写框架

与DSI8B20编写的过程大体相同,最终也将液晶显示程序封装成一个无返回

值函数。

3.3时间及按键程序编写框架

时间是通过单片机的定时中断来获得的,按键是采纳独立按键通过P3'2,

P3,3,P3'4来进行限制的。

3.4总程序编写框架

将键盘函数跟报警程序放入主函数中,而1602显示程序和DS18B20程序放

在定时中断程序中,来实现程序的隔离,放置按键函数影响显示和测温程序的时

序,来造成程序运行混乱。

4软件仿真

M

on

&

&

*二

068

d*6■3s608*6&>w-

0oO00o00634J

0。0000o4

0oO00o00O000

0—

0。0000O0oQR

0o000o0000000

。000oJ

o0#00o0000O000

Q・00o0O

o0O00o>0000Q0o0QJ:1.

000O000000G0C?

0oO00?o9.?

0f0^0o204C

0^£0?

0、'-0o

0?o

5课程设计体会

通过本次课程设计使我对单片机的相识跟进一步,让我了解学习了单片机

的扩展功能,不再局限于以前单片机只能做一个流水灯或者数码显示的思想。

本次设计遇到了很多困难,一个最大的困难就是关于DS18B20的时序编写,由

于不知到C语言程序在单片机中的运行时间,所以在编写时序的时候出了很多

问题,最终经过查资料和通过keil软件的指令运行时间查询功能,最终才编写

出正确的时序程序。另一个困难是各个程序模块的协调运行问题,单个的模块

能够正常运行,但是多个放在一起就会出现程序运行错误,经过努力最终找到

是因为多个模块的放在一起会影响各自的时序才造成程序错误,最终我通过中

断函数将各个模块进行隔离完成了最终的设计。这次的设计,虽然困难重重,

但是最终当系统能够正常工作的时候,我感到无比的喜悦。

参考文献

《微机原理与单片机接口技术》

《C语言程序设计》

附1:源程序代码

/******************************************

用1602实现数字表显示、调整时间功能

能作为50年限的万年历

******************************************/

#includc<stcl2.h>

#includc<string.h>

#include<intrins.h>

#includc<ds18b2O.h>

#defineT25.6

sbitRS=P1AO;

sbitRW=P1A1;

sbitE=PlA2;

sbitkeyl=P3A2;

sbitkey2=P3A3;

sbitkey3=P3A4;

sbitbeer=P3Al;

□charcodetableI[]="T:00.0";

ucharcodetable2[]="time:00:00:00";

ucharcodetable3[]="ERROR

ucharcodenumber[]={0x30,0x31,0x32,0x33,0x34,

0x35,0x36,0x37,0x38,0x39,Oxdf,0x43};

uchartt(),niiao,shi,fen,kI,k2,k3;

uinltemperature;

voiddelayl(uintz)〃延时程序

{

uintx,y;

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

for(y=110;y>O;y");

I

voidlcdwrite_com(ucharcom)//led写吩咐

{

RW=0;

RS=0;

E=0;

delay1(1);

E=l;

delay1(5);

PO=com;

delay1(5);

E=0;

)

voidlcdwrite_dat(uchardat)//led写数据

(

RW=0;

RS=1;

E=0;

delay1(1);

E=l;

delay1(5);

PO=dat;

delay1(5);

E=0;

I

voidggnl(ucharm)〃有关k2键的函数1,时间限制函数

(

Icdwrite_com(0x38);

delay1(5);

lcdwri(e_com(0x0f):

delay1(5);

lcdwrite_corn(0x80+rn);

delay1(5);

}

voidmfs(uchars,ucharm)〃时分秒显示子程序

{

ucharsl,s2;

lcdwriie_coni(()x80+m);

delay1(5);

sl=s/IO;

s2=s%10;

lcdwrite_dat(number[slI);

delay1(5);

lcdwrite_dat(number[s2J);

delay1(5);

voidmfs1(uin(s,ucharm)〃温度显示程序

□charsl,s2,s3;

Icdwrite_com(0x80+0x40+m);

delay1(5);

sl=s/100;

s2=s%100/10;

s3=s%10;

lcdwrile_dat(nurnber[s1J);

delay1(5);

lcdwritc_datinumbcr[s2]);

delay1(5);

Icdwrite_dat(0x2e);

delay1(5);

lcdwrite_dat(number[s3]);

delay1(5);

)

voidscankeyO〃独立键盘

(

if(kcyl==O)//kl键是暂停并进入功能设置

{

delay1(10);

if(key1==())

(

k2=0;

if(kl==O)

{

kl=l;

TR0=0;

)

else

(

kl=0;

TR0=l;

lcdwrite_com(Ox()c);

delayI(10);

while(!keyl);

)

if(kl==l)//k2键是位选功能键

(

if(kcy2==0)

(

delay1(10);

if(key2==0)

(

k2++;

if(k2==l)

ggnl(12);

if(k2==2)

ggnl(9);

if(k2==3)

ggnl(6);

if(k2==4)

k2=0;

)

while。key2);

)

if(k2)//k3键是加一

(

if(key3==0)

(

delay1(10);

if(key3==0)

{

if(k2==l)

(

miao++;

if(miao==60)

{

miao=0;

}

mfs(miao.OxOc);

Icdwritc_com(0x80+0x0b);

if(k2==2)

{

fen++;

if(fen==60)

{

ten=O;

)

mfs(fen,0x09);

Icdwrite_com(0x80+0x08);

}

if(k2==3)

(

shi++;

if(shi==24)

(

shi=O;

}

mfs(shi,0x06);

Icdwrite_com(0x80+0x05);

}

I

while(!key3);

)

voidinii()//程序初始化

□char

lcdwrite_com(0x38);〃显示模式设置//

delay1(5);

lcdwritc_com(0x08);〃显小关闭

delay1(5);

Icdwrite_com(0x01);〃显示清屏

delay1(5);

lcdwrite_com(Ox()c);〃显示开及光标设置

delay1(5);

lcdwrite_com(0x06);〃显示光标移动设置//

delay1(5);

tl=strlen(table2);

for(i=0;i<tl;i++)

I

lcdwrite_dat(table2fi]);

delay1(20);

I

Icdwritc_com(0x80+0x40);

delay1(5);

t2=strlen(tablel);

for(i=0;i<t2;i++)

{

lcdwrite_dat(tablel[i]);

delay1(20);

}

lcdwrite_dat(Oxdf);〃显示温度的单位

delay1(5);

lcdwrite_da((0x43):

delay1(5);

EA=1;

ET0=l;

TR0=l;

TMOD=Ox()l;

TH0=0x4c;

TL0=0X00;

I

voidmain()

(

inil();

while(l)

{

scankeyO;

if(temperalure/l0>T)

bccr=O;

else

{

beer=1;

voidtimcO()interrupt1〃秒表计数

{

TH0=0x4c;

TL0=0X00;

ttO++;

if(tt0==20)

(

miao++;

t(0=0;

temperature=Get_Tmp();

nifs1(temperature,4);

}

if(miao<60)

(

mfs(miao,0X0C);

)

else

(

miao=0:

fen++;

I

if(fcn<60)

mfs(fen,9);

else

fen=O;

shi++;

}

if(shi<24)

(

mfs(shi,6);

)

else

(

shi=O;

}

}

//#include<stcl2.h>

//#include<intrins.h>

〃数据口defineinterface

sbitDQ=P1A3;〃18b20接口

uintwendu;〃温度值variableofwenduerature

/*************精确延时函数*****************/

voidDelay(ucharaLbl,cI)

(

unsignedchara.b.c;

for(a=0;a<al;a++)

for(b=0;b<b1;b++)

for(c=0;c<cI;c++);

|

/*****************DS18B20******************/

voidInit_Dsl8b20(void)//DS18B20初始化sendresetandinitializationcommand

{

EA=0;

DQ=1;//DQ复位,不要也可行。

Delay(1,1,1);〃稍做延时IOus

DQ=0;〃单片机拉低总线

Dclay(6,l,63);//600us〃精确延时,维持至少480us

//Dclay(lJ,15);//20us

DQ=1;〃释放总线,即拉高了总线

Delay(5,L63);//500us〃此处延时有足够,确保能让DS18B20发出存在脉

冲。

EA=1;

I

ucharRead_One_Byie()//读取一,字节的数据readabytedate

//读数据时,数据以字节的最低有效位先从总线移出

uchari=0;

uchardat;

EA=0;

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

DQ=0;//将总线拉低,要在lus之后释放总线

〃单片机要在此下降沿后的15us内读数据才会有效。

_nop_();〃至少维持了lus,表示读时序起先

dal»=1;//让从总线上读到的位数据,依次从高位移动到低位。

DQ=1;〃释放总线,此后DS18B20会限制总线,把数据传输到总线

Delay(UJ):〃延时10us.此处参照举荐的读时序图,尽量把限制器采样时间放

到读时序后的15us内的最终部分

if(DQ)〃限制器进行采样

/

1

dat|=0x80:〃若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不

进行处理,保持为0

Delay。,1,8);//20us〃此延时不能少,确保读时序的长度60us。

EA=I;

)

return(dat);

}

voidWrite_One_Byte(uchardat)

uchari=0;

EA=O;

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

DQ=0;〃拉低总线

_nop_();〃至少维持了lus,表示写时序(包括写0时序或写1时

序)起先

DQ=dat&OxOl;〃从字节的最低位起先传输

〃指令dai的最低位给予给总线,必需在拉低总线后的

I5us内,

〃因为15us后DS18B20会对总线采样。

Delay。,1,15);〃必需让写时序持续至少60us

DQ=1;〃写完后,必需释放总线,

dat»=1;

Delay(IJJ);

EA=O;

}

uintGct_Tmp()〃获得温度getthewcnducraturc

floattt;

□chara,b;

Ini5sl8b20();〃初始化

Write_One_Byte(Oxcc);//忽视ROM指令

Write_One_Byte(Ox44);〃温度转换指令

Init_Dsl8b20();〃初始化

Write_One_Byte(Oxcc);//忽视ROM指令

Write_One_Byte(Oxbc);〃读暂存器指令

a=Read_One_By(e();〃读取到的第一个字节为温度LSB

b=Read_One_Byte();〃读取到的第一个字节为温度MSB

wendu=b;〃先把高八位有效数据赋于wendu

wendu«=8;〃把以上8位数据从wendu低八位移到高八位

wendu=wcndu|a;〃两字节合成一个整型变量

tt=wendu*0.0625;〃得到真实十进制温度值

〃因为DS18B20可以精确到0.0625度

〃所以读回数据的最低位代表的是0.0625度

wendu=tt*10+0.5;〃放大十倍

〃这样做的目的将小数点后第一位也转换为可显示数字

〃同时进行一个四舍五入操作。

returnwendu;

附2:系统原理图

UI

12

34■P1.0VCC

f:t56■PI.IPO.O

78•PI.2PO.I

•P1.3P0.2

慝910

112•Pl.4P0.3

4,Pl.5P0.4

3—

t1516-PI.6P0.5

1718、Pl.7P0.6

1920•RSTVPD_P0.7

22■PVOR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论