单片机郭赢介绍.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机课程设计 基于数字温度计DS18B20的温度测量与显示系统 专业名称:航空自动化 专业班级:111141A 姓 名:郭赢 学 号:111141107 指导老师:常美华/赵淑舫 课程设计要求 ·基本要求 1.利用1个DS18B20测量室内温度(误差小于?) 2.用数码管显示温度 3.显示精度为0.1℃ ·扩展要求 1.多通道测量 2.LCD显示 3.生成印刷电路板 设计综述 本次设计使用DS18B20温度传感器,设计了一种基于单片机的数字温度计,克服了传统温度计读数麻烦、测量速度慢、精度低、误差大等缺点。该数字温度计设计电路简单,其输出温度采用数字显示,读数直接,分辨率高,为人们工作、科研、生活提供更好、更方便的电子产品设施。 1、温度传感器DS18B20电路 对DS18B20供电的一种传统办法是从VCC引脚接入一个外部电源,见图。这样做的好处是单总线上不需要强上拉。而且总线不用在温度转换期间总保持高电平;GND端接地;DQ端经上拉电阻与AT89C51相连。 2、显示电路 1、显示电路采用4位共阳极LED数码管,P0口由上拉电阻提高驱动能力,作为段码输出并作为数码管的驱动。P2口的低四位作为数码管的位选端。采用动态扫描的方式显示。 对于扩展部分,显示电路采用LCD1602显示,P0口由上拉电阻提高驱动能力。P2.4作为数据/指令寄存器选择短,P2.5为LCD1602的使能信号端。P3.7端为DS18B20与AT89C51连接段。 对于扩展部分,多通道并显示电路采用LCD1602显示,P0口由上拉电阻提高驱动能力。P2.4作为数据/指令寄存器选择短,P2.5为LCD1602的使能信号端。P3.6和P3.7分别为DS18B20与AT89C51的连接端。 3、AT89C51的连接电路 AT89C51的第18脚和第19脚外接由C1、C2和X1构成的石英晶体震荡器电路;AT89C51的第9脚外接由K1、R1、R2和C3构成的按钮复位电路;AT89C51的第31脚外接电源,以进行片内和片外程序存储器的选择控制。 主程序流程图和各个子程序的流程图 1、主程序流程图 主程序首先对DS18B20进行初始化,然后读出DS18B20中的温 度值并进行数据处理,之后再进行数码管显示。其程序流程见图。 = 2、温度读取子程序流程图 3、温度转换子程序流程图 1602显示程序及说明: #includereg51.h #includeabsacc.H #include intrins.h #includestdio.h #define uchar unsigned char #define uint unsigned int #define LCD_DB P0//LCD的数据端 sbit ds=P3^7;//定义DS18B20数据线 sbit LCD_RS=P2^4;//数据/指令寄存器选择端 sbit LCD_E=P2^5;//使能 uchar v[]={0,0,0,0,0};//温度值存取数组 uchar busy_flag;//忙状态标志位 bit list_flag=0;//18b20初始化正确与否标志位 uchar temp_value;//小数部分 uchar flag;//正负号标志位 void delay(uint ms) //18b20的延时程序 { while(ms--); } //DS18B20的初始化程序,給复位脉冲和存在脉冲,通过返回值status判断初始化是否成//功 uchar Init(void )//DS18B20初始化 { uchar status; ds=1; delay(8); ds=0; delay(90);//延时 ds=1; delay(8);//延时 status=ds; //如果为0,则初始化成功,如果为1,则初始化失败 delay(100);//延时 ds=1; return(status); } //通过8次循环移位读出DS18B20中的数据 uchar tempread(void)//从DS18B20读取一个字节数据 { uchar i=0; uchar dat=0; for(i=8;i0;i--) { ds=0;//给脉冲信号 dat=1; ds=1; _nop_(); _nop_()

文档评论(0)

123****6648 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档