📄 main.lst
字号:
253 2 }
254 1 rectangle(SAD2,x-1,y,x+nu*8+8,y+16,0);
255 1 myprintf(SAD1,TA_LEFT,x+nu*8,y," ");
256 1 keystaut=0;
257 1 return(1);
258 1 }
259
260 //输入系统时间及网络信息
261 void setsysini() reentrant
262 {
263 1 unsigned char tem;
264 1
265 1 clssed(SAD1);
266 1 clssed(SAD2);
267 1 linex(SAD1,60,70,250);
268 1 linex(SAD1,80,70,250);
269 1 linex(SAD1,122,70,250);
270 1
271 1 liney(SAD1,70,60,122);
272 1 liney(SAD1,250,60,122);
273 1
274 1 myprintf(SAD1,TA_CENTER,160,62,"系统时钟设定");
275 1 myprintf(SAD1,TA_LEFT,90,85,"当前日期:");
276 1 myprintf(SAD1,TA_LEFT,90,104,"当前时间:");
277 1
278 1 readtimer(disstr,1);
279 1 myprintf(SAD1,TA_LEFT,165,85,disstr);
280 1 readtimer(disstr,0);
281 1 myprintf(SAD1,TA_LEFT,165,104,disstr);
282 1
283 1 rectangle(SAD2,90,83,160,101,1);
284 1 tem=0;
285 1 while(1)
286 1 {
287 2 OSSemPend(KeySem,0,&lcnerr);
288 2 if(key==INPUT)//输入键
289 2 {
290 3 switch(tem)
291 3 {
292 4 case 0:
293 4 if(gettimestr(165,84+tem*19,8,1))
294 4 settimer(disstr,1);
295 4 break;
296 4 case 1:
297 4 if(gettimestr(165,84+tem*19,8,0))
298 4 settimer(disstr,0);
299 4 break;
300 4 default:
301 4 break;
302 4 }
303 3 }
C51 COMPILER V8.02 MAIN 09/21/2008 12:29:52 PAGE 6
304 2 else
305 2 {
306 3 if(key==UP||key==DOWN)//上下方向键
307 3 {
308 4 if(key==DOWN)
309 4 {
310 5 rectangle(SAD2,90,83+tem*19,160,101+tem*19,0);
311 5 if(tem<1)
312 5 tem++;
313 5 else
314 5 tem=0;
315 5 rectangle(SAD2,90,83+tem*19,160,101+tem*19,1);
316 5 }
317 4 else
318 4 {
319 5 rectangle(SAD2,90,83+tem*19,160,101+tem*19,0);
320 5 if(tem>0)
321 5 tem--;
322 5 else
323 5 tem=1;
324 5 rectangle(SAD2,90,83+tem*19,160,101+tem*19,1);
325 5 }
326 4 }
327 3 else
328 3 {
329 4 if(key==ENTER)
330 4 {
331 5 return;
332 5 }
333 4 else
334 4 {
335 5 if(key==ESC)
336 5 return;
337 5 }
338 4 }
339 3 }
340 2 }
341 1 }
342 void showlogo() reentrant
343 {
344 1 unsigned char lcncount;
345 1 xdata union {unsigned int add;
346 1 struct {unsigned char addhi;unsigned char addlo;}addhalf;
347 1 }curadd;
348 1 curadd.add=SAD3;
349 1 LCDORDER=0X46; /*设置光标地址*/
350 1 LCDDATA=curadd.addhalf.addlo;
351 1 LCDDATA=curadd.addhalf.addhi;
352 1 LCDORDER=0X4C;
353 1 LCDORDER=0X42;
354 1 curadd.add=0;
355 1 while(curadd.add<sizeof(Bmp015))
356 1 {
357 2 if(Bmp015[curadd.add]==0)
358 2 {
359 3 curadd.add++;
360 3 lcncount=Bmp015[curadd.add];
361 3 while(lcncount)
362 3 {
363 4 LCDDATA=0;
364 4 lcncount--;
365 4 }
C51 COMPILER V8.02 MAIN 09/21/2008 12:29:52 PAGE 7
366 3 curadd.add++;
367 3 }
368 2 else
369 2 {
370 3 LCDDATA=Bmp015[curadd.add];
371 3 curadd.add++;
372 3 }
373 2 }
374 1 }
375 //系统初始化
376 void sys_init(void *lcnpdata) reentrant
377 {
378 1 unsigned char tem,tem1;
379 1
380 1 lcnpdata = lcnpdata;
381 1 ADNUMBER1 = 1;
382 1 ADNUMBER2 = 1;
383 1 ADNUMBER3 = 1;
384 1 //8279和SED1330初始化
385 1 COM8279=0xd1; //总清除命令160us
386 1 initlcd();
387 1 showlogo();
388 1 clssed(SAD1);
389 1 clssed(SAD2);
390 1 COM8279=0x08;COM8279=0x32; //键盘,显示方式,时钟分频
391 1 initcount();
392 1 if(onpower!=0x55)
393 1 {
394 2 keytype=0;
395 2 onpower=0x55;
396 2 }
397 1
398 1
399 1 tem = 0x55;
400 1 for(tem1=0;tem1<10;tem1++)
401 1 {
402 2 Writei2c(&tem,tem1+160,1);
403 2 }
404 1 for(tem1=0;tem1<10;tem1++)
405 1 {
406 2 Readi2c(&tem,tem1+160,1);
407 2 if(tem != 0x55)
408 2 ok24c02 = 0;
409 2 }
410 1 //创建键盘信号量
411 1 KeySem=OSSemCreate(0);
412 1
413 1 tem=0x81;//1024
414 1 Writei2ctime(&tem,0x0D,0x01);
415 1
416 1 #if OS_TASK_STAT_EN
OSStatInit();
#endif
419 1 OSTaskCreate(mysecondtask, (void *)0, &mysecondtask_Stk[0],3);
420 1 OSTaskCreate(lcngetkey, (void *)0, &lcngetkey_Stk[0],4);
421 1 OSTaskCreate(gettesttype, (void *)0, &gettesttype_Stk[0],5);
422 1 init_serial();
423 1 //消除警告
424 1 OSVersion();
425 1 OSTaskDelReq(OS_PRIO_SELF);
426 1 //消除警告
427 1 OSTaskDel(OS_PRIO_SELF);
C51 COMPILER V8.02 MAIN 09/21/2008 12:29:52 PAGE 8
428 1 }
429
430 void gettesttype(void *lcnpdata) KCREETRANT
431 {
432 1 unsigned char lastselect = 0;
433 1 unsigned char tem = 0;
434 1
435 1 lcnpdata = lcnpdata;
436 1 clssed(SAD1);
437 1 clssed(SAD2);
438 1 linex(SAD1,39,48,270);
439 1 myprintf(SAD1,TA_CENTER,160,20,"通用板系统调试程序");
440 1 myprintf(SAD1,TA_CENTER,160,90, "用18键通用键盘");
441 1 myprintf(SAD1,TA_CENTER,160,120,"用20键通用键盘");
442 1 myprintf(SAD1,TA_CENTER,160,200,"唐山百川智能机器有限公司");
443 1 rectangle(SAD2,0,222,319,239,1);
444 1 readtimer(disstr,1);
445 1 myprintf(SAD1,TA_LEFT,186,223,disstr);
446 1 myprintf(SAD1,TA_LEFT,2,223,"按键选择键盘");
447 1 lastselect = keytype;
448 1 rectangle(SAD2,103,88+lastselect*30,217,108+lastselect*30,1);
449 1 LCDORDER=0X59;
450 1 LCDDATA=0X14;
451 1 while(1)
452 1 {
453 2 OSSemPend(KeySem,2,&lcnerr);
454 2 if(lcnerr==OS_NO_ERR)
455 2 {
456 3 rectangle(SAD2,103,88+lastselect*30,217,108+lastselect*30,0);
457 3 if(lastselect > 0)
458 3 {
459 4 keytype = 0;
460 4 lastselect = 0;
461 4 }
462 3 else
463 3 {
464 4 keytype = 1;
465 4 lastselect = 1;
466 4 }
467 3 rectangle(SAD2,103,88+lastselect*30,217,108+lastselect*30,1);
468 3 }
469 2 if(bSecond)
470 2 {
471 3 tem++;
472 3 if(tem > 4)
473 3 {
474 4 OSTaskCreate(main1test, (void *)0, &main1test_Stk[0],6);
475 4 OSTaskDel(OS_PRIO_SELF);
476 4 }
477 3 bSecond=0;
478 3 readtimer(disstr,0);
479 3 myprintf(SAD1,TA_LEFT,254,223,disstr);
480 3 }
481 2 }
482 1 }
483
484 void lcngetkey(void *lcnpdata) reentrant
485 {
486 1 unsigned char k;
487 1 unsigned char newkey = 1;
488 1 lcnpdata=lcnpdata;
489 1 while(1)
C51 COMPILER V8.02 MAIN 09/21/2008 12:29:52 PAGE 9
490 1 {
491 2 OSTimeDly(OS_TICKS_PER_SEC/10);
492 2 if(COM8279 & 0x0f)
493 2 {
494 3 if(newkey)
495 3 {
496 4 if(COM8279 & 0x0f)
497 4 {
498 5 COM8279=0x50; //读FIFO命令自动地址增量
499 5 k=DAT8279;
500 5 k=k&0x1f; //取键盘数据低5位(32位键盘模式)
501 5 if(keytype == 0)
502 5 {
503 6 key=keytab18[k+keystaut];
504 6 }
505 5 else
506 5 {
507 6 key=keytab20[k+keystaut];
508 6 }
509 5 keyinterrupt = 0;
510 5 OSSemPost(KeySem);
511 5 newkey = 0;
512 5 }
513 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -