1、学年论文(课程论文、课程设计)题 目:DS18B20 温度传感器,蜂鸣器实验姓 名学 号:所在学院:专业年级:2015 年 9 月 21 日目录1 绪 论 1.1 本论文的目的 .1.2 关于 AT89C52 单片机基本概念 .1.3 使用的软件介绍 .1.4 本论文的主要内容 .2 基于单片机的 DS18B20温度传感器用数码管显示温度 .2.1 DS18B20 传感器介绍2.2 数码管显示数字的基本原理2.3 电路的连接方法 .2.4 系统功能方框图 .2.系统的程序 .3 单片机蜂鸣器实验 .3.1 蜂鸣器介绍 .3.2 系统功能图3.3 电路的连接方法 .3.4 系统的基本设计方法 .
2、3.5 系统 C程序 . 总结 1.绪 论1.1 本论文的背景随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便是不可否定的,各种数字系统的应用也使人们的生活更加舒适。数字化控制、智能控制为现代人的工作、生活、科研等方面带来方便。其中数字温度计就是一个典型的例子。数字温度计与传统的温度计相比,具有读数方便、测温范围广、测温精确、功能多样话等优点。其主要用于对测温要求准确度比较高的场所,或科研实验室使用,该设计使用 STC89C52 单片机作控制器,数字温度传感器 DS18B20 测量温度,单片机接受传感器输出,经处理用 LED 数码管实现温度值显示。1.2 关于
3、 AT89C52 单片机基本概念1) 、何谓单片机 一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制) 、RAM(数据存储) 、ROM(程序存储) 、输入/输出设备(例如:串行口、并行输出口等) 。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。 2)、MCS51 单片机和 8051、8031、89C51 等的关系我们平常老是讲 8051,又有什么8031,现在又有 89C51,它们之间究竟是什么关系? MCS51 是指由美国 INTEL 公司(对了,就是大名鼎鼎的 INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如 8031,80
4、51,8751,8032,8052,8752 等,其中 8051 是最早最典型的产品,该系列其它单片机都是在 8051 的基础上进行功能的增、减、改变而来的,所以人们习惯于用 8051 来称呼 MCS51 系列单片机,而 8031 是前些年在我国最流行的单片机,所以很多场合会看到 8031 的名称。1.3 使用的软件介绍单片机的程序设计需要在特定的编译器中进行。编译器完成对程序的编译、连接等工作并且最终生成可执行文件(.hex 文件) 。对单片机程序的开发,一般采用 Keil 公司的 Vision 系列的集成开发环境。 Vision 开发工具当前的最高版本是 Vision4,它支持汇编语言以及
5、 C51 语言的程序设计。本章主要介绍 Vision4 集成开发环境,以及如何运用 Vision4 集成开发环境进行单片机程序设计与仿真。Keil Vision 系列是非常优秀的编译器,受到广大单片机设计者的广泛使用。其特点如下: 支持汇编语言、C 语言等多种单片机设计语言; 可视化的文件管理,界面友好; 支持丰富的产品线,除了 51 以及兼容的单片机内核外,还增加了对 ARM 核产品的支持; 具有完备的编译连接工具; 具备丰富的仿真调试功能,可以仿真并口、串口、定时/计数器、中断、D/A 和A/D 资源; 内嵌 RTX-51 实时多任务操作系统; 支持在一个工作空间中进行多项目的程序设计;
6、支持多极代码优化1.4 本论文的主要内容基于单片机的 DS18B20 数字温度计设计。单片机蜂鸣器设计。更理解单片机怎样设计电路,理解单片机怎样用,为毕业设计建立了一个基础。2 基于单片机的 DS18B20温度传感器用数码管显示温度2.1 DS18B20 传感器介绍独特的单线接口仅需一个端口引脚进行通信简单的多点分布应用无需外部器件可通过数据线供电测温范围-55+125,以 0.5递增可编程的分辨率为 912 位,对应的可分辨温度分别为 0.5、0.25、0.125和 0.0625应用包括温度控制、工业系统、消费品、温度计和任何热感测系统负压特性:电源极性接反时,传感器不会因发热而烧毁,但不能
7、正常工作.2. DS18B20 外形及引脚说明图 3 DS18B20 外形及引脚GND:地DQ:单线运用的数据输入/输出引脚VD:可选的电源引脚2.2 数码管显示数字的工作原理介绍 数码管是一种常用数字显示原件,其内部是由多个并联的Led 灯构成。按照连接led 的公共端的不同可以分为:共阴极数码管、共阳极数码管两种。数码管按照顺序依次排列,有数学里个位、十位、百位、千位,对应与每一位数码管就有数码管的为选概念,共阳极数码管高电平选通,共阴极数码管低电平选通;对于单个的数码管每一个笔划,国际上有统一的规范,按顺时针顺序排列:a、b、c、d、e、f、g、h 是数码管的段信号。由此差别就晓得数码管
8、的单片机控制方法了。图4.13 数码管示意图首先使用Proteus 绘制数码管显示电路,先添加数码管原件,此处绘制电路选用共阴极数码管。单机键盘P的快捷键调出原件对话框,输入7seg 就可以看到:6 位的数码管单个数码管的形状如上图所示:内部由8 个LED 灯构成,其中HGFEDCBA为段码,由高到低的顺序排列。由于我们使用的是共阴数码管,把段码相应的位置2,同时把公共端(又称位选端)置0,相应的数码管发光。如上显示数字“6” ,这相应的段码为0x7d,即二进制01111101.共阴数码管段码显示0F 列举如下:0x3f,0x06,0x5b,0x4f,0x66,/040x6d,0x7d,0x0
9、7,0x7f,0x6f,/590x77,0x7c,0x39,0x5e,0x79,/AE2.3电路的连接方法VCC链接到单片机的VCC端口,把GND端口链接到端口,然后端口链接到单片机的.端口。然后把单片机是上面的口链接到数码管,按循序链接到别的。2.4 系统功能方框图本方案设计的系统由单片机系统、温度传感器、数码管显示模块、其总体架构如下图:图1 系统总体方框图系统的程序DS18B20 单片机测温度系统程序#include “reg52.h“#include “intrins.h“#define SkipRom 0xcc#define ConvertTemperature 0x44#defin
10、e ReadScratchpad 0xbesbit DQ=P27;unsigned int buffer6;unsigned char code buff12=0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0x40,0x00单片机测温电路时钟、复位电路显示电路驱动电路;/数字 09 及“EP=OC“共阴数码管代码 /*延时*/函数名称:void One_Wire_Delay(unsigned char delay_time)/函数功能:延时/函数参数:delay_time/*void One_Wire_Delay(unsigned char
11、 delay_time) while(delay_time)delay_time-;/延时时间:=(8+delay_time*6)us;/*初始化*/函数名称:void init_ds18b20(void)/函数功能:初始化 DS18B20/函数参数:无/*void init_ds18b20(void)DQ=0;/复位信号One_Wire_Delay(50);/延时 600usDQ=1;One_Wire_Delay(4);/延时 30uswhile(DQ=1);One_Wire_Delay(52);/延时 300usDQ=1;_nop_();/*写一个字节*/函数名称:void wr_byte
12、(unsigned int wdata)/函数功能:DS18B20 写一个字节/函数参数:wdata/*void wr_byte(unsigned int wdata)unsigned int n;for(n=0;n1;DQ=1;_nop_();One_Wire_Delay(5);/延时 128us /*读一个字节*/函数名称:unsigned int rd_byte(void)/函数功能:DS18B20 读一个字节/函数参数:wdata/*unsigned int rd_byte(void)unsigned int m,bb=0;bit b;for(m=0;m1) flag_1=1;else
13、 flag_1=0;if(flag_1)msb=msb;lsb=lsb+1;t1=(msb4);/整数部分t2=(lsb/if(flag)/ t1=t1;/ t2=t2+1;/t2=t2*0.06*100;if(flag_1)buffer0=10;/负数else buffer0=11;buffer1=t1/100;buffer2=(t1/10)%10;buffer3=t1%10;buffer4=t2/1000;buffer5=(t2%1000)/100;/buffer6=(t2%100)/10;/buffer7=t2%10;/*/*ds18b20 显示*/函数名称:void display(v
14、oid)/函数功能:DS18B20 显示/函数参数:无/*void display(void)unsigned int j,b=0xdf,k;for(j=0;j1)|0x80;for(k=0;k#define uchar unsigned charsbit beep=P04;uchar timer0h,timer0l,time;code uchar sszymmh=6,2,3,5,2,1,3,2,2,1,3,2,6,2,1,5,2,1,6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,
15、2,2,5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,蜂鸣器电路时钟,复位电路单片机蜂鸣器电路的喇叭出歌声2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0;code uchar FREQH=0xf2,0xf3,0xf5,0xf6,0xf7,0xf8,0xf9,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff;code uchar FREQL=0x42,0xC1,0x17,0xB6,0xD
16、0,0xD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16;void delay(uchar t)uchar t1;unsigned long t2;for(t1=0;t1t;t1+)for(t2=0;t28000;t2+);TR0=0;void song()TH0=timer0h;TL0=timer0l;TR0=1;delay(time);void main (void)uchar k,i;TMOD=1;EA=1;ET0=1;while(1)i=0;while(i100)k=sszymmhi+7*sszymmhi+1-1;timer0h=FREQHk;timer0l=FREQLk;time=sszymmhi+2;i=i+3;song();void t0int()interrupt 1TR0=0;beep=!beep;TH0=timer0h;TL0=timer0l;TR0=1;院(部)或教研室意见 学院或教研室主任:年 月 日