⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lesson8.c

📁 DS18B20测量温度 1602做为液晶显示温度 c语言编写 有注释
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define T_cont 0.0625;
uchar code welcome[]={"High Sensor Temp"};
uchar code welcome1[]={"Design by:ljh"};
uchar code temp[]={"temp: "};
uchar code ds18b20[]={"DS18B20 OK"};

bit T_sign;
sbit DS=P3^3;
float temp1=0;
uchar t_bai,t_shi,t_ge,t_feng,t_miao;

sbit lcden=P2^2;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;




  ///////////////////////////////////////////////////////////////////////
 
 void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}
 
 
 void dsreset(void)       //send reset and initialization command

{

  uint i;                //DS18B20初始化

  DS=0;

  i=103;

  while(i>0)i--;

  DS=1;

  i=4;

  while(i>0)i--;

}

 

bit tmpreadbit(void)       //read a bit 读一位

{

   uint i;

   bit dat;

   DS=0;i++;          //i++ for delay  小延时一下

   DS=1;i++;i++;

   dat=DS;

   i=8;
   while(i>0)i--;

   return (dat);

}

 

uchar tmpread(void)   //read a byte date 读一个字节

{

  uchar i,j,dat;

  dat=0;

  for(i=1;i<=8;i++)

  {

    j=tmpreadbit();

    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好//一个字节在DAT里

  }

  return(dat);             //将一个字节数据返回

}

 

void tmpwritebyte(uchar dat)   //write a byte to ds18b20

{                           //写一个字节到DS18B20里

  uint i;

  uchar j;

  bit testb;

  for(j=1;j<=8;j++)

  {

    testb=dat&0x01;

    dat=dat>>1;

    if(testb)     //write 1    写1部分

    {

      DS=0;

      i++;i++;

      DS=1;

      i=8;while(i>0)i--;

    }

    else

    {

      DS=0;       //write 0   写0部分

      i=8;while(i>0)i--;

      DS=1;

      i++;i++;

    }

  }

}

 





void readtemperature()
{
	uint y;
	uchar T_L=0;
	uchar T_H=0;
	uchar k;
	dsreset();
	delay(1);
	tmpwritebyte(0xcc);
	tmpwritebyte(0x44);
	dsreset();
	delay(1);
	tmpwritebyte(0xcc);
	tmpwritebyte(0xbe);
	T_L=tmpread();
	T_H=tmpread();
	k=T_H&0x08;
	if(k==0x08)
		T_sign=1;
	else
		T_sign=0;

	T_H=T_H&0x07;
	temp1=(T_H*256+T_L)*T_cont;
	temp1=temp1*100;
	t_bai=(uint)temp1/10000;
	y=(uint)temp1%10000;
	t_shi=y/1000;
	y=(uint)y%1000;
	t_ge=y/100;
	y=(uint)y%100;
	t_feng=y/10;
	t_miao=(uint)y%10;


}	
 

///////////////////////////////////////////////////////////


void write_com(uchar com)
{
	
	lcdrs=0;
	P0=com;
	delay(5); //延时
	lcden=1;   //下三行表示E高脉冲到来就开始转换
	delay(5);
	lcden=0;
}

void write_data(uchar date)
{
	lcdrs=1;
	P0=date;
	delay(5);
	lcden=1;
	delay(5);
	lcden=0;
}
void init()
{
	lcdrw=0;	
	lcden=0;
	write_com(0x38);
	write_com(0x0e);
	write_com(0x06);
	write_com(0x01);
	
}
void print(uchar a,uchar *str)
{
	write_com(a);
	while(*str!='\0') {write_data(*str++);}
	*str=0;
			
}

void print1(uchar a,uchar t)
{
	write_com(a);
	write_data(t);
}







 void main()
{

	
	init();
	
	
	print(0x80,welcome);
	print(0xc0,welcome1);
	
	delay(1000);
 
	init();
	while(1)
	{
		readtemperature();
		print(0x80,ds18b20);
		print(0xc0,temp);
		if(T_sign==1)
			print1(0xc7,0x2d);
		else
			print1(0xc7,0x2b);

		if(t_bai!=0)
			print1(0xc8,t_bai+0x30);
		else
			print1(0xc8,0x20);
		print1(0xc9,t_shi+0x30);
		print1(0xca,t_ge+0x30);
		print1(0xcb,0x2e);
		print1(0xcc,t_feng+0x30);
		print1(0xcd,t_miao+0x30);
		print1(0xce,0x43);

	} 

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -