当前位置:文档之家› 单片机课程设计报告80441144

单片机课程设计报告80441144

(此文档为word格式,下载后您可任意编辑修改!)沈阳工程学院课程设计任务书课程设计题目:多功能温度巡检仪程序设计系别班级学生姓名学号指导教师吕勇军职称教授课程设计进行地点:任务下达时间:15年1月12日起止日期:15年1月12日起——至15年1月23日止系主任年月日批准1.设计主要内容及要求;编写多功能温度巡检仪程序。

要求:1)多路温度测量和显示。

2)可以设置正常温度范围,越限报警。

2.对设计论文撰写内容、格式、字数的要求;(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。

(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。

课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。

(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。

3.时间进度安排;中文摘要随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度测量就是一个典型的例子。

温度测量系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等。

但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。

本设计以C8051F020芯片为核心,辅以必要的外围电路,设计了一个简易的多路温度巡检仪。

在硬件方面,除了CPU外,系统采用DS18B20数字温度传感器测量温度,采用1602液晶显示屏显示当前温度。

然后通过三个独立按键来设置一个正常温度的范围的最小值和最大值,当温度不在设置的正常温度范围内,用于报警的蜂鸣器就会发出响声。

在软件反面,采用C语言设计,系统能够准确测量三路温度并且显示,并且具有调整温度范围和报警的功能。

此系统严格按照要求设计,最终达到预期的效果,能够测量和显示多路温度,并且可以设置正常的温度范围,超过范围具有报警功能。

是一次比较成功的设计。

关键字: 单片机测温显示报警1课程设计要求1.1设计主要内容及要求编写多功能时钟程序要求:1)多路温度测量和显示。

2)可以设置正常温度范围,越限报警。

1.2 对设计论文撰写内容、格式及字数的要求(1).课程设计论文是体现和总结课程设计成果的载体,一般不应少于3000字。

(2).学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。

课程设计论文的结构及各部分内容要求可参照《沈阳工程学院毕业设计(论文)撰写规范》执行。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

(3).论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求进行打印。

(4). 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。

1.3 时间进度安排3.时间进度安排;2 课程设计思路本设计主要介绍单片机编程来实现系统功能,本设计由C8051F020芯片为主要核心,采用DS18B20数字温度传感器测量当前温度,采用1602液晶显示屏显示当前温度。

正常温度的设置采用三个按键,其中一个功能按键,用来选择设置后温度最小值和温度最大值,另外两个按键分别是设置温度时用来加减温度。

2.1 测温和显示数字温度传感器DS18B20,因其内部集成了AD转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。

数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。

DS18B20采用单总线的方式和单片机进行通信,通过编程,单片机可以直接从DS18B20内部读取温度值。

本次设计使用的1602液晶显示器为5V电压驱动,带背光,可显示两行,每行16个字符,不能显示汉字,内置128个字符的ASCII字符集字库。

2.2 设置正常温度范围系统采用三个按键,KEY1,KEY2,KE3设置正常的温度范围,其中,KEY1是功能选择按键,按KEY1可以在显示温度,设置正常温度最小值,设置正常温度最大值三个模式中切换。

当选择设置正常温度最小值或设置正常温度最大值模式时,液晶显示正常温度范围的最小值或者最大值,然后通过按键KEY2和KEY3可以选择让这个值增加或者减小。

2.3报警功能报警功能的电路采用一个三极管驱动的蜂鸣器作为报警电路,在显示温度时,当测得三路温度中有任何一路的温度不在正常温度的范围内时,报警电路就开始工作,发出响声。

4 各模块程序设计4.1 测温部分DS18B20采用单总线方式与单片机之间经行通信,所以在程序中,单片机只要操作一个IO口就可以对DS18B20经行操作,完成测温的功能。

DQ0~DQ2分别对应三个DS18B20。

程序主要包括四个函数,分别说传感器初始化操作,读字节操作,写字节操作和读取温度操作。

代码如下:*初始化ds1820 ******************************************************************** uchar Init_DS18B20(void){DQ0 = 1 ;DQ1 = 1 ;DQ2 = 1 ; DQ复位Delay(10) ; 稍做延时DQ0 = 0 ;DQ1 = 0 ;DQ2 = 0 ; 单片机将DQ拉低Delay(100) ; 精确延时大于480usDQ0 = 1 ;DQ1 = 1 ;DQ2 = 1 ; 拉高总线Delay(8) ;presence =DQ;Delay(100) ;DQ0 = 1 ;DQ1 = 1 ;DQ2 = 1 ; 拉高总线return(presence) ; 返回信号,表示初始化成功,否则表示初始化失败}* 读一个字节********************************************************************void ReadOneChar(void){unsigned char i = 0 ;dat0 = 0 ;dat1 = 0 ;dat2 = 0 ;for (i = 8 ; i > 0 ; i--){DQ0 = 0;DQ1 = 0;DQ2 = 0; 给脉冲信号dat0>>= 1;dat1>>= 1;dat2>>=1; 用于存放数据的字节右移一位DQ0 = 1;DQ1 = 1;DQ2 = 1; 给脉冲信号Delay(1); 稍做延时if(DQ0) 如果总线为高,说明返回的数据时1dat0 |= 0x80 ; 将1写入变量中,如果是0则不写,因为前面已经清零了?if(DQ1)dat1 |= 0x80 ;if(DQ2)dat2 |= 0x80 ;Delay(6) ;}}* 写一个字节********************************************************************void WriteOneChar(unsigned char dat){unsigned char i = 0 ;for (i = 8 ; i > 0 ; i--){DQ0 = 0 ;DQ1 = 0 ;DQ2 = 0 ; 单片机将DQ拉低DQ0 = dat&0x01 ; 如果写的数据位是1,则拉高总线,否则总线保持低电平即可DQ1 = dat&0x01 ;DQ2 = dat&0x01 ;Delay(6) ;DQ0 = 1 ;DQ1 = 1 ;DQ2 = 1 ; 拉高总线dat>>=1 ; 要写的数据右移一位}}* 读取温度********************************************************************void Read_Temperature(void){Init_DS18B20() ;WriteOneChar(0xCC) ; 跳过读序号列号的操作WriteOneChar(0x44) ; 启动温度转换Init_DS18B20() ; 初始化DS18B20WriteOneChar(0xCC) ; 跳过读序号列号的操作WriteOneChar(0xBE) ; 读取温度寄存器ReadOneChar() ; 温度低8位wd0=dat0; 先将温度低8位存到16位的变量中wd1=dat1;wd2=dat2;ReadOneChar() ; 温度高8位wd0=wd0+256*dat0; 将温度的高8位也存到16位的变量中wd1=wd1+256*dat1;wd2=wd2+256*dat2;wd0=wd0*0.625; 转化成实际温度,保留一位小数wd1=wd1*0.625;wd2=wd2*0.625;}4.2 显示部分1602液晶显示屏采用并口方式与单片机进行通信,单片机的P0口与液晶的数据口链接,P2.0,P2.1,P2.2分别与液晶的RS,RW,EN三个命令端相连。

通过正确的时序,单片机就可以控制1602液晶显示我们需要的字符。

程序主要包括三个函数,液晶初始化函数,写命令函数,写数据函数。

代码如下:*******************************************************************检查LCD忙状态**lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据。

*******************************************************************bit lcd_busy(){bit result ;LCD_RS = 0 ;LCD_RW = 1 ;LCD_EN = 1 ;delayNOP() ;result = (bit)(P0&0x80) ;LCD_EN = 0 ;return(result) ;}*写指令数据到LCD **RS=L,RW=L,E=高脉冲,D0-D7=指令码。

********************************************************************void lcd_wcmd(uchar cmd){while(lcd_busy()) ;LCD_RS = 0 ;LCD_RW = 0 ;LCD_EN = 0 ;_nop_() ;_nop_() ;P0 = cmd ;delayNOP() ;LCD_EN = 1 ;delayNOP() ;LCD_EN = 0 ;}******************************************************************* *写显示数据到LCD **RS=H,RW=L,E=高脉冲,D0-D7=数据。

相关主题