52单片机DS18B20温度计(1602显示).docxVIP

  • 8
  • 0
  • 约3.96千字
  • 约 7页
  • 2020-08-30 发布于江苏
  • 举报
//按下 K1 显示序列码,按下 K2 显示实时温度(本实验适合初学者调试理解 18B20 用, ) #include reg52.h//52 单片机 #define uchar unsigned char #define uint unsigned int //uint 无符号整数 sbit DQ=P2^2; //单总线(与自己的开发板相匹配) uint temp; //温度 uchar flag1; //符号 sbit rs = P1^0; // 控制 LCD (与自己的开发板相匹配) sbit rw = P1^1; // 控制 LCD (与自己的开发板相匹配) sbit lcden = P2^5; //led 使能端 (与自己的开发板相匹配) sbit K1=P3^4; //独立按键 k1(与自己的开发板相匹配) sbit K2=P3^5; //独立按键 k2 (与自己的开发板相匹配) sbit du=P2^6; //位选(防 LED 灯乱闪 )(与自己的开发板相匹配) sbit we=P2^7; //段选(防 LED 灯乱闪 ) (与自己的开发板相匹配) uchar a,b,c,d,e,f,g,h,A1,A2,A2t,A3,A4,A5;// 写在 LCD 上的字符,具体在程序中看 void delay(uint count) //延迟程序 (200*count)/8 毫秒 { uint i; while(count) { i=200; while(i0) i--; count--; } } void DQreset(void) //初始化, 主机将 DQ 拉高 (上升沿 ) (从机检测到上升沿后延时 15 到 60 毫秒,从机拉低总线 60 到 240 毫秒表示“我”在线) { //从机的工作是自动完成的 uint i; DQ=0; i=103; while(i0)i--; DQ=1; i=4; while(i0)i--; } bit tmpreadbit() //从 18b20 读 1 位 { uint i; bit dat; DQ=0;i++; DQ=1;i++;i++; dat=DQ; i=8;while(i0)i--; return (dat); //返回 dat } uchar tmpread() //从 18b20 读 1 字节 { uchar i,j,dat; dat=0; for(i=1;i=8;i++) { j=tmpreadbit(); dat=(j7)|(dat1); } return(dat); } void tmpwritebyte(uchar dat) //18b20 写 1bit (只能用于写命令) { uint i; uchar j; bit testb; for(j=1;j=8;j++) //一位一位地传 { testb=dat0x01; dat=dat1; if(testb) { DQ=0; i++;i++; DQ=1; i=8;while(i0)i--; } else { DQ=0; i=8;while(i0)i--; DQ=1; i++;i++; } } } void tmpchange(void) //温度转换子程序 { DQreset(); delay(1); tmpwritebyte(0xcc); //CCH 跳过 ROM tmpwritebyte(0x44); //44H 温度转换 } uint tmp() //读取温度子程序 { float tt; uchar a,b; DQreset(); // 无论什么命令 , 首先都要发起初始化 delay(1); tmpwritebyte(0xcc); //跳过 ROM (本实验中实验板上只连接一块 18B20) tmpwritebyte(0xbe); //读便签存储器(温度以二进制储存于 BEH ) a=tmpread(); //a 为低八位 b=tmpread(); //b 为高八位 temp=b; temp=8; temp=temp|a; tt=temp*0.0625; //二进制乘 0.0625 为十进制 temp=tt*1000; //精度为 0.001 return temp; } void LCD_WriteCom(uchar com)//LCD 写入命令 { rs = 0; rw = 0; P0 = com; delay(5); lcden = 0; delay(5); lcden = 1; delay(5); lcden = 0; } void LCD_WriteData(uchar dat)//LCD 写入数据 { rs = 1; rw = 0; lcden = 0; P0 = dat; delay(5);

文档评论(0)

1亿VIP精品文档

相关文档