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

📄 w014.c

📁 W014-多功能数字温度表(DS18B20)
💻 C
📖 第 1 页 / 共 2 页
字号:
/*                                                                 */
/*******************************************************************/
void Beep()
  {
    unsigned char y ;
    for (y=0 ;y<100 ;y++)
    {
      Delay(60) ;
      BEEP=!BEEP ;      //BEEP取反
    } 
    BEEP=1 ;            //关闭蜂鸣器
    Delayms(20) ;
  }


/*******************************************************************/
/*                                                                 */
/* 温度高于上限时显示                                              */
/*                                                                 */
/*******************************************************************/

void DisplayTHMenu()
{
     uchar code  dis_code5[ ] = {"  TEMP>TH     C "} ;
	 uchar code  dis_code6[ ] = {"  TEMP:    .  C "} ;

     LCD_DisplayLine(dis_code5,dis_code6);

	 LCD_WriteMytab() ;        //自定义字符写入CGRAM
     Delay(5) ;				   //显示自定义字符
     LCD_DisplayPosit(0x0D) ;
     LCD_WriteDate(0x00) ;
     Delay(5) ;
     LCD_DisplayPosit(0x4d) ;
     LCD_WriteDate(0x00) ; 

	 display_TH[0] = TH/10+0x30;
     display_TH[1] = TH%10+0x30;

	 LCD_DisplayPosit(0x0B) ;             
     LCD_WriteDate(display_TH[0]) ;
	 LCD_DisplayPosit(0x0C) ;             
     LCD_WriteDate(display_TH[1]) ;
}

/*******************************************************************/
/*                                                                 */
/* 温度低于下限时显示                                              */
/*                                                                 */
/*******************************************************************/

void DisplayTLMenu()
{
     uchar code  dis_code5[ ] = {"  TEMP<TL     C "} ;
	 uchar code  dis_code6[ ] = {"  TEMP:    .  C "} ;

     LCD_DisplayLine(dis_code5,dis_code6);

	 LCD_WriteMytab() ;        //自定义字符写入CGRAM
     Delay(5) ;				   //显示自定义字符
     LCD_DisplayPosit(0x0D) ;
     LCD_WriteDate(0x00) ;
     Delay(5) ;
     LCD_DisplayPosit(0x4d) ;
     LCD_WriteDate(0x00) ;          

	 display_TL[0] = TL/10+0x30;
     display_TL[1] = TL%10+0x30;

	 LCD_DisplayPosit(0x0B) ;             
     LCD_WriteDate(display_TL[0]) ;
	 LCD_DisplayPosit(0x0C) ;             
     LCD_WriteDate(display_TL[1]) ;


}

/*******************************************************************/
/*                                                                 */
/* 扫描设置键                                                      */
/*                                                                 */
/*******************************************************************/
void SetKeyScan()
{
  if(S1==0)
  {	
    Delay(1000);
	if(S1==0)
	{
	  Keyset_Flag = 1;
	  Delay(200);
	}
  }
}

/*******************************************************************/
/*                                                                 */
/* 扫描处理键                                                      */
/*                                                                 */
/*******************************************************************/
unsigned char KeyworthScan()
{
	unsigned char key_s;
	key_s = 0x00;
	key_s |= S1;
	key_s <<= 1;
	key_s |= S2;
	key_s <<= 1;
	key_s |= S3;
	return key_s;		
}

/*******************************************************************/
/*                                                                 */
/* 温度上限设置界面上限值显示                                      */
/*                                                                 */
/*******************************************************************/
void DisplayTH()
{
   display_TH[0] = TH/10+0x30;
   display_TH[1] = TH%10+0x30;

     LCD_DisplayPosit(0x4b) ;             
     LCD_WriteDate(display_TH[0]) ;
	 LCD_DisplayPosit(0x4c) ;             
     LCD_WriteDate(display_TH[1]) ;
}

/*******************************************************************/
/*                                                                 */
/* 温度上限设置界面显示                                            */
/*                                                                 */
/*******************************************************************/
void SetTHMenu()
{
     uchar code  dis_code5[ ] = {"  SET THE TH ?  "} ;
     uchar code  dis_code6[ ] = {"  NOW TH =    C "} ;

     LCD_DisplayLine(dis_code5,dis_code6);

	 LCD_WriteMytab() ;               
     Delay(10) ;
     LCD_DisplayPosit(0x4d) ;
     LCD_WriteDate(0x00) ; 
}

/*******************************************************************/
/*                                                                 */
/* 温度上限值设置时显示                                            */
/*                                                                 */
/*******************************************************************/
void SetTH()
{
   uchar key_v = 0x07;
   uchar a = 1;
   SetTHMenu();
   DisplayTH(); 
   while(a==1)
   {
      uchar key;
      key = KeyworthScan();
                             
      if(key!=key_v)
     {
       Delayms(10);
	   key = KeyworthScan();
	   DisplayTH();

	   if(key!=key_v)
	   {
	     key_v = key;
	     if(key_v==0x05)
	     {
	       TH++;
	        if(TH>99)TH=99;
			Keyset_Flag = 2;
	     }
	     else if(key_v==0x06)
	     {
	        TH--;
	        if(TH<0)TH=0;
			Keyset_Flag = 2;
	     }
	     else if(key_v==0x03&&Keyset_Flag == 2)
		 {
		       a = 0;
		 }
	   }

	 }

   }
}

/*******************************************************************/
/*                                                                 */
/* 温度下限设置界面显示                                            */
/*                                                                 */
/*******************************************************************/
void SetTLMenu()
{
     uchar code  dis_code5[ ] = {"  SET THE TL ?  "} ;
     uchar code  dis_code6[ ] = {"  NOW TL =    C "} ;

     LCD_DisplayLine(dis_code5,dis_code6);

	 LCD_WriteMytab() ;            
     Delay(10) ;
     LCD_DisplayPosit(0x4d) ;
     LCD_WriteDate(0x00) ;
}

/*******************************************************************/
/*                                                                 */
/* 温度下限设置界面下限值显示                                      */
/*                                                                 */
/*******************************************************************/
void DisplayTL()
{
     display_TL[0] = TL/10+0x30;
     display_TL[1] = TL%10+0x30;

     LCD_DisplayPosit(0x4b) ;             
     LCD_WriteDate(display_TL[0]) ;
	 LCD_DisplayPosit(0x4c) ;             
     LCD_WriteDate(display_TL[1]) ;
}

/*******************************************************************/
/*                                                                 */
/* 温度下限值设置时显示                                            */
/*                                                                 */
/*******************************************************************/
void SetTL()
{
   uchar key_v = 0x07;
   uchar a=1;

   SetTLMenu();
   DisplayTL();
   while(a==1)
   {
      uchar key_s;
      key_s = KeyworthScan();
                             
      if(key_s!=key_v)
     {
       Delayms(10);
	   key_s = KeyworthScan();
	   DisplayTL();

	   if(key_s!=key_v)
	   {
	     key_v = key_s;
	     if(key_v==0x05)
	     {
	        TL++;
	        if(TL>99)TL=99;
			Keyset_Flag = 3;
	     }
	     else if(key_v==0x06)
	     {
	        TL--;
	        if(TL<0)TL=0;
			Keyset_Flag = 3;
	     }
	     else if(key_v==0x03&&Keyset_Flag == 3)
		 {
			    a=0;
		 }
	   }

	 }

   }
}

/*******************************************************************/
/*                                                                 */
/* 温度上下限设置                                                  */
/*                                                                 */
/*******************************************************************/
void SetTH_TL()
{
    SetTH();
    Delay(100);
    SetTL();
	Keyset_Flag=0;
    DS18B20_OkMenu();
}
/*******************************************************************/
/*                                                                 */
/* 主函数                                                          */
/*                                                                 */
/*******************************************************************/

void main()
{
 do
 {
   if((presence==0)&&(dis_data[4]<TH)&&(dis_data[4]>=TL))  //温度正常
    { 
	  DS18B20_OkMenu() ;

      while((dis_data[4]<TH)&&(dis_data[4]>=TL))
       {	  
         ReadTemperature() ;
         TemperatureDisplay() ;

	     BEEP_Flag=0;
	     RED_Light=1;

	     SetKeyScan();
	     if(Keyset_Flag==1)
	      {
	        SetTH_TL();
			Delayms(500);
	      }
       }
	}

   if((presence==0)&&(dis_data[4]>=TH))	 //温度高于上限
	 {
	   DisplayTHMenu();

       while(dis_data[4]>=TH)
        {
	      ReadTemperature() ;
          TemperatureDisplay() ;

	     if(BEEP_Flag==0)Beep();
	        BEEP_Flag=1;
	        RED_Light=0;

	        SetKeyScan();
	     if(Keyset_Flag==1)
	       {
	         SetTH_TL();
			 Delayms(500);
	       }
        }
	  }

   if((presence==0)&&(dis_data[4]<TL))	//温度低于下限
    {
	  DisplayTLMenu();

      while(dis_data[4]<TL)
       {
	      ReadTemperature() ;
          TemperatureDisplay() ;

	      if(BEEP_Flag==0)Beep();
	        BEEP_Flag=1;
	        RED_Light=0;

	        SetKeyScan();
	      if(Keyset_Flag==1)
	       {
	         SetTH_TL();
			 Delayms(500);
	       }
        }
	}
}
while(!presence);


    DS18B20_ErrorMenu() ;		//未检测到DS18B20

    do
    {  
      DS18B20_Init() ;

      if(BEEP_Flag==0)Beep();
	   BEEP_Flag=1;
    }
     while(presence); 
}
/*******************************************************************/

⌨️ 快捷键说明

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