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

📄 readrom.c

📁 读取ds18b20的序列号的c程序。ds18b20可以用于温度测量。
💻 C
字号:
/***********************************/
/*******读取ds18b20序列号程序*******/
/***********************************/

#include<reg52.h>

sbit DQ=P2^7;
unsigned char dat_serial[8];
unsigned char disp[9]={0x00,0x10,0x20,0x30,0x40,0x50,0x70,0x80,0x90};

//延时子程序,实现(13*N+11)us的延时,晶振11.0592MHz
void delay(unsigned int N)
{
   int i;
   for(i=0;i<N;i++);
}

void delay2(unsigned int i)			//延时1.8ms*i
{   
	int t;
	while(i--)
	for(t=0;t<125;t++);
}

//复位
unsigned char reset(void)
{
   unsigned char ds18b20_ready;
   DQ=0;
   delay(40);                        //延时至少480~960us
   DQ=1;
   delay(6);                         //延时等待ds18b20响应
   ds18b20_ready=DQ;
   delay(32);                        //等待时序结束
   return(ds18b20_ready);            //有ds18b20信号时返回0,否则返回1
}

//读 1 byte 子程序
unsigned char readonebyte(void)
{
   unsigned char i;
   unsigned char dat=0;
   for(i=0;i<8;i++)
    {
      DQ=0;
      dat>>=1;         			//每次右移并可以微量延时>1us  				
      DQ=1;
      if(DQ) dat|=0x80;
      delay(7);					
     } 
   return(dat);
}

//写 1 byte 子程序
void writeonebyte(unsigned char date)
{ 
   unsigned char i;
   for(i=0;i<8;i++)
    {   
      DQ=0;
      DQ=date&0x01;
      delay(8);						//在15--60us的时间内采样,若果时高电平就写1,低电平就写0
      DQ=1;
      date>>=1;
    } 
}

//显示函数
void display(void)
{
	unsigned char n,i,nb,ns,ng;
	for(i=0;i<8;i++)
	{
		P1=0;
		n=dat_serial[i];
		nb=n/100;P0=disp[nb];		//百位	
		ns=n%100/10;P0=disp[ns];	//十位
		ng=n%100%10;P0=disp[ng];	//个位
		delay2(500);				//延时0.9s左右
	}
}
		

//ds18b20获得序列号	
void main(void)
{
   unsigned char i=0;
   EA=0;
   reset();
   writeonebyte(0x33);
   for(i=0;i<8;i++)
   {
     dat_serial[i]=readonebyte();
   }
   EA=1;
   display();
}
   

⌨️ 快捷键说明

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