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

📄 lcd18b20.c

📁 用51单片机做数字温度计PCB资料
💻 C
字号:
#include<reg52.h>


#define uchar unsigned char
#define uint unsigned int

sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit DQ=P1^0;

uchar code table[]="temperature:";

uchar num;

//void initlcd();
void write_com(uchar n);
void write_data(uchar n);
//void delay(uint n);
//uchar busy();

uchar temperature,tl,th;

void delay(uint n)
{
	uint x,y;
	for(x=n;x>0;x--)
		for(y=112;y>0;y--)
				;
}

void init()
{
	uchar x=0;
    DQ=1;
	delay(5);
	DQ=0;
	delay(500);
	DQ=1;
	delay(15);
}

uchar read()
{
	uchar i=0;
	uchar dat=0;
	for(i=8;i>0;i--)
	{
		DQ=1;
		delay(2);
		DQ=0;
		dat>>=1;
		DQ=1;
		if(DQ!=0)
			dat|=0x80;
		delay(4);
	}
	return(dat);
}

void write(uchar dat)
{
	uchar i=0;
	for(i=8;i>0;i--)
	{
		DQ=0;
		DQ=dat&0x01;
		delay(5);
		DQ=1;
		dat>>=1;
	}
	delay(5);
}
uchar readtemperature()
{
	init();
	write(0xcc);
	write(0x44);
	delay(150);
	init();
	write(0xcc);
	write(0xbe);
	tl=read();
	th=read();
	temperature=(th*256+tl)*0.0625;
	delay(200);
	return (temperature);	
}




void initlcd()
{
	write_com(0x38);
	write_com(0x0f);
	write_com(0x06);
	write_com(0x80);

}

uchar busy()
{
	bit result;
	RS=0;
	RW=1;
	E=0;
	E=1;
	delay(1);
	result=(uchar)(P0 & 0x80);
	delay(1);
	E=0;
	delay(1);
	return result;
}
void write_com(uchar n)
{
	while(busy());
	RW=0;
	RS=1;
	RS=0;
	P1=n;
	E=0;
	delay(5);
	E=1;
	delay(5);
	E=0;
	delay(5);
	RS=1;
}
void write_data(uchar n)
{
	while(busy());
	RW=0;
	RS=0;
	RS=1;
	P1=n;
	E=0;
	delay(5);
	E=1;
	delay(5);
	E=0;
	delay(5);
	RS=0;
}
void main()
{
	initlcd();
	write_com(0x80);
	for(num=0;num<12;num++)
	{
		write_data(table[num]);
		delay(20);
	}
	delay(2000);
	write_com(0x80+0x0f);
	write_data(readtemperature());
	
	
	while(1);
}

⌨️ 快捷键说明

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