云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 单片机DS18B20数字温度计课程设计报告

单片机DS18B20数字温度计课程设计报告

  • 62 次阅读
  • 3 次下载
  • 2025/6/6 12:18:26

void delay(uint i);

sbit DQ =P0^0; //DS18B20端口 sbit RS=P2^0; //LCD端口 sbit RW=P2^1; sbit E=P2^2;

sbit buzzer=P2^7; //定义蜂鸣器端口

union{ uchar c[2]; uint x; }temp; //联合体

uchar flag; //定义温度正负值标志变量,正为'0',负为'1' int cc,xs;

/***************************************************************/ /*延时函数 */

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

void delay(uint i) { for(;i>0;i--); }

/***************************************************************/ /*复位函数 */

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

uchar ow_reset(void) { uchar reset; DQ=0; delay(50); DQ=1; delay(3); reset=DQ; delay(25); return(reset); }

/***************************************************************/ /*初始化DS18B20 */

17

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

void initds18b20(void) {

ow_reset(); // write_byte(0xCC); write_byte(0x4E); write_byte(0x00); write_byte(0x00); write_byte(0x7F); }

/***************************************************************/ /*从单总线读取一个字节 */ /***************************************************************/ uchar read_byte(void) { uchar i; uchar value=0; for (i=8;i>0;i--) { value>>=1; DQ=0; DQ=1; delay(1); if(DQ)value|=0x80; delay(6); } return(value); }

/***************************************************************/ /**向单总线上写一个字节 */

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

void write_byte(uchar val) { uchar i; for(i=8;i>0;i--) { DQ=0; DQ=val&0x01; delay(5); DQ=1; val=val/2;

18

} delay(5); }

/***************************************************************/ /**读取温度 */

/***************************************************************/ void Read_Temperature(void) { ow_reset(); write_byte(0xCC); write_byte(0x44); ow_reset(); write_byte(0xCC); write_byte(0xBE); temp.c[1]=read_byte(); temp.c[0]=read_byte(); }

/***************************************************************/ /**温度转换 */

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

void temperature_cov(void) {

if (temp.c[0]>0xF8) //判断温度是正数还是负数 { flag=1; //温度为负数flag置1 temp.x=~temp.x+1; } xs=temp.x&0x0F; xs=xs*10; cc=temp.c[0]*256.0+temp.c[1]; //将温度从两个八位数表示成一个十六位数 cc=cc*0.0625; xs=xs*0.0625; }

/***************************************************************/ /**显示 */

/***************************************************************/ void display()

19

{ int i; // SP=0x50; // lcd_init(); lcd_wcmd(0x80); //写入缓冲区起始地址为第一行第一列 lcd_wdat(0x54); //显示TEMPERATURE lcd_wdat(0x45); lcd_wdat(0x4d); lcd_wdat(0x50); lcd_wdat(0x45); lcd_wdat(0x52); lcd_wdat(0x41); lcd_wdat(0x54); lcd_wdat(0x55); lcd_wdat(0x52); lcd_wdat(0x45); lcd_wcmd(0xc0); lcd_wdat(0x44);lcd_wdat(0x51);lcd_wdat(0x59); lcd_wdat(0x20); buzzer=1; lcd_wcmd(0x8C); lcd_wdat(0x20); lcd_wdat(0x20); lcd_wdat(0x20); lcd_wdat(0x20); lcd_wcmd(0xc4); if(flag == 1) { lcd_wdat(0x2d); //如果flag为1表示温度为负值,显示‘-’符号 if(cc>=4) { buzzer = 0; lcd_wcmd(0x8C); lcd_wdat(0x4C); lcd_wdat(0x4F); lcd_wdat(0x57); lcd_wdat(0x21); lcd_wcmd(0xc4); } } if(cc>=29) { buzzer=0;

20

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

void delay(uint i); sbit DQ =P0^0; //DS18B20端口 sbit RS=P2^0; //LCD端口 sbit RW=P2^1; sbit E=P2^2; sbit buzzer=P2^7; //定义蜂鸣器端口 union{ uchar c[2]; uint x; }temp; //联合体 uchar flag; //定义温度正负值标志变量,正为'0',负为'1' int cc,xs; /***************************************************************/ /*延时函数

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com