📄 main.lst
字号:
203 2 if(flashbit==2)
204 2 {
205 3 if(low1==0) low1=10;
206 3 low1--;
207 3 }
208 2 if(flashbit==3)
209 2 {
210 3 if(hi0==0) hi0=10;
211 3 hi0--;
212 3 }
213 2 if(flashbit==4)
214 2 {
215 3 if(hi1==0) hi1=10;
216 3 hi1--;
217 3 }
218 2 if(flashbit==5)
219 2 {
220 3 if(sec0==0) sec0=9;
221 3 sec0--;
222 3 }
223 2 if(flashbit==6)
224 2 {
225 3 if(sec1==0) sec1=6;
226 3 sec1--;
227 3 }
228 2 if(flashbit==7)
229 2 {
230 3 if(minute0==0) minute0=10;
231 3 minute0--;
232 3 }
233 2 if(flashbit==8)
234 2 {
235 3 if(minute1==0) minute1=6;
236 3 minute1--;
237 3 }
238 2 break;
239 2 case 3:
240 2 flashbit=0;
C51 COMPILER V8.18 MAIN 11/30/2009 13:35:23 PAGE 5
241 2 dispressure=0;
242 2 break;
243 2 }
244 1 HIlimit=hi0+hi1*10;
245 1 LOWlimit=low0+low1*10;
246 1 sec=minute1*600+minute0*60+sec1*10+sec0;
247 1 }
248 /////////////////////////////////////////////////////////////////////
249 void Task1(void *ppdata) reentrant //AD转换+串口显示任务
250 {
251 1 unsigned char xdata adcl,adch;
252 1
253 1 ppdata=ppdata; //防止警告
254 1 ET0=1; //开时钟节拍中断--根据杨屹文章更改
255 1 BITG=0;
256 1 SEGG=0;
257 1 PrintChar('H');
258 1 PrintChar('E');
259 1 PrintChar('L');
260 1 PrintChar('L');
261 1 PrintChar('O');
262 1 PrintChar('\r');
263 1 PrintChar('\n');
264 1
265 1 for(;;)
266 1 {
267 2 adcr=Get_data(); //AD转换
268 2 adcl=(adcr%10)|0x30;
269 2 adch=(adcr/10)|0x30;
270 2 PrintChar(adch); //发送AD转换结果
271 2 PrintChar(adcl);
272 2 PrintChar('\r');
273 2 PrintChar('\n');
274 2 flash=~flash;
275 2 OSTimeDly(OS_TICKS_PER_SEC/4);
276 2 }
277 1 }
278
279 void Task2(void *ppdata) reentrant //时钟任务
280 {
281 1 ppdata=ppdata;
282 1
283 1 for(;;)
284 1 {
285 2 sec++;
286 2 if(sec>5999) sec=0;
287 2 PrintChar('O');
288 2 PrintChar('K');
289 2 PrintChar('\r');
290 2 PrintChar('\n');
291 2 OSTimeDlyHMSM(0,0,0,999);
292 2 }
293 1 }
294
295 void Task3(void *ppdata) reentrant //报警任务
296 {
297 1 ppdata=ppdata;
298 1
299 1 for(;;)
300 1 {
301 2 if(adcr>HIlimit) //上限报警
302 2 {
C51 COMPILER V8.18 MAIN 11/30/2009 13:35:23 PAGE 6
303 3 CMOD=0x0c;
304 3 PCA_PWM1=0x00;
305 3 CCAP1H=0x10;
306 3 OSTimeDly(OS_TICKS_PER_SEC/4);
307 3 PCA_PWM1=0x03;
308 3 POSITIVE=0;
309 3 ALARM=0;
310 3 OSTimeDly(OS_TICKS_PER_SEC/2);
311 3 }
312 2 else if(adcr<LOWlimit) //下限报警
313 2 {
314 3 CMOD=0x00;
315 3 PCA_PWM1=0x00;
316 3 CCAP1H=0x40;
317 3 OSTimeDly(OS_TICKS_PER_SEC/2);
318 3 PCA_PWM1=0x03;
319 3 NEGATIVE =0;
320 3 ALARM=0;
321 3 OSTimeDly(OS_TICKS_PER_SEC);
322 3 }
323 2 else
324 2 {
325 3 POSITIVE=1;
326 3 NEGATIVE =1;
327 3 ALARM=1;
328 3 OSTimeDlyHMSM(0,0,5,0);
329 3 }
330 2 }
331 1 }
332
333 void Task4(void *ppdata) reentrant //数码管显示任务
334 {
335 1 unsigned char xdata disbuf[8]={0,0,0x31,0x63,0,0,0,0};
336 1
337 1 ppdata=ppdata;
338 1
339 1 for(;;)
340 1 {
341 2 sec0=(sec%60)%10;
342 2 sec1=(sec%60)/10;
343 2 minute0=(sec/60)%10;
344 2 minute1=(sec/60)/10;
345 2 disbuf[4]=LED[sec0]; //显示时间
346 2 disbuf[5]=LED[sec1];
347 2 disbuf[6]=LED[minute0];
348 2 disbuf[7]=LED[minute1];
349 2 if(dispressure==0) //当前压力
350 2 {
351 3 disbuf[0]=LED[adcr%10];
352 3 disbuf[1]=LED[adcr/10];
353 3 disbuf[2]=0x31;
354 3 disbuf[3]=0x63;
355 3 }
356 2 else //显示报警上下限
357 2 {
358 3 disbuf[0]=LED[LOWlimit%10];
359 3 disbuf[1]=LED[LOWlimit/10];
360 3 disbuf[2]=LED[HIlimit%10];
361 3 disbuf[3]=LED[HIlimit/10];
362 3 }
363 2
364 2 displayLED(disbuf,flashbit); //闪烁控制
C51 COMPILER V8.18 MAIN 11/30/2009 13:35:23 PAGE 7
365 2 }
366 1 }
367
368 void Task5(void *ppdata) reentrant //按键任务
369 {
370 1 ppdata=ppdata;
371 1
372 1 for(;;)
373 1 {
374 2 getkey(); //获取按键
375 2 if(key_num!=0xff) //确保每按一次按键执行一次按键处理程序
376 2 {
377 3 keyhandle(); //处理按键
378 3 key_num=0xff;
379 3 }
380 2 OSTimeDly(10);
381 2 }
382 1 }
383
384 void main(void)
385 {
386 1 OSInit(); //操作系统初始化
387 1 InitHardware(); //硬件初始化
388 1
389 1 //FirstSem=OSSemCreate(0); //定义一个信号量
390 1 //FirstMbox=OSMboxCreate((void*)0); //定义一个邮箱
391 1
392 1 OSTaskCreate(Task1,(void*)0,&Task1Stk[0],0);//创建5个任务
393 1 OSTaskCreate(Task2,(void*)0,&Task2Stk[0],1);
394 1 OSTaskCreate(Task3,(void*)0,&Task3Stk[0],3);
395 1 OSTaskCreate(Task4,(void*)0,&Task4Stk[0],4);
396 1 OSTaskCreate(Task5,(void*)0,&Task5Stk[0],2);
397 1
398 1 OSStart(); //启动操作系统
399 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2450 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = 343 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -