欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于51系列单片机温度报警器课程设计(共19页).doc

    • 资源ID:13287031       资源大小:153KB        全文页数:19页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51系列单片机温度报警器课程设计(共19页).doc

    精选优质文档-倾情为你奉上一 概述1.1 课程设计的目的和意义 通过这次课程设计,我进一步熟悉了单片机的内部结构和工作原理,掌握了单片机应用系统设计的基本方法和步骤;通过利用MCS-51单片机,理解单片机在自动化装置中的作用以及掌握单片机的编程调试方法;通过设计一个简单的实际应用输入控制及显示系统,掌握protues和keil以及各种仿真软件的使用。目前温度计的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等,温度计中传感器是它的重要组成部分,它的精度、灵敏度基本决定了温度计的精度、测量范围、控制范围和用途等。传感器应用极其广泛,目前已经研制出多种新型传感器。但是,作为应用系统设计人员需要根据系统要求选用适宜的传感器,并与自己设计的系统连接起来,从而构成性能优良的监控系统。1.2 任务及要求设计内容:所设计数字电压表应具有以下功能:(1)可以测量-50到110摄氏度内的温度。(2)在4位LED数码管上显示温度,分别为百位、十位、个位和小数点后一位。(3)测量精度误差在0.5摄氏度以内。设计要求:1、根据题目要求进行系统总体设计。 2.完成系统硬件电路的设计。(1)硬件电路图。(2)硬件电路说明。3.系统程序的设计。(1)程序流程图。(2)完整源程序。4完成的控制系统能达到题目的要求。 5书写设计说明书。二 总体设计方案1 功能简介LCD液晶显示器直接显示DS18B20所测量的温度,超出-50110范围时喇叭报警并且数码管开始闪烁,在温度范围内时喇叭停止报警并且数码管停止闪烁,运行期间可以随时进行复位操作。2 设计思路AT89C51作为温度测试系统设计的核心器件,具有低电压供电和体积小等特点。该器件是INTEL公司生产的MCS-5l系列单片机中的基础产品,采用了可靠的CMOS工艺制造技术,具有高性能的8位单片机,属于标准的MCS-51的CMOS产品。芯片中集成了CPU、RAM、ROM、定时/计数器和多功能I/O接口等计算机所需的基本功能部件。程序存储在单片机的程序存储器中,运行过程由程序控制。时钟信号用来控制单片机内各种微操作的时间基准,通常有两种形式得到,即内部震荡方式和外部震荡方式。内部震荡方式所得的信号比较稳定,故设计数字温度计的时钟信号选用内部震荡方式,晶振选用12MHZ。复位电路使片内单片机的片内寄存器初始化,使单片机从一种确定的状态开始运行。复位电路有两种基本形式,即上电复位和开关复位。为了保证温度计的正常工作,采用上电且开关复位,也就是CR复位。温度传感器选用达拉斯公司的单线数字温度传感芯片DS18B20。它将地址线、数据线和控制线合为一根双向串行传输数据的信号线,允许在这根信号线上挂接多个DS18B20。每个芯片内有一个64位的ROM,其中存有各个器件自身的序列号,作为器件独有的ID号码。其测温范围是-55128,测温分辨率在12位时精度为0.0625。DS18B20简化了温度器件与计算机的接口电路,使得电路简单,使用更加方便。显示部分使用LM016L来作为温度的直接输出,当温度超出-50110时,喇叭报警和数码管闪烁来提示。采用单片机汇编程序语言设计温度计的程序,对DS18B20进行初始化、读、写,读取温度,数据的转换,温度显示和报警处理等等。3 芯片器材主机:单片机AT89C51一片;温度传感器:DS18B20一片,显示电路:LM0 16L液晶显示器;时钟电路:电容两个,晶振片一个;复位电路:电容一个,开关按钮一个;导线若干,+5V电源等等。三 硬件设计1 89C51如图1图1 AT89C51引脚图本次设计需要注意的几个端口:P0口(3932):是一组8位漏极开路行双向I/O口,也既地址/数据总线复用口。可作为输出口使用时,每位可吸收电流的方式驱动8个TTL逻辑电路,对端口写“1”可作为高阻抗输入输入端用。在访问外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,PO口接收指令字节,而在程序校验时,输出指令字节,校验时,要求接上拉电阻。P3口(1017):是一组带有内部上拉电阻的8位双向I/O口,P1的输入缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输出端口。作输出端口时,被外部拉低的P3口将用上拉电阻输出电流。P3口除可作为一般的I/O口线外,更重要的用途是它的第二功能,如图2所示:图2 端口引脚P3/Vpp(31):内部和外部程序存储器选择线。=0时访问外部ROM 0000HFFFFH;=1时,地址0000H0FFFH空间访问内部ROM,地址1000HFFFFH空间访问外部ROM。本次设计接高电平。XTAL1(19)和XTAL2(18):使用内部振荡电路时,用来接石英晶体和电容;使用外部时钟时,用来输入时钟脉冲。RST/VPD(9):复位信号输入端。AT89S51接能电源后,在时钟电路作用下,该脚上出现两个机器周期以上的高电平,使内部复位。第二功能是VPD,即备用电源输入端。当主电源Vcc发生故障,降低到低电平规定值时,VPD将为RAM提供备用电源,发保证存储在RAM中的信号不丢失。2 温度获取使用美国Dallas半导体公司的数字化温度传感器DS1820,支持 “一线总线”接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。 同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为-55°C+125°C,在-10+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小DS18B20产品的特点 :(1)、只要求一个端口即可实现通信。 (2)、在DS18B20中的每个器件上都有独一无二的序列号。 (3)、实际应用中不需要外部任何元器件即可实现测温。 (4)、测量温度范围在55。C到125。C之间。 (5)、数字温度计的分辨率用户可以从9位到12位选择。 (6)、内部有温度上、下限告警设置。DS18B20内部结构2如图3所示:存储和控制逻辑高速暂存器温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC生成器64位ROM和一线端口供电方式图3 DS18B20内部结构DS18B20功能命令2如表1所示:表1 DS18B20功能命令表命令功能描述代码CONVERT启动温度转换44HREAD SCRATCHPAD读取温度寄存器BEHREAD ROM读DS18B20的序列号33HWRITE SCRATPAD将数据写入暂存器的第2、3字节中4EHMATCH ROM匹配ROM55HSEARCH ROM搜索ROMF0HALARM SEARCH报警搜索ECHSKIP ROM跳过读序列号的操作CCHREAD POWER SUPPLY读电源供给方式,0寄生,1外部电源B4H其连线使用如图4所示(2接P3.6):图4 DS18B20连线图由于DS18B20单线通信功能是分时完成的,所以有严格的时隙概念,读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。3 复位电路复位操作是为了完成单片机内部电路的初始化,使单片机从一种确定的状态开始运行。当AT89C51单片机的复位引脚RST出现2个机器周期以上,单片机就完成了复位操作。如果RST持续为高电平,单片机就处于循环复位状态1。复位通常有2种基本形式:上电复位和开关复位。上电复位要求要求接通电源后,自动实现复位操作。开关复位要求在电源接通的条件下,在单片机运行期间,用按钮开关操作使单片机复位。本次采用的是常用的上电且开关复位电路,如图5所示:图5 复位电路上电后,由于电容充电,使RST持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。通常选择C=1030F,R=101000。复位操作使单片机进入初始化过程,其中包括使程序计数器PC=0000H,P0P3=FFH,SP=07H,其它寄存器处于零。4 时钟电路单片机的时钟信号使用内部震荡方式产生,其电路图如图6所示:图6 内部震荡电路电容器C、C1起稳定震荡频率、快速起振的作用,电容值一般为5-30pF,晶振通常选用6MHZ、12MHZ、24MHZ。内部震荡方式所得的时钟信号比较稳定。五 温度显示电路 四位共阴极数码管,能够显示带一位小数的正负温度。零下时:1显示负号,2显示十位,3显示个位,4显示小数位。零上时:1显示百位,2显示十位,3显示个位,4显示小数位。当温度超过109.5或低于49.5时,四个数码闪烁。 其如图8图8 总体电路 四 软件设计1 程序流程图程序流程图如图9所示:N跳过读序列号的操作YNY读温度命令将温度高、低位读出处理数据到百、十、个、小数位,并在数码管上显示超出限制?报警器报警和数码管闪烁初始化DS18B20开始初始化DS18B20应答脉冲?跳过读序列号的操作发出温度转换的命令等待温度转换完成图9 程序流程图2 初始化子程序使用DS18B20时,单片机先向DS18B20送出复位信号,单片机将数据拉低并保持480960s;再释放数据线,由上拉电阻拉高1560s;然后再由DS18B20发出低电平60240s,就完成了复位操作3。3 读子程序读数据之前,单片机先将数据线拉低,再释放。DS18B20在数据线从高电平跳低后15s内将数据送到数据线上。单片机在15s后读数据线。4 写子程序在单片机对DS18B20写数据时,应先将数据线拉低1s以上,再写入数据(写1为高,写0为低)。待单片机写入的数据变化1560s后,DS18B20将对数据线采样。单片机写入数据到DS18B20的保持时间为60120s。5 数据处理子程序先判断温度高8位的CY,如果CY为1,则将高、低8八位求补;对高、低8位的数据按权整合称一个整数,判断是否在-50110之间,超出范围则置报警灯为亮;将该数按百、十、个位分别存入相应的存储单元。流程图如图10所示: YYN符号为正?求补码N高、低8位整合成为一个整数存入A中-50110之间?报警分别存入百、十、个、小数位取温度值图10 数据处理流程图6 显示子程序将百、十、个、小数位的数据查表,送到对应的数码管显示,程序流程图如11所示:YNYYN温度为负?显示百位,延时显示负号,延时显示十位,延时显示个位,延时显示1000遍?取温度返回显示小数位,延时延时N超过范围?图11 显示程序流程图五 试验仿真1 总线路图六 课程设计体会这两个礼拜的单片机课程设计已接近尾声,回顾这个过程,收获颇多!单片机课程是我们上个学期学的内容,经过两个月的寒假,遗忘了很多东西!再加上初次认识和使用系统仿真软件protues和编译软件keil,自己动手设计电路,所以在刚开始的课程设计遇到了很大困难!说到这确实深感惭愧,但这也给自己创造了一个学习的机会!重新回顾上个学期学过的内容,并且在图书馆和网上查阅了很多资料,通过和同学之间的交流,还有老师的辅导,自己开始熟悉并掌握有关单片机的设计!经过两个礼拜的努力,看到了自己的成果!同时对单片机有了一个新的认识,产生了很大的兴趣!我认识到:我们要认真对待每一门课程,并且要从中有所收获!我们要不断温习以前学过的知识,而不能学过去了就把它扔在一边!这样自己才能有进步!课程设计检验的是综合能力,自己不仅要掌握课本上的东西,还有自己的动手能力,组织能力等等,要认真对待课程设计,学以致用,理论联系实际,尽自己的最大努力把它做好!这个经历会磨练袭击的意志,我相信对自己以后的学习和工作有很大的帮助。七 参考文献1、何立民主编,单片机中级教程,北京航空航天大学出版社2、丁元杰主编,单片机原理与应用,机械工业出版社3、彭伟编,单片机C语言程序设计实训,电子工业出版社附录程序清单:#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int #define delayNOP() _nop_();_nop_();_nop_();_nop_(); sbit DQ =P33;sbit LCD_RS = P20; sbit LCD_RW = P21; sbit LCD_EN = P22;uchar code Temp_Disp_Title = "current temp:"uchar Current_Temp_Display_Buffer = "C"uchar code Temperature_Char8 = 0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00;uchar code df_Table = 0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9 ;uchar CurrentT = 0;uchar Temp_Value = 0x00,0x00 ;uchar Display_Digit = 0,0,0,0;bit DS18B20_IS_OK = 1; void DelayX(int x)uchar i;while(x-) for(i=0;i<120;i+);bit LCD_Busy_Check()bit result;LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result =(bit)(P0 & 0x80); LCD_EN=0;return result;void Write_LCD_Command(uchar cmd)while(LCD_Busy_Check();LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;void Write_LCD_Date(uchar dat) while(LCD_Busy_Check();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN = 0;void LCD_Initialise()Write_LCD_Command(0x01); DelayX(5);Write_LCD_Command (0x38); DelayX(5);Write_LCD_Command(0x0C); DelayX(5);Write_LCD_Command(0x06); DelayX(5);void Set_LCD_POS(uchar pos)Write_LCD_Command(pos | 0x80);void Delay(uint x)while (-x);uchar Init_DS18B20()uchar status;DQ = 1;Delay(8);DQ = 0;Delay(90);DQ = 1;Delay(8);status =DQ;Delay(100);DQ = 1;return status;uchar ReadOneByte() uchar i,dat = 0;DQ = 1;_nop_();for(i=0;i<8;i+)DQ=0;dat>>=1;DQ=1;_nop_();_nop_();if(DQ) dat |= 0x80;Delay(30);DQ=1;return dat;void WriteOneByte(uchar dat)uchar i;for (i=0;i<8;i+)DQ=0;DQ=dat & 0x01;Delay(5);DQ=1;dat>>=1;void Read_Temperature()if(Init_DS18B20() = 1)DS18B20_IS_OK=0;elseWriteOneByte(0xCC); WriteOneByte(0x44);Init_DS18B20();WriteOneByte(0xCC);WriteOneByte(0xBE);Temp_Value0 = ReadOneByte();Temp_Value1 = ReadOneByte();DS18B20_IS_OK=1;void Display_Temperature()uchar i;uchar t = 150,ng = 0;if (Temp_Value1 & 0xF8) = 0xF8)Temp_Value1 = Temp_Value1;Temp_Value0 = Temp_Value0 + 1;if (Temp_Value0 =0x00 ) Temp_Value1+;ng=1;Display_Digit0=df_Table Temp_Value0 & 0x0F;CurrentT = (Temp_Value0 & 0xF0 )>>4) | (Temp_Value1 & 0x07)<<4);Display_Digit3=CurrentT / 100;Display_Digit2=CurrentT % 100 / 10;Display_Digit1=CurrentT % 10;Current_Temp_Display_Buffer11 = Display_Digit0+'0'Current_Temp_Display_Buffer10 = '.'Current_Temp_Display_Buffer9 = Display_Digit1+'0'Current_Temp_Display_Buffer8 = Display_Digit2+'0'Current_Temp_Display_Buffer7 = Display_Digit3+'0'if (Display_Digit3 = 0) Current_Temp_Display_Buffer7=' 'if (Display_Digit2=0 && Display_Digit3 = 0)Current_Temp_Display_Buffer8=' 'if (ng)if(Current_Temp_Display_Buffer8=' ')Current_Temp_Display_Buffer8='-'elseif(Current_Temp_Display_Buffer7=' ')Current_Temp_Display_Buffer7='-' else Current_Temp_Display_Buffer6='-'Set_LCD_POS(0x00);for (i=0;i<16;i+)Write_LCD_Date(Temp_Disp_Titlei );Set_LCD_POS(0x40);for(i=0;i<16;i+) Write_LCD_Date(Current_Temp_Display_Bufferi);Set_LCD_POS(0x4D);Write_LCD_Date(0x00);Set_LCD_POS(0x4E);Write_LCD_Date('C');void main() LCD_Initialise();Read_Temperature();Delay(50000);Delay(50000);while(1)Read_Temperature();if( DS18B20_IS_OK ) Display_Temperature();专心-专注-专业

    注意事项

    本文(基于51系列单片机温度报警器课程设计(共19页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开