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

📄 main.c

📁 LPC2103 驱动 1 wire温度传感器DS18B20,独立供电当时,并用串口显示当前得温度值
💻 C
字号:

#include "config.h"
#include "string.h"
#include <stdio.h>
#define DQPin (1<<2)          //P0.2
#define PullUpDQ(void)  	{IO0DIR |= DQPin;IO0SET |= DQPin;}
#define PullDownDQ()	 	{IO0DIR |= DQPin;IO0CLR |= DQPin;}
#define DQdirIN()             IO0DIR &= (~DQPin) 
#define UART_BAUD  115200

 unsigned char tempL,tempH;

//串口初始化程序
void  UARTInit(void)
{

uint16 uiFdiv;
PINSEL0=PINSEL0&(~0X0F);
 PINSEL0=PINSEL0|0X05;

 U0LCR  =  0x83;                      /*允许设置波特率  字符长度为8*/
 uiFdiv =  (Fpclk/16)/UART_BAUD;      /*设定波特率*/
 U0DLM  =  uiFdiv/256;
 U0DLL  =  uiFdiv%256;
 U0LCR  =  0x03;                      /*锁定波特率*/
}

//向串口发送字节
void UART0SendByte(char uiDat)
{
 U0THR=uiDat;
 while((U0LSR&0x40)==0);
 }
 
 
 //向串口发送字符串
 
 void UART0SendStr(char  const  *uiStr)
 
{
 while(1)
 {
   if(*uiStr=='\0')break;
   UART0SendByte(*uiStr++);
  }
}

/**********************************************************************
*延时1us的延时程序,晶振 11.0592MHz
***********************************************************************/

 void delay(uint32 uidly)
{
   uint32 i;
   for(;uidly>0;uidly--)
   { 
     for(i=0;i<8;i++);
    } 
}

/***********************************************************************/
//读存在脉冲

uint32  get_owPin(void)

{ 
     DQdirIN();
     return(IO0PIN&00000004);
 }  
   

/***********************************************************************/
//复位,存在脉冲子程序
/***********************************************************************/
int DS18B20reset(void)
{    
     uint32 i,t;
     i=5;
      while(i--)
     {
       PullDownDQ();
       delay(500);
        DQdirIN(); 
       delay(60);
       t=!(get_owPin());
       if(t)
      {
      
       PullUpDQ(void);
       delay(450);
       return 1;
      }
        delay(500);   
      } 
     return 0;     
  }       

/***********************************************************************
**写位操作程序
************************************************************************/
void  WriteBit(unsigned char val)
{  delay(10);
   PullDownDQ(); 
   if(val)
   { 
     
     delay(5);
     PullUpDQ();
     delay(70);
          
    } 
   
    else
    {
      delay(80);
     DQdirIN();
    }
 }   

/***********************************************************************
**写字节程序
***********************************************************************/

 void  WriteByte(unsigned  char data) 
 {
    unsigned char i=8;
    unsigned char tmp;
   
    while(i--)
    {   
      tmp=(data&0x01)>0;
      WriteBit(tmp);
      data=data>>1;
     } 
  }   
/***********************************************************************
**读位程序
***********************************************************************/    
 unsigned  char ReadBit()
 {
    unsigned char temp;
    PullDownDQ();
	delay(5);
	DQdirIN();
	 delay(15);
    temp=(get_owPin());
   
 // PullUpDQ();
	delay(60);
	return temp;
      
  }
/***********************************************************************
**读字节程序
***********************************************************************/   
unsigned char ReadByte()
{   
   unsigned char Rdata=0;
   unsigned char i=8;
   while(i--)
   { 
     Rdata=Rdata>>1;
     if (ReadBit())
     Rdata=Rdata|0x80; 
   }  
   return Rdata;
 }  

/***********************************************************************
**读温度函数
***********************************************************************/

unsigned char gettempreture()
{
  unsigned int temp;
if(DS18B20reset())
{
   WriteByte(0xcc);        
   WriteByte(0x44); 
   delay(10);         
   while(ReadByte()==0xff);     
   DS18B20reset();        
   delay(10);
   WriteByte(0xcc);         
   WriteByte(0xbe);   

        tempL=ReadByte();
		tempH=ReadByte();
		temp=( ((unsigned int)tempH<<8) + (unsigned int)tempL  )/16;
				 
         DS18B20reset();      
}
return temp;
   
}

/***********************************************************************
**主函数
***********************************************************************/

int main (void)
{ 
  char  uiBuf[20];
  unsigned char tempreture;
  PINSEL0=0x00000000;
  PINSEL1=0x00000000;
   UARTInit();
   
  while(1)
  {
    delay(100000);
    tempreture=gettempreture();
    sprintf(uiBuf,"%d 摄氏度 ",tempreture);
   
    UART0SendStr(uiBuf);
   }  
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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