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

📄 fantest.c

📁 风扇控制程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/********************start***************************************/
#include <STDIO.h>
#include <STC12C.h>
#include <Intrins.h>
#include <fan.h>
#include <math.h>


/***************************************************************************
函数名称: Delay_Set
函数功能: 以ms为单位延时一定的时间
输入参数: 延时常数
输出参数: 无
***************************************************************************/
void Delay_Set(uint i)
{
   uint  m, k;

   /* 时钟为11.0592MHz, 每个指令周期的执行时间约为1us. */

   for(m=0;m<i;m++)
   {
       k = CN_TIMER;           /* 1ms延时设置  */
       while(k--);             /* 5个指令周期  */
   }
}

/***************************************************************************
函数名称: Delay_us
函数功能: 以6us为单位延时一定的时间,每次调用再额外加5us
输入参数: 延时常数
输出参数: 无
***************************************************************************/
void Delay_us(uint i)
{
   while (i--);         
}
/***************************************************************************
函数名称: main
函数功能: 数码管显示
输入参数: 无
输出参数: 无
***************************************************************************/
/*****************************************************************************************************************/
/*void main()
{
  uchar i,j,k,l;
  uchar code data_arry [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};   /*  定义"0~9,-"*/	
 /* while (1)
	{   
	 
	  AD_FAN_CONT1=0;
	  AD_FAN_CONT2=0;  
		for (i=0;i<=99;i++)
	  { 
	  	 j = i%10;
		 k = i/10;
		 if (j ==0 && i!=0)
		  {
		   AD_SPEAK=0;
	       Delay_Set(CN_1000ms);
		   AD_SPEAK=1;
		  }

	   	 LE1=0;LE2=1;
	   	 P2 = data_arry[j];
		 Delay_Set(CN_5ms);
	     LE1=1;LE2=0;
		 P2 = data_arry[k]; 
	     Delay_Set(CN_5ms);
		 LE2=1; 
		Delay_Set(CN_1000ms); 	
	  }
	  AD_TEMP_LED=0;
	  Delay_Set(CN_2000ms);
	  AD_TEMP_LED=1;
	  Delay_Set(CN_2000ms);
	  AD_OVTEMP_ALM=0;
	  Delay_Set(CN_2000ms);
	  AD_OVTEMP_ALM=1;
	  Delay_Set(CN_2000ms);
	  AD_SPEAK=0;
	  Delay_Set(CN_1000ms);
      AD_SPEAK=1;
	  Delay_Set(CN_2000ms);
	  AD_FAN_ALM	=0;
	  Delay_Set(CN_2000ms);
	  AD_FAN_ALM	=1;
	  Delay_Set(CN_2000ms);
	  AD_FAN_CONT1 =1;
	  for (l=0;l<20;l++)
	       {
		      Delay_Set(CN_2000ms);
		   }
	  AD_FAN_CONT1= 0;
	  Delay_Set(CN_2000ms);
	  AD_FAN_CONT2 =1;
	  for (l=0;l<20;l++)
	       {
		      Delay_Set(CN_2000ms);
		   }
	  AD_FAN_CONT2= 0;
	  Delay_Set(CN_2000ms);
	  AD_FAN_CONT1 =1; AD_FAN_CONT2 =1;
	  for (l=0;l<20;l++)
	       {
		      Delay_Set(CN_2000ms);
		   }
	  AD_FAN_CONT1 =0; AD_FAN_CONT2 =0;
	  Delay_Set(CN_2000ms);


	}


	}	  */
/*********************************************************************************************************/



 /************************************************************************************************************/
/*****************************************************************************
函数名称: ADC_Init
函数功能: ADC初始化
输入参数: ADC通道号
输出参数: 无
****************************************************************************/
//void ADC_Init()
// { 
   
//	P1M0 = 0x01;             /*  P1.0为开漏,其余I/O为传统口*/       
//  P1M1 = 0x01;
//    ADC_CONTR =  CN_P10_ADC;   /*  选第一路ADC,并开启ADC电源,速率为210个时钟周期*/
   // Delay_Set(CN_1ms); //        /*  开A/D转换电源后要加延时,1ms以内就足够了*/

// 	}

/***************************************************************************
函数名称: Get_AD_Result
函数功能: 获取A/D值
输入参数: 无
输出参数: 返回获取的10位A/D
***************************************************************************/
//void Get_AD_Result ()
//{ 
 // uint   ADC_fan_low;     /*   AD转换低位寄存器*/
//  uint   ADC_fan_high;    /*   AD转换高位寄存器*/ 
//  uint   k,i,l,j=0;
//  uint  min,max;
//	uint ADC_buff[10];
//	ADC_DATA = 0;
//	ADC_LOW2 = 0;
	
 //	for (i = 0;i < 10;i++)            /*取10次AD值*/
//	{
//	 ADC_Init();
//	 ADC_CONTR=ADC_CONTR | 0x08;      /*启动AD转换*/
//	 while(!(ADC_CONTR & 0x10))      /*判断AD是否转换结束!!最好在此加一个延时判断,以免进入死循*/
//	     {
//		   l++;
//		   if (l>250)break;		  /*最好在此加一个延时判断,以免进入死循*/
//		 }
//		 l=0;
//	 	ADC_CONTR = ADC_CONTR & 0xef;   /*清转换结束标志*/
//	 	ADC_fan_high = ADC_DATA;
//	 	ADC_fan_low  = ADC_LOW2; 	
//	 	k = ADC_fan_high;
//	 	k <<= 2;
//	 	k = k | (ADC_fan_low & 0x0003);
//	 	ADC_buff[i] = k;
//	 }
//	   min = max = ADC_buff[0];
//	 for (i = 0;i <10; i++)
//	   {
//	   	 j += ADC_buff[i];
 //     if (min > ADC_buff[i])
//          min = ADC_buff[i];
//	 	   else 
//	 	      max = ADC_buff[i];	
//	 	 }
//	  j = j -(min + max);           /* 去掉最大值和最小值*/
//	  j = j>>3;	                    /* 取平均值*/ 
//	  g_ADC_fan  = j;   
//	}

   /***************************************************************************
函数名称: Display_handle
函数功能: 根据温度值进行处理,并在数码管显示
输入参数: 无
输出参数: 无
***************************************************************************/
/*void Display_handle()
{
	uchar i,j,l;
    uchar code data_arry [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};   /*  定义"0~9,-"*/	
//	 Delay_Set(CN_10ms);
 //    g_temp_getcnt++;
//  if(g_temp_getcnt>=200)

//  	{
//  	   WDG_CONTR = 0x35;    
//	   l=(g_ADC_fan*6)/10;
//	   i = l%10;
//	   j = l/10;					*/
//	   LE1 = 0;                     /* 开个位显示*/
//	   P2 = data_arry[i];           /* 显示个位*/
//	   Delay_Set(CN_5ms);
//	   LE1 = 1;	   LE2 = 0;         /* 开十位显示*/
//	   P2 = data_arry[j];           /* 显示十位*/
//	   Delay_Set(CN_5ms);
//	   LE2 = 1;
//	}
//	}	*/

/***************************************************************************
函数名称: main
函数功能: 系统AD测试
输入参数: 无
输出参数: 无
***************************************************************************/
/*void main()
{ // uint l;
   System_Init();
   for(;;)
   { 
   //   AD_FAN_CONT1 =1; AD_FAN_CONT2 =1;
	  Get_AD_Result ();
	  Display_handle();
	 // 
   }
}	   */
 /********************************************************************************************************/



/***************************************************************************
函数名称: DS18B20_Init
函数功能: 数字温度传感器DS18B20初始化
输入参数: 温度传感器号
输出参数: DS18B20复位成功标志(全局变量)
***************************************************************************/
void DS18B20_Init(uchar temp_number)
{
  uchar i;
  uchar  j,k;

  i = 0;
  if(temp_number==CN_TEMP1)
  {
      AD_TEMP1 = 1;          /* 传感器输入端口1复位 */
      Delay_us(CN_45us);     /* 延时45us */
      AD_TEMP1 = 0;
      Delay_us(CN_525us);    /* 精确延时大于480us,取525us */
      AD_TEMP1 = 1;          /* 拉高端口 */
      Delay_us(CN_30us);
      k=0;                   /* 滤波计数器 */
      for(j=0;j<10;j++)
      {
         if(!AD_TEMP1)       /* 如果检测结果为0则初始化成功,为1则失败. */
         {
     	    k++;             /* 检测到低电平加1. */
         }
      }
      if(k>3)
          gb_18b20init1_ok = TRUE; /* 复位成功. */
      else
          gb_18b20init1_ok = FALSE;/* 复位失败. 温感开路或温感损坏 */
      Delay_us(CN_200us);
      k=0;
      AD_TEMP1=1; /* 输入允许. */
      if(TRUE==gb_18b20init1_ok)
      {
      	  for(j=0;j<10;j++)
          {
                    
             if(AD_TEMP1)        /* 如果检测结果为1则初始化成功,为0则失败. */
             {
     	        k++;             /* 检测到高电平加1 */
             }
          }
          if(k>3)
             gb_18b20init1_ok = TRUE; /* 复位成功. */
          else
             gb_18b20init1_ok = FALSE;/* 复位失败. 温感对地短路 */
      }
  }
  if(temp_number==CN_TEMP2)
  {

⌨️ 快捷键说明

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