📄 led.lst
字号:
288 ISP_TRIG=0x00;
289 return Error;
290 }
291 in_addr++; // 指向下一个字节
292 }
293 ISP_ADDRL=0xff;
294 ISP_ADDRH=0xff;
295 ISP_CONTR=0x00;
296 ISP_CMD=0x00;
297 ISP_TRIG=0x00;
298 return Ok;
299 }
300
301 /**************************************************************************
302 * 函数原型: void DogReset(void)
303 * 功 能: 重新设置看门狗
C51 COMPILER V7.10 LED 10/22/2007 09:39:59 PAGE 6
304 **************************************************************************/
305 void DogReset(void) reentrant{
306 1
307 1 #if STC89C58
308 1 #if STCSPD_1
WDT_CONTR=0x35;
#elif STCSPD_2
311 1 WDT_CONTR=0x36;
312 1 #endif
313 1 #elif W77E58
TA=0xaa;
TA=0x55;
RWT=1;
_nop_();
_nop_();
#endif
320 1 }
321
322 /**************************************************************************
323 * 函数原型: void Dog_Init(void)
324 * 功 能: 看门狗设置
325 **************************************************************************/
326 void Dog_Init(void){
327 1
328 1 #if STC89C58
329 1 #if STCSPD_1
WDT_CONTR=0x34; // 2秒
#elif STCSPD_2
332 1 WDT_CONTR=0x35; // 2秒
333 1 #endif
334 1 #elif W77E58
CKCON&=0x3f; // 3秒
CKCON|=0xc0;
/* _nop_();
_nop_();
_nop_();
TA=0xaa;
TA=0x55;
WDCON=0;*/
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TA=0xaa;
TA=0x55;
WDCON=2;
#endif
354 1 }
355
356 /**************************************************************************
357 * 函数原型: void delay_20us(uint Count)
358 * 功 能: 延时Count个20us
359 **************************************************************************/
360 /*
361 void delay_20us(register uint Count){
362
363 register uchar T;
364
365 for(;Count>0;Count--){
C51 COMPILER V7.10 LED 10/22/2007 09:39:59 PAGE 7
366 for(T=0;T<5;T++){
367 #if STC89C58
368 #if STCSPD_1
369 // STC89C58,22.1184MHz晶振,12分频,此时延时准确
370 ;
371 #elif STCSPD_2
372 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
373 _nop_(); _nop_(); _nop_();
374 #endif
375 #elif W77E58
376 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
377 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
378 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
379 _nop_();
380 #endif
381 }
382 DogReset();
383 }
384 }
385
386 /**************************************************************************
387 * 函数原型: void delay_ms(uint Count)
388 * 功 能: 延时Count个ms
389 **************************************************************************/
390 void delay_ms(register uint Count){
391 1
392 1 register uchar T;
393 1
394 1 for(;Count>0;Count--){
395 2 for(T=0;T<250;T++){
396 3 #if STC89C58
397 3 #if STCSPD_1
// STC89C58,22.1184MHz晶振,12分频,此时延时准确
_nop_(); _nop_(); _nop_(); _nop_();
#elif STCSPD_2
401 3 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
402 3 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
403 3 _nop_(); _nop_();
404 3 #endif
405 3 #elif W77E58
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_();
#endif
411 3 }
412 2 DogReset();
413 2 }
414 1 }
415
416 /***********************************************************************************
417 函数名:void timeRead(void)
418 功能:保存参数
419 返回值:
420 ***********************************************************************************/
421 void timeRead(void){
422 1 vSecond=eeprom_read(vSecondAddr);
423 1 vMinute=eeprom_read(vMinuteAddr);
424 1 vHour=eeprom_read(vHourAddr);
425 1 }
426
427 /***********************************************************************************
C51 COMPILER V7.10 LED 10/22/2007 09:39:59 PAGE 8
428 函数名:void timeSave(void)
429 功能:保存参数
430 返回值:
431 ***********************************************************************************/
432 void timeSave(void){
433 1 eeprom_eares(UseAddr);
434 1 eeprom_write(vSecondAddr, vSecond);
435 1 eeprom_write(vMinuteAddr, vMinute);
436 1 eeprom_write(vHourAddr, vHour);
437 1 }
438
439 /***********************************************************************************
440 函数名:uchar keyscan(void)
441 功能:按键扫描
442 返回值:
443 ***********************************************************************************/
444 uchar keyscan(void){
445 1
446 1 return(~P2&0x38);
447 1
448 1 }
449
450 /**************************************************************************
451 * 函数原型: uchar ButtonAction(void);
452 * 功 能: 按钮动作类型
453 返 回 值: 当按钮为空, 返回值为vBtnType_Null=0
454 当按钮按下时,返回值为vBtnType_Push=1
455 当按钮弹起时,按回值为vBtnType_Pop =2
456 当按钮长按时,返回值为vBtnType_Keep=3
457 *************************************************************************/
458 uchar keyAction(void){
459 1
460 1 uchar cButton;
461 1
462 1 cButton=keyscan();
463 1 if(cButton==cBtnVal){
464 2 // 无按键
465 2 if(cButton==vBtnVal_Null){
466 3 return(vBtnAct_Null);
467 3 }
468 2 // 按键保持
469 2 else{
470 3 return(vBtnAct_Keep);
471 3 }
472 2 }
473 1 else if(cButton==vBtnVal_All){
474 2 return(vBtnAct_All);
475 2 }
476 1 /* else if(cButton==vBtnVal_Debug){
477 1 return(vBtnAct_Debug);
478 1 }*/
479 1 else{
480 2 delay_ms(10);
481 2 if(keyscan()==cButton){
482 3 // 按键弹起
483 3 if(cButton==vBtnVal_Null){
484 4 cBtnValPre=cBtnVal;
485 4 cBtnVal=cButton;
486 4 return(vBtnAct_Pop);
487 4 }
488 3 // 按键按下
489 3 else{
C51 COMPILER V7.10 LED 10/22/2007 09:39:59 PAGE 9
490 4 cBtnValPre=cBtnVal;
491 4 cBtnVal=cButton;
492 4 return(vBtnAct_Push);
493 4 }
494 3 }
495 2 }
496 1 }
497
498 /**************************************************************************
499 * 函数原型: bit ButtonKeep(uint iTime);
500 * 功 能: 检测按钮按下是否保持了指定的时间,单位为毫秒
501 返 回 值: 在指定时间内,按钮弹起,则返回0
502 否则返回1
503 *************************************************************************/
504 /*
505 bit keyKeep(uint iTime){
506
507 uint iNum;
508
509 for(iNum=0;iNum<iTime/50;iNum++){
510 delay_ms(50);
511 if(keyAction()==vBtnAct_Pop){
512 return(0);
513 }
514 }
515 return(1);
516 }
517 /***********************************************************************************
518 函数名:void keyhandle(void)
519 功能:按键处理
520 返回值:
521 ***********************************************************************************/
522 void keyhandle(void){
523 1 uchar cKeyType;
524 1
525 1 // 按键单按时取值
526 1 cKeyType=keyAction();
527 1 if(cKeyType==vKeyAct_Push){
528 2 cDY_KeyKeep=0xff;
529 2 switch(cBtnVal){
530 3 case vBtnVal_ST:
531 3 timeRead();
532 3 vSecond=0;
533 3 eeprom_write(vSecondAddr, 0);
534 3 /* eeprom_eares(UseAddr);
535 3 eeprom_write(UseAddr, 0x01);
536 3 b_Run=!b_Run;
537 3 cDY_KeyKeep=50;*/
538 3 break;
539 3 case vBtnVal_Up:
540 3 timeRead();
541 3 vMinute=0;
542 3 eeprom_write(vMinuteAddr, 0);
543 3 /* eeprom_eares(UseAddr);
544 3 eeprom_write(UseAddr, 0x02);
545 3 cDY_KeyKeep=50;*/
546 3 break;
547 3 case vBtnVal_Down:
548 3 timeRead();
549 3 vHour=0;
550 3 eeprom_write(vHourAddr, 0);
551 3 /* eeprom_eares(UseAddr);
C51 COMPILER V7.10 LED 10/22/2007 09:39:59 PAGE 10
552 3 eeprom_write(UseAddr, 0x03);
553 3 cDY_KeyKeep=50;*/
554 3 break;
555 3 default:
556 3 break;
557 3 }
558 2 }
559 1 }
560
561 /***********************************************************************************
562 函数名:void DisplayNum(uchar cNumber)
563 功能:显示子程序
564 返回值:
565 ***********************************************************************************/
566 /*
567 void DisplayNum(uchar cNumber){
568 Led_Data[cNumber];
569 }
570
571 /***********************************************************************************
572 函数名:uchar getcode(uchar i)
573 功能:根据共阴极字型编码表获取0~9,A~B字型代码
574 返回值:
575 ***********************************************************************************/
576 /*
577 uchar getcode(uchar i){
578 uchar cTemp;
579 switch (i){
580 case 0: cTemp=0x05; break; //
581 case 1: cTemp=0xDD; break; //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -