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

📄 fantest.lst

📁 风扇控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   FANTEST                                                               07/21/2006 16:14:00 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE FANTEST
OBJECT MODULE PLACED IN fantest.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fantest.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************start***************************************/
   2          #include <STDIO.h>
   3          #include <STC12C.h>
   4          #include <Intrins.h>
   5          #include <fan.h>
   6          #include <math.h>
   7          
   8          
   9          /***************************************************************************
  10          函数名称: Delay_Set
  11          函数功能: 以ms为单位延时一定的时间
  12          输入参数: 延时常数
  13          输出参数: 无
  14          ***************************************************************************/
  15          void Delay_Set(uint i)
  16          {
  17   1         uint  m, k;
  18   1      
  19   1         /* 时钟为11.0592MHz, 每个指令周期的执行时间约为1us. */
  20   1      
  21   1         for(m=0;m<i;m++)
  22   1         {
  23   2             k = CN_TIMER;           /* 1ms延时设置  */
  24   2             while(k--);             /* 5个指令周期  */
  25   2         }
  26   1      }
  27          
  28          /***************************************************************************
  29          函数名称: Delay_us
  30          函数功能: 以6us为单位延时一定的时间,每次调用再额外加5us
  31          输入参数: 延时常数
  32          输出参数: 无
  33          ***************************************************************************/
  34          void Delay_us(uint i)
  35          {
  36   1         while (i--);         
  37   1      }
  38          /***************************************************************************
  39          函数名称: main
  40          函数功能: 数码管显示
  41          输入参数: 无
  42          输出参数: 无
  43          ***************************************************************************/
  44          /*********************************************************************************************************
             -********/
  45          /*void main()
  46          {
  47            uchar i,j,k,l;
  48            uchar code data_arry [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};   /*  定义"0~9,-"*/
             -        
  49           /* while (1)
  50                  {   
  51                   
  52                    AD_FAN_CONT1=0;
  53                    AD_FAN_CONT2=0;  
C51 COMPILER V7.50   FANTEST                                                               07/21/2006 16:14:00 PAGE 2   

  54                          for (i=0;i<=99;i++)
  55                    { 
  56                           j = i%10;
  57                           k = i/10;
  58                           if (j ==0 && i!=0)
  59                            {
  60                             AD_SPEAK=0;
  61                         Delay_Set(CN_1000ms);
  62                             AD_SPEAK=1;
  63                            }
  64          
  65                           LE1=0;LE2=1;
  66                           P2 = data_arry[j];
  67                           Delay_Set(CN_5ms);
  68                       LE1=1;LE2=0;
  69                           P2 = data_arry[k]; 
  70                       Delay_Set(CN_5ms);
  71                           LE2=1; 
  72                          Delay_Set(CN_1000ms);   
  73                    }
  74                    AD_TEMP_LED=0;
  75                    Delay_Set(CN_2000ms);
  76                    AD_TEMP_LED=1;
  77                    Delay_Set(CN_2000ms);
  78                    AD_OVTEMP_ALM=0;
  79                    Delay_Set(CN_2000ms);
  80                    AD_OVTEMP_ALM=1;
  81                    Delay_Set(CN_2000ms);
  82                    AD_SPEAK=0;
  83                    Delay_Set(CN_1000ms);
  84                AD_SPEAK=1;
  85                    Delay_Set(CN_2000ms);
  86                    AD_FAN_ALM    =0;
  87                    Delay_Set(CN_2000ms);
  88                    AD_FAN_ALM    =1;
  89                    Delay_Set(CN_2000ms);
  90                    AD_FAN_CONT1 =1;
  91                    for (l=0;l<20;l++)
  92                         {
  93                                Delay_Set(CN_2000ms);
  94                             }
  95                    AD_FAN_CONT1= 0;
  96                    Delay_Set(CN_2000ms);
  97                    AD_FAN_CONT2 =1;
  98                    for (l=0;l<20;l++)
  99                         {
 100                                Delay_Set(CN_2000ms);
 101                             }
 102                    AD_FAN_CONT2= 0;
 103                    Delay_Set(CN_2000ms);
 104                    AD_FAN_CONT1 =1; AD_FAN_CONT2 =1;
 105                    for (l=0;l<20;l++)
 106                         {
 107                                Delay_Set(CN_2000ms);
 108                             }
 109                    AD_FAN_CONT1 =0; AD_FAN_CONT2 =0;
 110                    Delay_Set(CN_2000ms);
 111          
 112          
 113                  }
 114          
 115          
C51 COMPILER V7.50   FANTEST                                                               07/21/2006 16:14:00 PAGE 3   

 116                  }         */
 117          /*********************************************************************************************************
             -/
 118          
 119          
 120          
 121           /********************************************************************************************************
             -****/
 122          /*****************************************************************************
 123          函数名称: ADC_Init
 124          函数功能: ADC初始化
 125          输入参数: ADC通道号
 126          输出参数: 无
 127          ****************************************************************************/
 128          //void ADC_Init()
 129          // { 
 130             
 131          //      P1M0 = 0x01;             /*  P1.0为开漏,其余I/O为传统口*/       
 132          //  P1M1 = 0x01;
 133          //    ADC_CONTR =  CN_P10_ADC;   /*  选第一路ADC,并开启ADC电源,速率为210个时钟周期*/
 134             // Delay_Set(CN_1ms); //        /*  开A/D转换电源后要加延时,1ms以内就足够了*/
 135          
 136          //      }
 137          
 138          /***************************************************************************
 139          函数名称: Get_AD_Result
 140          函数功能: 获取A/D值
 141          输入参数: 无
 142          输出参数: 返回获取的10位A/D
 143          ***************************************************************************/
 144          //void Get_AD_Result ()
 145          //{ 
 146           // uint   ADC_fan_low;     /*   AD转换低位寄存器*/
 147          //  uint   ADC_fan_high;    /*   AD转换高位寄存器*/ 
 148          //  uint   k,i,l,j=0;
 149          //  uint  min,max;
 150          //      uint ADC_buff[10];
 151          //      ADC_DATA = 0;
 152          //      ADC_LOW2 = 0;
 153                  
 154           //     for (i = 0;i < 10;i++)            /*取10次AD值*/
 155          //      {
 156          //       ADC_Init();
 157          //       ADC_CONTR=ADC_CONTR | 0x08;      /*启动AD转换*/
 158          //       while(!(ADC_CONTR & 0x10))      /*判断AD是否转换结束!!最好在此加一个延时判断,以免进入死循*/
 159          //           {
 160          //                 l++;
 161          //                 if (l>250)break;               /*最好在此加一个延时判断,以免进入死循*/
 162          //               }
 163          //               l=0;
 164          //              ADC_CONTR = ADC_CONTR & 0xef;   /*清转换结束标志*/
 165          //              ADC_fan_high = ADC_DATA;
 166          //              ADC_fan_low  = ADC_LOW2;        
 167          //              k = ADC_fan_high;
 168          //              k <<= 2;
 169          //              k = k | (ADC_fan_low & 0x0003);
 170          //              ADC_buff[i] = k;
 171          //       }
 172          //         min = max = ADC_buff[0];
 173          //       for (i = 0;i <10; i++)
 174          //         {
 175          //               j += ADC_buff[i];
C51 COMPILER V7.50   FANTEST                                                               07/21/2006 16:14:00 PAGE 4   

 176           //     if (min > ADC_buff[i])
 177          //          min = ADC_buff[i];
 178          //                 else 
 179          //                    max = ADC_buff[i];        
 180          //               }
 181          //        j = j -(min + max);           /* 去掉最大值和最小值*/
 182          //        j = j>>3;                         /* 取平均值*/ 
 183          //        g_ADC_fan  = j;   
 184          //      }
 185          
 186             /***************************************************************************
 187          函数名称: Display_handle
 188          函数功能: 根据温度值进行处理,并在数码管显示
 189          输入参数: 无
 190          输出参数: 无
 191          ***************************************************************************/
 192          /*void Display_handle()
 193          {
 194                  uchar i,j,l;
 195              uchar code data_arry [11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};   /*  定义"0~9,-"
             -*/        
 196          //       Delay_Set(CN_10ms);
 197           //    g_temp_getcnt++;
 198          //  if(g_temp_getcnt>=200)
 199          
 200          //      {
 201          //         WDG_CONTR = 0x35;    
 202          //         l=(g_ADC_fan*6)/10;
 203          //         i = l%10;
 204          //         j = l/10;                                    */
 205          //         LE1 = 0;                     /* 开个位显示*/
 206          //         P2 = data_arry[i];           /* 显示个位*/
 207          //         Delay_Set(CN_5ms);
 208          //         LE1 = 1;        LE2 = 0;         /* 开十位显示*/
 209          //         P2 = data_arry[j];           /* 显示十位*/
 210          //         Delay_Set(CN_5ms);
 211          //         LE2 = 1;
 212          //      }
 213          //      }       */
 214          
 215          /***************************************************************************
 216          函数名称: main
 217          函数功能: 系统AD测试
 218          输入参数: 无
 219          输出参数: 无
 220          ***************************************************************************/
 221          /*void main()
 222          { // uint l;
 223             System_Init();
 224             for(;;)
 225             { 
 226             //   AD_FAN_CONT1 =1; AD_FAN_CONT2 =1;
 227                    Get_AD_Result ();
 228                    Display_handle();
 229                   // 
 230             }
 231          }          */
 232           /********************************************************************************************************
             -/
 233          
 234          
 235          
C51 COMPILER V7.50   FANTEST                                                               07/21/2006 16:14:00 PAGE 5   

 236          /***************************************************************************
 237          函数名称: DS18B20_Init
 238          函数功能: 数字温度传感器DS18B20初始化
 239          输入参数: 温度传感器号
 240          输出参数: DS18B20复位成功标志(全局变量)
 241          ***************************************************************************/
 242          void DS18B20_Init(uchar temp_number)
 243          {
 244   1        uchar i;
 245   1        uchar  j,k;
 246   1      
 247   1        i = 0;
 248   1        if(temp_number==CN_TEMP1)
 249   1        {
 250   2            AD_TEMP1 = 1;          /* 传感器输入端口1复位 */
 251   2            Delay_us(CN_45us);     /* 延时45us */
 252   2            AD_TEMP1 = 0;
 253   2            Delay_us(CN_525us);    /* 精确延时大于480us,取525us */
 254   2            AD_TEMP1 = 1;          /* 拉高端口 */
 255   2            Delay_us(CN_30us);
 256   2            k=0;                   /* 滤波计数器 */
 257   2            for(j=0;j<10;j++)
 258   2            {
 259   3               if(!AD_TEMP1)       /* 如果检测结果为0则初始化成功,为1则失败. */
 260   3               {
 261   4                  k++;             /* 检测到低电平加1. */
 262   4               }
 263   3            }
 264   2            if(k>3)
 265   2                gb_18b20init1_ok = TRUE; /* 复位成功. */
 266   2            else
 267   2                gb_18b20init1_ok = FALSE;/* 复位失败. 温感开路或温感损坏 */
 268   2            Delay_us(CN_200us);
 269   2            k=0;
 270   2            AD_TEMP1=1; /* 输入允许. */
 271   2            if(TRUE==gb_18b20init1_ok)
 272   2            {
 273   3                for(j=0;j<10;j++)
 274   3                {
 275   4                          
 276   4                   if(AD_TEMP1)        /* 如果检测结果为1则初始化成功,为0则失败. */
 277   4                   {
 278   5                      k++;             /* 检测到高电平加1 */
 279   5                   }
 280   4                }
 281   3                if(k>3)
 282   3                   gb_18b20init1_ok = TRUE; /* 复位成功. */
 283   3                else
 284   3                   gb_18b20init1_ok = FALSE;/* 复位失败. 温感对地短路 */
 285   3            }
 286   2        }
 287   1        if(temp_number==CN_TEMP2)
 288   1        {
 289   2            AD_TEMP2 = 1;          /* 传感器输入端口2复位 */

⌨️ 快捷键说明

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