📄 sunpcontrol_main.lst
字号:
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 + -