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

📄 18b20档.txt

📁 51的18b20程序
💻 TXT
字号:
#include<reg52.h>



#define uchar unsigned char
#define uint  unsigned int

#include "intrins.h"
sbit	RS	=	P2^6;
sbit	RW	=	P3^6;
sbit	E	=	P2^7;

#define DPORT	P0

const uchar noshow=0;		//无显示
const uchar show=1;		//有显示无光标
const uchar shownoshine=2;	//有光标但不闪烁
const uchar showshine=3;		//有光标且闪烁

void lcdpot(uchar,uchar);	//确定光标位置
void lcdww(uchar);			//写字符
void lcdwc(uchar);			//送控制字(检测忙信号)
void lcdwcn(uchar);		//送控制字子程序(不检测忙信号)
void mdelay(uchar);		//延时,毫秒数由j决定
void wait();			//正常读写操作之前检测LCD控制器状态
//在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符
void writechar(uchar c,uchar xPos,uchar yPos)
{	lcdpot(xPos,yPos);
	lcdww(c);
}

void writestring(uchar *s,uchar xPos,uchar yPos)
{	uchar i;
	if(*s==0)		//遇到字符串结束
		return;	
	for(i=0;;i++)
	{	
		if(*(s+i)==0)
			break;
		writechar(*(s+i),xPos,yPos);
		xPos++;
		if(xPos>=15)	//如果XPOS中的值未到15(可显示的最多位)
			break;

	}
}
void setcur(uchar Para)	//设置光标
{	mdelay(2);
	switch(Para)
	{	case 0:
		{	lcdwc(0x08);	//关显示
			break;
		}
		case 1:
		{	lcdwc(0x0c);	//开显示但无光标
			break;
		}
		case 2:
		{	lcdwc(0x0e);	//开显示有光标但不闪烁
			break;
		}
		case 3:
		{	lcdwc(0x0f);	//开显示有光标且闪烁
			break;
		}
		default:
			break;
	}
}

void cleanlcd()	//清屏命令
{	lcdwc(0x01);
}			

//	正常读写操作之前检测LCD控制器状态
void wait()
{	uchar tmp;
	RS=0;
	RW=1;
	E=1;
	_nop_();
	for(;;)
	{	tmp=DPORT;	
		tmp&=0x80;
		if(	tmp==0)
			break;
	}
	E=0;
}

void lcdww(uchar c)		//写字符子程序
{	wait();
	RS=1;	
	RW=0;
	DPORT=c;			//将待写数据送到数据端口
	E=1;
	_nop_();
	_nop_();
	E=0;
}
void lcdwc(uchar c)		//送控制字子程序(检测忙信号)
{	wait();	
	lcdwcn(c);
}

void lcdwcn(uchar c)	//送控制字子程序(不检测忙信号)
{	RS=0;
	RW=0;
	DPORT=c;
	E=1;
	_nop_();
	E=0;
}
void lcdpot(uchar xPos,uchar yPos)	//设置第(xPos,yPos)个字符的DDRAM地址
{	unsigned char tmp;
	xPos&=0x0f;		//x位置范围是0~15
	yPos&=0x01;		//y位置范围是0~1
	if(yPos==0)		//显示第一行
		tmp=xPos;
	else
		tmp=xPos+0x40;
	tmp|=0x80;
	lcdwc(tmp);
}
void reslcd()		//复位LCD控制器
{	mdelay(15);		//如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30
	lcdwc(0x38);	//显示模式设置
	lcdwc(0x08);	//显示关闭
	lcdwc(0x01);	//显示清屏
	lcdwc(0x06);	//显示光标移动位置
	lcdwc(0x0c);	//显示开及光标设置
}	

void mdelay(uchar j)	//延时,毫秒数由j决定
{   uint i=0;
    for(;j>0;j--)
    {  for(i=0;i<124;i++)
        {;}
    }
}

























code unsigned char seg7code[11]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40}; // 显示
void Delay(unsigned int tc) //显示延时程序
{while( tc != 0 )
{unsigned int i;
for(i=0; i<100; i++);
tc--;}
}
sbit TMDAT =P3^1; //DS18B20 的数据输入/输出脚DQ,根据情况设定
unsigned int sdata;//测量到的温度的整数部分
unsigned char xiaoshu1;//小数第一位
unsigned char xiaoshu2;//小数第二位
unsigned char xiaoshu;//两位小数
bit fg=1; //温度正负标志
void dmsec (unsigned int count) //延时部分
{
unsigned char i;
while(count--)
{for(i=0;i<115;i++);}
}
void tmreset (void) //发送复位
{
unsigned char i;
TMDAT=0; for(i=0;i<103;i++);
TMDAT = 1; for(i=0;i<4;i++);
}
bit tmrbit (void) //读一位//
{
unsigned int i;
bit dat;
TMDAT = 0;
i++;
TMDAT = 1;
i++; i++; //微量延时//
dat = TMDAT;
for(i=0;i<8;i++);
return (dat);
}
unsigned char tmrbyte (void) //读一个字节
{
unsigned char i,j,dat;
       dat = 0;
for (i=1;i<=8;i++)
{ j = tmrbit(); dat = (j << 7) | (dat >> 1); }
return (dat);
}
void tmwbyte (unsigned char dat) //写一个字节
{
unsigned char j,i;
bit testb;
for (j=1;j<=8;j++)
{ testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{ TMDAT = 0; //写0
i++; i++;
TMDAT = 1;
for(i=0;i<8;i++); }
else
{ TMDAT = 0; //写0
for(i=0;i<8;i++);
TMDAT = 1;
i++; i++;}
}
}
void tmstart (void) //发送ds1820 开始转换
{ tmreset(); //复位
dmsec(1); //延时
tmwbyte(0xcc); //跳过序列号命令
tmwbyte(0x44); //发转换命令44H,
}
void tmrtemp (void) //读取温度
{
unsigned char a,b;
tmreset (); //复位
dmsec (1); //延时
tmwbyte (0xcc); //跳过序列号命令
tmwbyte (0xbe); //发送读取命令
a = tmrbyte (); //读取低位温度
b = tmrbyte (); //读取高位温度
if(b>0x7f) //最高位为1 时温度是负
{a=~a; b=~b+1; //补码转换,取反加一
fg=0; //读取温度为负时fg=0
}sdata = a/16+b*16; //整数部分
xiaoshu1 = (a&0x0f)*10/16; //小数第一位
xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
}
void DS18B20PRO(void)
{ tmstart();
//dmsec(5); //如果是不断地读取的话可以不延时//
tmrtemp(); //读取温度,执行完毕温度将存于TMP 中//
}





void Led()
{
  	uchar m;
	uchar xPos,yPos;
	uchar *s="T:";
	m=sdata+48;
	xPos=1;
	yPos=0;
	reslcd();
	cleanlcd();
	setcur(showshine);	//开光标显示、闪烁
	writestring(s,xPos,yPos);
	writechar(m,4,0);
	writechar('o',4,0);
    writechar('C',4,0);
	writestring("speed:",1,1);
	for(;;){;}
                      }




    
    
                 
main()
{fg=1;
while(1)
{
DS18B20PRO();
Led();
}
}

⌨️ 快捷键说明

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