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

📄 bat_ctrl_12v_24v.lst

📁 光电控制器的源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   BAT_CTRL_12V_24V                                                      12/27/2008 14:12:22 PAGE 1   


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

line level    source

   1          /****************************************************************/
   2          /*功能:12v/24v自适应太阳能板充电控制器,跳线选择模式,无数码管显示。                         
   3          /*版本:v1.0                           
   4          /*设计人:ye_zhenfeng              
   5          /*编写日期:07-07-30
   6          /*最后修改日期:07-08-23                           
   7          /*状态:PASSED                                   
   8          /****************************************************************/
   9          
  10          /*头文件定义*/
  11          #include <reg915.h>
  12          
  13          /*特殊寄存器定义*/
  14          sbit P00 = P0^0;
  15          sbit P01 = P0^1;
  16          sbit P04 = P0^4;
  17          sbit P05 = P0^5;
  18          sbit P10 = P1^0;
  19          sbit P11 = P1^1;
  20          sbit P12 = P1^2;
  21          sbit P13 = P1^3;
  22          sbit P14 = P1^4;
  23          
  24          /*预定义部分*/
  25          #define uchar unsigned char
  26          #define uint  unsigned int
  27          
  28          #define AD_NUM 32
  29          //24v
  30          #define TINGCHONG24 87*2        //14.8V*2/3.178V
  31          #define GUOCHONG24  83*2        //14.0V*2
  32          #define YUNCHONG24  80*2        //13.4V*2
  33          #define YUNFANG24   72*2        //12.0V*2
  34          #define GUOFANG24   64*2        //10.8V*2
  35          #define MIEDENG24   20*2        // 3.5V*2
  36          #define LIANGDENG24 14*2        // 2.5V*2
  37          #define NODELAY24    4*2        //0.7v*2
  38          //边界
  39          #define EDGE      110   //18.5V
  40          //12v
  41          #define TINGCHONG12 87  //14.8V/3.178V
  42          #define GUOCHONG12  83  //14.0V
  43          #define YUNCHONG12  80  //13.4V
  44          #define YUNFANG12   72  //12.0V
  45          #define GUOFANG12   64  //10.8V
  46          #define MIEDENG12   20  // 3.5V
  47          #define LIANGDENG12 14  // 2.5V
  48          #define NODELAY12   4           //0.7v
  49          
  50          #define DELAY_MIN 1*8000        //1min  
  51          /*全局变量定义*/
  52          struct ad{
  53          uchar index;
  54          uchar BatAd[AD_NUM];
  55          uchar SunAd[AD_NUM];
C51 COMPILER V7.50   BAT_CTRL_12V_24V                                                      12/27/2008 14:12:22 PAGE 2   

  56          }AdValue;
  57          
  58          uchar SunValue,BatValue;        //光电池、蓄电池AD采样值
  59          uchar Seconds,Minutes,Hours;    //实时时钟计数变量
  60          bit ClrFlag;            //Hours清0允许位,'1'为允许
  61          bit PowerFlag;          //允许放电标志,‘1’为允许
  62          bit CtrlFlag;           //允许光板低电压打开负荷标志
  63          bit StopFlag;           //停允冲标志
  64          bit enL2,enL3;
  65          bit enPWM;
  66          bit enDelay1,enDelay2;
  67          uchar L2Delay,L3Delay;  //用于L2、L3闪烁定时,计数50次,越0.5s
  68          uint Delay4min1,Delay4min2;     //用于延时4min计数,计数20000次
  69          
  70          /*函数声明部分*/
  71          void Init_Var(void);
  72          void Init_IO(void);
  73          void Init_AD(void);
  74          void Init_Timer(void);
  75          void Init_RTC(void);
  76          void Init_WDT(void);
  77          void Init_Interrupt(void);
  78          void Init_All(void);
  79          uchar Get_Mode(void);
  80          void GetAd(void);
  81          void Main_Logic12(uchar);
  82          void Main_Logic24(uchar);
  83          void Clr_Dog(void);
  84          void Led_Ctrl(bit,uchar);
  85          bit Delay_4min(bit);
  86          
  87          /*中断服务函数*/
  88          /*********************************************************************/
  89          /*函数名:
  90          /*功能:
  91          /*输入参数:
  92          /*返回值:
  93          /*调用函数:
  94          /*被调用函数:
  95          /*编写日期:
  96          /*最后修改日期:
  97          /********************************************************************/
  98          void T0_ISR() interrupt 1
  99          {
 100   1              TH0 = 0x80;             //
 101   1              TL0 = 0x00;             //
 102   1              if(enPWM)
 103   1              {
 104   2                      P14 = ~P14;
 105   2              }
 106   1              L2Delay++;
 107   1              L3Delay++;
 108   1              if(L2Delay>=50)
 109   1              {
 110   2                      L2Delay = 0;
 111   2                      if(enL2)
 112   2                              P01 = ~P01;
 113   2              }
 114   1              if(L3Delay>=50)
 115   1              {
 116   2                      L3Delay = 0;
 117   2                      if(enL3)
C51 COMPILER V7.50   BAT_CTRL_12V_24V                                                      12/27/2008 14:12:22 PAGE 3   

 118   2                              P00 = ~P00;
 119   2              }
 120   1      }
 121          /*********************************************************************/
 122          /*函数名:
 123          /*功能:
 124          /*输入参数:
 125          /*返回值:
 126          /*调用函数:
 127          /*被调用函数:
 128          /*编写日期:
 129          /*最后修改日期:
 130          /********************************************************************/
 131          void T1_ISR() interrupt 3
 132          {
 133   1              TH1 = 0x80;             //
 134   1              TL1 = 0x00;             //
 135   1              if(enDelay1)
 136   1                      Delay4min1++;
 137   1              if(enDelay2)
 138   1                      Delay4min2++;
 139   1      }
 140          /*********************************************************************/
 141          /*函数名:
 142          /*功能:
 143          /*输入参数:
 144          /*返回值:
 145          /*调用函数:
 146          /*被调用函数:
 147          /*编写日期:
 148          /*最后修改日期:
 149          /********************************************************************/ 
 150          void RTC_ISR() interrupt 10
 151          {
 152   1      EA = 0;
 153   1      if((RTCCON&0x80)==0x80)
 154   1      {
 155   2              RTCCON &= 0x63;
 156   2              if(Minutes == 59)
 157   2              {
 158   3                      if(Seconds == 59)
 159   3                      {
 160   4                              Seconds = 0;
 161   4                              Minutes = 0;
 162   4                              Hours ++;
 163   4                      }
 164   3                      else
 165   3                      {
 166   4                      Seconds ++;
 167   4                      }
 168   3              }
 169   2              else
 170   2              {
 171   3                      if(Seconds == 59)
 172   3                      {
 173   4                              Seconds = 0;
 174   4                              Minutes ++;
 175   4                      }
 176   3                      else
 177   3                      {
 178   4                      Seconds ++;
 179   4                      }
C51 COMPILER V7.50   BAT_CTRL_12V_24V                                                      12/27/2008 14:12:22 PAGE 4   

 180   3              }
 181   2      EA = 1;
 182   2      }
 183   1      }
 184          /*********************************************************************/
 185          /*函数名:
 186          /*功能:
 187          /*输入参数:
 188          /*返回值:
 189          /*调用函数:
 190          /*被调用函数:
 191          /*编写日期:
 192          /*最后修改日期:
 193          /********************************************************************/ 
 194          void AD_ISR() interrupt 14
 195          {
 196   1              ADCON1 &= 0xF7;
 197   1      
 198   1              AdValue.BatAd[AdValue.index] = AD1DAT0;
 199   1              AdValue.SunAd[AdValue.index] = AD1DAT1;
 200   1              AdValue.index ++;
 201   1              if(AdValue.index >= AD_NUM)
 202   1                      AdValue.index = 0;
 203   1              
 204   1      }
 205          
 206          /*主函数部分*/
 207          /*********************************************************************/
 208          /*函数名:main()
 209          /*功能:主函数
 210          /*输入参数:无
 211          /*返回值:无
 212          /*编写日期:
 213          /*最后修改日期:
 214          /********************************************************************/ 
 215          void main()                          
 216          {
 217   1              uint i,j;
 218   1              uchar TimeMode;
 219   1              bit VoltFlag;
 220   1      
 221   1              Init_All();
 222   1              i = 10000;
 223   1              j = 40;
 224   1              while(i--)
 225   1                      while(j--)
 226   1                              Clr_Dog();                              //延时等ad采样稳定
 227   1              GetAd();
 228   1              if(BatValue > EDGE)
 229   1                      VoltFlag = 1;

⌨️ 快捷键说明

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