📄 adc.lst
字号:
154 1 char fuha;
155 1 buff = 0;
156 1 if(disptimer>3000) //disptimer放在定时中断中递减
157 1 {
158 2 disptimer=0; //3秒显示切换定时值
159 2 led_fleg=led_fleg^1; //每执行一次,标志改变一次
160 2 }
161 1 else if(led_fleg==1)
162 1 {
163 2 bai = l_bai; //流量百位
164 2 shi = l_shi; //流量十位
165 2 ge = l_ge; //流量个位
166 2 fuha= 10;
167 2 }
168 1 else
169 1 { //百位不显示,段码送全1
170 2 bai = t_bai;
171 2 shi = t_shi; //温度十位
172 2 ge = t_ge; //温度个位
173 2 fuha= 11;
174 2 }
175 1 //*********显示位选择**********
176 1 LED_S0 =1; //disable all bits
177 1 LED_S1 =1; //关显示
178 1 LED_S2 =1;
179 1 LED_S3 =1;
C51 COMPILER V8.05a ADC 06/28/2008 09:03:13 PAGE 4
180 1 LED_S4 =1;
181 1 switch (scan) //
182 1 {
183 2 case 0: //s4显示设置脉冲计数
184 2 warter(); //led dynamic scan
185 2 LED_S0 =0;
186 2 break;
187 2 case 1:
188 2 buff=table[ge]; //
189 2 send_port(); //显示段送端口
190 2 LED_S1 =0;
191 2 break;
192 2 case 2:
193 2 if(bai||shi>0)
194 2 {
195 3 buff=table[shi]; //
196 3 send_port(); //显示段送端口
197 3 // LED_H = 1; //小数点显示
198 3 LED_S2 =0;
199 3 }
200 2 else
201 2 LED_S2 =1;
202 2 break;
203 2 case 3:
204 2 if(bai>0)
205 2 {
206 3 buff=table[bai]; //
207 3 send_port(); //显示段送端口
208 3 LED_S3 =0;
209 3 }
210 2 else
211 2 LED_S3 =1;
212 2 break;
213 2 case 4:
214 2 buff=table[fuha]; //改A字码为L(x038),B为C符号
215 2 send_port(); //显示段送端口
216 2 LED_S4 =0;
217 2 break;
218 2 }
219 1 scan++;
220 1 if(scan==5) scan=0;
221 1 }
222 /*************定时器1中断服务*********/
223 void Timer0Srv() interrupt 1 //定时器1ms定时中断
224 {
225 1 TH0 =(65536-1000)/256;
226 1 TL0 =(65536-1000)%256; //定时器0初装值定时1ms
227 1 TimeAdd++; //最大计数值:65535ms
228 1 TimeSub--; //最大计数值:256ms
229 1 disptimer++; //显示计时
230 1 // warter();
231 1 Disp(); //定时器中断时扫描显示一次
232 1 }
233 void AD_DATA() //InterruptSrv()interrupt 5 using 0
234 {
235 1
236 1 // int adc=0;
237 1
238 1 /* ADC_CONTR &=CLEAR_ADC_INTR; //zhouhua
239 1 ad =ADC_DATA;
240 1 ad <<=2;
241 1 ad |=(ADC_LOW2)&0x03;
C51 COMPILER V8.05a ADC 06/28/2008 09:03:13 PAGE 5
242 1 gTemperature=LookupTemperatureTable(ad);
243 1
244 1 WORD readadc(void) //shenkaiyou
245 1 { WORD adc_result;
246 1 adc_result=0;
247 1 ADC_DATA=0;
248 1 ADC_LOW2=0x00; //need further test
249 1 ADC_CONTR|=ADC_START;
250 1 while(!(ADC_CONTR&ADC_FLAG)) ;
251 1 ADC_CONTR&=~ADC_FLAG;//ADC_START;
252 1 adc_result|=ADC_DATA<<2;
253 1
254 1 //adc_result|=ADC_DATA;
255 1 //adc_result =adc_result<<2;
256 1 adc_result|=ADC_LOW2;
257 1 //adc_result&=0x3ff;//0615
258 1 return(adc_result);
259 1 }
260 1 查表值I等于温度值
261 1 for(i=0;i<102;i++) //108
262 1
263 1
264 1 */
265 1 int adc;
266 1 char i;
267 1 if(ADC_CONTR&&0x10>0) //查询AD转换标志是否建立
268 1 {
269 2 adc =ADC_DATA;
270 2 adc <<=2;
271 2 adc |=(ADC_LOW2)&0x03; //&运算是只保留后2位,前六位置0,10位AD值
272 2 for(i=0;i<102;i++)
273 2 {
274 3 if(T_table[i]<adc) //AD值查表得到温度值
*** ERROR C202 IN LINE 274 OF ADC.C: 'T_table': undefined identifier
275 3 {
276 4 temperaturn=i;
277 4 break;
278 4 }
279 3 }
280 2
281 2 t_bai =adc/100;
282 2 t_shi =adc%100/10; //温度十位
283 2 t_ge =adc%10;
284 2 ADC_CONTR=0x88; //加ADC电源,清ADC-FLAG,重新开始AD转换
285 2
286 2 }
287 1 }
288 void main()
289 {
290 1 Initialization();
291 1 while(1)
292 1 {
293 2 J1 = 1;
294 2 J2 = 0;
295 2 l_bai = 1;
296 2 l_shi = 7;
297 2 l_ge = 4;
298 2 if(TimeAdd==500) //流水灯流动触发,0.5秒滚动一次
299 2 {
300 3 warter_led++;
301 3 TimeAdd=0;
302 3 }
C51 COMPILER V8.05a ADC 06/28/2008 09:03:13 PAGE 6
303 2 if(warter_led==4) (warter_led=0);
304 2 AD_DATA();
305 2
306 2 }
307 1 }
*** WARNING C316 IN LINE 307 OF adc.c: unterminated conditionals
C51 COMPILATION COMPLETE. 1 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -