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

📄 sunpcontrol_main.lst

📁 采用lpc935控制的太阳能控制器
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE SUNPCONTROL_MAIN
OBJECT MODULE PLACED IN SunPControl_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SunPControl_Main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "reg935.h"
   3          
   4          #include <stdio.h>                /* prototype declarations for I/O functions */
   5          
   6          
   7          #define uchar unsigned char
   8          #define uint unsigned int
   9          
  10          #define LIGHT_VALUE_HIGH        0X1A            //关灯的亮度阀值
  11          #define LIGHT_VALUE_LOW         0X10            //开灯的亮度阀值
  12          
  13          #define BATTER_VALUE_HIGH       0X81            //恢复放电阀值11
  14          #define BATTER_VALUE_LOW        0X7B            //过放电保护电压值,1
  15          #define CHARG_OUT_HIGH          0X9E            //过充断开电压14
  16          #define CHARG_OUT_LOW           0X95            //充电开启阀值13.
  17          
  18          #define OUT_PUT1        ICB                                     //P2^0
  19          #define OUT_PUT2        OCD                                     //P2^1
  20          #define OUT_PUT3        KB0                                     //P0^0
  21          #define DIS_LED         OCC                                     //P1^7
  22          #define CHARG_OUT       ICA                             //P2^7          
  23          #define SENSE_IN        OCA                                     //P2^6
  24          
  25          #define SD1                     OCB                                     //P1^6
  26          #define SD2                     XTAL1                           //P3^1
  27          #define SD3                     XTAL2                           //P3^0
  28          #define SD4                     INT1                            //P1^4
  29          #define SD5                     INT0                            //P1^3
  30          #define SD6                     T0                                      //P1^2
  31          #define SD7                     MOSI                            //P2^2
  32          #define SD8                     MISO                            //P2^3
  33          
  34          
  35          
  36          void CommInit()
  37          {
  38   1              SCON   = 0x52;                 /* initialize UART */
  39   1              BRGR0  = 0x70;                 /* 9600 baud, 8 bit, no parity, 1 stop bit */
  40   1              BRGR1  = 0x01;
  41   1              BRGCON = 0x03;
  42   1      }
  43          
  44          
  45          void IOInit()
  46          {
  47   1              P0M1=0x0E;              //P0.1和P0.2设置为仅为输入状态
  48   1              P0M2=0x00;
  49   1              P1M1=0x5C;              
  50   1              P1M2=0x00;
  51   1              P2M1=0x0C;              //P0端口设置为准双向
  52   1              P2M2=0x00;
  53   1              P3M1=0x03;              //P0端口设置为准双向
  54   1              P3M2=0x00;
  55   1      }
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 2   

  56          
  57          void ADInit()
  58          {
  59   1              ADINS=0x70;                     //0111 0000, 选择channel
  60   1              ADMODA=0x10;            //0001 0000, 选择转换工作模式:AD1单次转换模式
  61   1              ADMODB=0x00;            //500Khz < ADC CLK < 3.3Mhz,,
  62   1      }
  63          
  64          void TimerInit()
  65          {
  66   1              TH0 = 0X70;
  67   1              TL0 = 0X09;
  68   1              TMOD = 0X01;
  69   1              TR0 = 1;
  70   1              ET0 = 1;
  71   1      }
  72          
  73          void WDInit()
  74          {
  75   1              EA = 0;
  76   1      //      WDCON |= 0x04;
  77   1              WDL = 0xff;
  78   1              WFEED1 = 0xa5;
  79   1              WFEED2 = 0x5a;
  80   1      }
  81          
  82          void Delay(uint time_out)
  83          {
  84   1              uint i;
  85   1              while(time_out--)
  86   1                      for(i=0;i<300;i++);
  87   1      }
  88          
  89          void DeviceInit()
  90          {
  91   1              CommInit();
  92   1              IOInit();
  93   1              ADInit();
  94   1              TimerInit();
  95   1              Delay(500);
  96   1              WDInit();
  97   1              EA = 1;
  98   1      }
  99          
 100          static uchar clock_time_10ms,clock_time_1s,clock_time_1m,clock_time_1h;
 101          
 102          static uint time_10ms,dis_time;
 103          
 104          static uchar led_mode;
 105          
 106          void TimeInter() interrupt 1
 107          {
 108   1              TH0 =0x70;
 109   1              TL0 =0x09;
 110   1              time_10ms++;
 111   1              
 112   1              if(!led_mode)
 113   1                      DIS_LED = 1;
 114   1              else if(led_mode == 1)
 115   1                      DIS_LED = 0;
 116   1              else if(led_mode == 2 && time_10ms - dis_time >=30)     
 117   1              {
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 3   

 118   2                      dis_time = time_10ms;
 119   2                      DIS_LED = !DIS_LED;
 120   2              }
 121   1              else if(led_mode == 3 && time_10ms - dis_time >=100)
 122   1              {
 123   2                      dis_time = time_10ms;
 124   2                      DIS_LED = !DIS_LED;
 125   2              }
 126   1      
 127   1              clock_time_10ms++;
 128   1              if(clock_time_10ms>99)
 129   1              {
 130   2                      clock_time_10ms = 0;
 131   2                      clock_time_1s++;
 132   2                      if(clock_time_1s>59)
 133   2                      {
 134   3                              clock_time_1s = 0;
 135   3                              clock_time_1m++;
 136   3                              if(clock_time_1m>59)
 137   3                              {
 138   4                                      clock_time_1m = 0;
 139   4                                      clock_time_1h++;
 140   4                              }
 141   3                      }
 142   2              }
 143   1      }
 144          
 145          uchar BatterVolGet()
 146          {
 147   1              static uchar battervoltage[10],bv_len,i;
 148   1              uchar temp_value;
 149   1              uint add_buf;
 150   1      
 151   1              if(bv_len >=10)
 152   1                      bv_len = 0;
 153   1              ADCON1=0x05;            //选择转换触发模式;并立即启动
 154   1              battervoltage[bv_len++] = AD1DAT0;              //将AD转换获得的数据存入result
 155   1              ADCON1&=0xF7;                   //清除中断完成标志
 156   1      
 157   1              add_buf = 0;
 158   1              for(i=0;i<10;i++)
 159   1                      add_buf =add_buf+battervoltage[i];
 160   1              temp_value = add_buf/10;
 161   1      
 162   1              printf("电池电压值是= %fV   ",(float)(temp_value*0.0913));
 163   1              return temp_value;
 164   1      
 165   1      }
 166          
 167          
 168          uchar IrfVolGet()
 169          {
 170   1              static uchar Irfvoltage[10],bv_len,i;
 171   1              uchar temp_value;
 172   1              uint add_buf;
 173   1      
 174   1              if(bv_len >=10)
 175   1                      bv_len = 0;
 176   1              ADCON1=0x05;                                            //选择转换触发模式;并立即启动
 177   1              Irfvoltage[bv_len++] = AD1DAT1;         //将AD转换获得的数据存入result
 178   1              ADCON1&=0xF7;                                           //清除中断完成标志
 179   1      
C51 COMPILER V8.05a   SUNPCONTROL_MAIN                                                     06/06/2008 12:42:38 PAGE 4   

 180   1              add_buf = 0;
 181   1              for(i=0;i<10;i++)
 182   1                      add_buf =add_buf+Irfvoltage[i];
 183   1              temp_value = add_buf/10;
 184   1      
 185   1      //      printf("IRF电压值是= %fV   ",(float)(temp_value*0.0913));
 186   1              return temp_value;
 187   1      
 188   1      }
 189          
 190          
 191          uchar SolarVolGet()
 192          {
 193   1              static uchar solarvoltage[10],bv_len,i;
 194   1              uchar temp_value;
 195   1              uint add_buf;
 196   1              
 197   1              if(bv_len >=10)
 198   1                      bv_len = 0;
 199   1      
 200   1              ADCON1=0x05;                                                    //选择转换触发模式;并立即启动
 201   1              solarvoltage[bv_len++]=AD1DAT2;         //将AD转换获得的数据存入result
 202   1              ADCON1&=0xF7;                                                   //清除中断完成标志
 203   1      
 204   1      
 205   1              add_buf = 0;
 206   1              for(i=0;i<10;i++)
 207   1                      add_buf =add_buf+solarvoltage[i];
 208   1              temp_value = add_buf/10;
 209   1              printf("太阳能电池值是= %fV \n",(float)(temp_value*0.0913));
 210   1              return temp_value;
 211   1      
 212   1      }
 213          
 214          bit DayAndNightCheck(uchar temp_value)
 215          {
 216   1              static bit is_state;
 217   1              if((temp_value < LIGHT_VALUE_LOW) && is_state)
 218   1                      is_state = 0;
 219   1              else if((temp_value > LIGHT_VALUE_HIGH) && !is_state)
 220   1                      is_state = 1;
 221   1              return is_state;
 222   1      }
 223          
 224          
 225          void CLRWD()

⌨️ 快捷键说明

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