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

📄 温度传感器程序.txt

📁 AT89S52控制的18B20数字温度传感器
💻 TXT
📖 第 1 页 / 共 2 页
字号:
       IntNum=0;
	   KeySETDown=0;

/*-----------按长SET的处理-------------*/
	   if(KSDNum>=60)   //如一直长按了SET 3秒左右
	    {
	     RelayOutPort=1;  //关闭控制对象
	     PowTF=1;		  //电源标识关
		 LED_Display(0,21,2,"--__OFF__-2007_6_23__--");
		 LEDPort=0xbf;   //显示"--"         
	     LEDOneC=0;
		 LEDTwoC=0;
	     LEDThreeC=0;
		 LED_C=0;
	     Delay_100ms(40);	//延时4S
	     LEDOneC=1;	   //关显示
	     LEDTwoC=1;
	     LEDThreeC=1;
  	     IntNum=0;
	     IntNum2=0;
	     IntNum3=0;
		 IntNum4=0;
		 Beep=1;
		 OPen=1;
		 LEDTF=0;
	     }
	  KSDNum=0;
	  }
	}
   KeyV=0;	   //清空变量准备下次键扫描
   TempKeyV=0;
   OPen=1;

/*-----------开电源程序-------------*/ 
   if(!PowTF)
    {
	 if(LEDTF==0)
	 {
	  LED_Display(0,26,2,"--__OPEN__--_3408_YOUJJYY_--");
	  if(DS1820ON==0)LED_Display(0,14,2,"--__ON-SENSOR__--");
	  LEDTF=1;
	  }
	 InitDS1820();
	 if(DS1820ON==0)IntNum5+=1;
	 if((DS1820ON==0)&&(IntNum5>400))
	 {LED_Display(0,14,2,"--__ON-SENSOR__--");IntNum5=0;IntNum4+=500;}
	 Write_Data(0xcc);
	 Write_Data(0x44);
	 Delay_6n5_8us(152);	  //延时1000uS 等转换完成
	 InitDS1820();
	 Write_Data(0xcc);
	 Write_Data(0xbe);  //读出温度指令
	 ReadDS1820();  //读出温度值
	 V2ToV();       //转换显示值
	 if(TMV>TMSetV)RelayOutPort=0,Beep=0,IntNum4+=1;  //根据采集的温度值控制对象
	 else if(DS1820ON==1) RelayOutPort=1,Beep=1,IntNum4=0;
	 if(IntNum4>=2000)KSDNum=60,IntNum=60,KeySETDown=1,KeyV=4;
	 if(SetTF)IntNum2+=1,OPen=1;       //用于闪烁计数
	 if(IntNum2>50)IntNum2=0,OPen=0;

/*-----连按Key_UP或Key_DOWN键时的采集次数------*/
	 if(KeyTF)IntNum3+=1;       //用于防止按键连按
	 if(IntNum3>15)	            //检测按键是否超过
	  {
	   IntNum3=0;
	   KeyTF=0;
	   }
	 if((SetTF)&&(IntNum2<20))goto InitEnd;  //使LED闪烁
	 LEDPort=LED_One;
	 LEDOneC=0;
	 Delay_1ms(1);
	 LEDOneC=1;         //显示百位数
	 LEDPort=LED_Two;
	 LEDTwoC=0;
	 Delay_1ms(1);
	 LEDTwoC=1;         //显示十位数
	 LEDPort=LED_Three;
	 LEDThreeC=0;
	 Delay_1ms(1);
	 LEDThreeC=1;       //显示个位数
	 }
	InitEnd:	
	        if(!PowTF){LEDPort=0x34;
	        LED_C=0;
	        Delay_1ms(1);
	        LED_C=1;}
 }
==================================================================================================
/*==========================================
                LED显示驱动程序

		文件名:LED_Display.c

		作者 YOUJJYY 
		时间:2007.4.6 
============================================*/

#include <at89x52.h>
#include <main_led_display.h>
#define uchar unsigned char

//***********显示数据的转换***************//
uchar TO_DATA(bit n_s,uchar I,uchar led_data)
 {
   uchar x[3],y;
  if(n_s==1)
   {
    switch(I)
	 {  
	   case 0:if(led_data!=y){P0=P0^0x20;y=led_data;}
	          break;      
	   case 1: {x[2]=(led_data>>4)+1;x[3]=(led_data&0x0f)+1;}
	           break;
	   case 2: {x[0]=(led_data>>4)+1;x[1]=(led_data&0x0f)+1;}
	           break;
	   default:break;
	    
	   }
	  return x[I];
	}
	else 
	  {
	   if(led_data<46)led_data=0;
	   else led_data-=47;
	   return led_data;
	   }
   }
  
/*****************LED显示程序***************/
void LED_Display(bit N_S,uchar data_size,uchar S_D,uchar *LED_data)//N_S是数字和字符串显示选择,
                                                                   //data_size显示多少位
																  //S_D是显示方式(0x00:静态,0x01:半动态,0x02:全动态)
																 //LED_data是要显示的数据
{
 uchar t,y,i,x,z,a,k=20,size=0;

//*****************显示方式S_D***************//
	 switch(S_D)
	  {
	   case 0:a=0;
	         break;
	   case 1:a=4,k=80,size/=4;
	         break;
	   case 2:a=1;//size-=4;
	        break;
	   default:break;
		}

//*************显示个数data_size***********//
   for(i=0;i<data_size;i++)					                  //BCD码转换成LED码
    {
	 if(N_S==1)size=0; 
      else size+=1;
    }		  

//****************显示程序**************//                            		 
   for(t=0;t<=size;t++)	  //要显示的位数
     {
	  for(y=0;y<=k;y++)		  //循环20显示
	    {
		  z=0x7f;		  
	      for(i=0;i<=3;i++)       //一次显示
	       {
		     P2=z;
			 z>>=1;
			 z+=0x80;
			 x=TO_DATA(N_S,i,LED_data[i+t*a]);
			  P0=BCD_ASCII[x];
			  Delay_1ms(3);//延时时间
			 }	      
			}
	 }
}
=====================================================================================================
/*==============================
       延时程序函数
       晶振:11.0592 
文件名:Delay_1mS(uint x).c
===============================*/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*------------------------------
        延时1mS*n
-------------------------------*/
void Delay_1ms(uchar timer)
{
 uchar j;
 uint i;
 for(j=timer;j>0;j--)		 
 {						 
   for(i=0;i<329;i++);	 
   }					
  }
/*-----------------------------
  延时(100ms*n=T)秒
--------------------------*/
void Delay_100ms(unsigned char nS)
{
 unsigned char i,x,y;
 for(i=0;i<nS;i++)
 {
  for(x=0;x<228;x++)
  {
   y=200;
   while(y)y--;
   }
  }
 }
/*-------------------------------
  延时间(6.5*n+8=T)微秒
------------------------------*/
void Delay_6n5_8us(uchar nUs)//4微秒级延时<255us
{
  uchar i=nUs;
  while(i)i--;	
}
=================================================================================================
/*==============================
 	ASCII转换成LED显示

	文件名:BCD_ASCII.c
===============================*/
#include <at89x52.h>
#define uchar unsigned char
//**********ASCII转换成十进制显示LED************//
const uchar code BCD_ASCII[]={0xff,0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,
                              0xf6,0xb7,0x3c,0xb7,0xaa,0xc0,0x02,
						      0x60,0x25,0x3c,0x23,0x34,0x74,0x24,0x61,0xeb,0xab,0x35,
						      0x3d,0x48,0x68,0x28,0x70,0x08,0x50,0xa4,0x7c,0x29,0x09,
						      0xb1,0x41,0xa1,0x32,0x3c,0xe5,0xaa,0xf8,0xbf,0xdf,0x02,
						      0x25,0x37,0x23,0x30,0x74,0xa0,0x65,0xeb,0xab,0x35,0x3d,
						      0xf8,0x67,0x28,0x70,0xe0,0x57,0xa4,0xdc,0x2f,0x0f,0xf1,
						      0x41,0xa1,0x32,0xdf};
===================================================================================================
/*=================================
	      接口函数文件
       文件名:LED_Display.h

=================================*/
#include <at89x52.h>
#define uchar unsigned char
#define uint unsigned int

/*********声明外部变量*******/
/*------显示程序------*/
extern void LED_Display(bit N_S,uchar data_size,uchar S_D,uchar *LED_data);
/*------延时程序------*/
extern void Delay_1ms(uchar timer);
extern void Delay_100ms(unsigned char nS);
extern void Delay_6n5_8us(uchar nUs);
const uchar code BCD_ASCII[];
/*-------接口定义-------*/
#define Key_UP         P3_2        //上调温度
#define Key_DOWN       P3_3        //下调温度
#define Key_SET        P3_4        //设定键(温度设定,长按开电源)
#define RelayOutPort   P2_1       //控制对象输出
#define LEDPort        P0          //LED控制口
#define LEDOneC        P2_7        //LED DS1控制(百位)
#define LEDTwoC        P2_6        //LED DS2控制(十位)
#define LEDThreeC      P2_5        //LED DS3控制(个位)
#define LED_C		   P2_4
#define TMPort         P3_0        //DS18B20的数据输出引脚
#define Beep           P2_0
#define ON_DS1820	   P2_3
#define OPen           P2_2

⌨️ 快捷键说明

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