📄 main.lst
字号:
372 1 if(read_clock(0x8b) != xq)
373 1 {
374 2 xq = read_clock(0x8b); //读取星期
375 2 sel = (read_clock(0x8b))%16; //字节低4位的BCD码放入sel
376 2 if(sel==7) {lcdword(1,6,1,"周日");} //
377 2 if(sel==6) {lcdword(1,6,1,"周六");} //
378 2 if(sel==5) {lcdword(1,6,1,"周五");} //
379 2 if(sel==4) {lcdword(1,6,1,"周四");} //
380 2 if(sel==3) {lcdword(1,6,1,"周");lcdWriteData(0xc8);lcdWriteData(0xfd);}
381 2 if(sel==2) {lcdword(1,6,1,"周二");} //
382 2 if(sel==1) {lcdword(1,6,1,"周一");} //星期一
383 2 }
384 1 }
385 /***************************************************************/
386 //向LCD中填写小时数据
387 void lcm_w_hh(void)
388 {
389 1 if(read_clock(0x85) != hh)
390 1 {
391 2 hh = read_clock(0x85); // 读取小时
392 2 if (hh>0x07&&hh<0x22&&setting==0)
393 2 { beepBl(); } //整点报时音
394 2 }
395 1 lcdWriteCommand(0x9c);
396 1 lcdWriteData((hh/16)+0x30);
397 1 lcdWriteData(hh%16+0x30); //显示小时位
398 1 }
399 /***************************************************************/
400 //功能:向LCD中填写分钟
401 void lcm_w_mm(void)
402 {
403 1 if(read_clock(0x83) != mm)
404 1 {mm=read_clock(0x83);}
405 1 if(setting==0)Festival();//节日显示
406 1 lcdWriteCommand(0x9d);
407 1 lcdWriteData(0x3a); //显示":"
408 1 lcdWriteData((mm/16)+0x30);
409 1 lcdWriteData(mm%16+0x30); //显示分钟
410 1 lcdWriteData(0x3a); //":"
411 1 }
412 /***************************************************************/
413 //功能:刷新年月日星期时分
414 void Refresh(void)
415 {
416 1 lcm_w_mm(); //刷新 分
417 1 lcm_w_hh(); //刷新 小时
418 1 lcm_w_dd(); //刷新 日
419 1 lcm_w_xq(); //更新星期值
420 1 lcm_w_mo(); //刷新 月
421 1 lcm_w_yy(); //刷新 年
422 1 }
423 /***************************************************************/
424 //功能:实时更新LCD界面的各个数据
425 void lcd_Interface(void)
426 { uchar *p;
427 1 uint i=0;
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 8
428 1 uchar a=0,b=0,c=0;
429 1 if(read_clock(0x81) != ss)
430 1 { //判断是否需要更新
431 2 ss = read_clock(0x81); //更新数据
432 2 lcdWriteCommand(0x9f); //秒值在LCD上的写入位置
433 2 lcdWriteData((ss/16)+0x30); //写十位
434 2 lcdWriteData(ss%16+0x30); //写个位
435 2 led_secd=~led_secd; //LED闪烁
436 2 Refresh(); //刷新日期的其他数据
437 2
438 2 /**lcdWriteCommand(0x85); //温度在LCM上的写入位置
439 2 lcdWriteData(0x20); //显示符号'|'
440 2 i=ReadTemperature(); //读温度并送显
441 2 a=i/100;
442 2 lcdWriteData(a+0x30); //显示温度十位
443 2 b=i/10-a*10;
444 2 lcdWriteData(b+0x30); //显示个位
445 2 lcdWriteData(0x2e); //显示"."
446 2 c=i-a*100-b*10;
447 2 lcdWriteData(c+0x30); //显示小数位
448 2 lcdWriteData(0x43); //显示度C
449 2 ****/
450 2 GetChinaCalendarStr(yy,mo,dd,p);
451 2 lcdword(2,0,1,p); //界面上更新农历
452 2 //if(JieQiStr_2word(yy,mo,dd,q)==1)
453 2 //lcdword(2,6,1,q); //界面上更新节气
454 2 }
455 1 }
456 /***************************************************************/
457 void mode_one(void)
458 { setting=1;
459 1 lcdClear();
460 1 lcdword(0, 0, 1, " 重设密码");
461 1 lcdword(1, 0, 1, " 设置时间");
462 1 lcdword(2, 0, 1, " 设置闹钟");
463 1 lcdword(3, 0, 1, " 查看农历");
464 1 switch(cishu)
465 1 { case 0: convertChar(0, 2, 8);break;
466 2 case 1: convertChar(1, 2, 8);break;
467 2 case 2: convertChar(2, 2, 8);break;
468 2 case 3: convertChar(3, 2, 8);break;
469 2 case 4: lcdword(0, 0, 1, " 设置时间");
470 2 lcdword(1, 0, 1, " 设置闹钟");
471 2 lcdword(2, 0, 1, " 查看农历");
472 2 lcdword(3, 0, 1, " 查看阳历");
473 2 convertChar(3, 2, 8);break;
474 2 }
475 1 cishu++;
476 1 if(cishu==5)cishu=0;
477 1 }
478 /***************************************************************/
479 //功能:根据获得的键值和当前的状态来确定下一步执行模块的次态
480 void view_state(void)
481 {
482 1 uchar i,x,*p;
483 1 switch(state)
484 1 {case 0: p=&fun_zero[0];break;
485 2 default: break;
486 2 }
487 1 for(i=1;i<+4;i++)
488 1 { if(keys==*p) //表中的是不是和读取的键码一致
489 2 {++p;state=*p; //存放读取的状态
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 9
490 3 ++p;x=*p; //附读取的执行模块的代码
491 3 switch(x)
492 3 {case 0: mode_one();i=4;break;
493 4 //ase 2: in_min();i=4;break;
494 4 // case 3: mode23_ret1();i=4;break;
495 4 // case 4: add_one();i=4;break;
496 4 //case 5: set_done_ret23();i=4;break;
497 4 default: break;
498 4 }
499 3 }
500 2 else if(0==*p)i=4;
501 2 p=p+3;
502 2 }
503 1 }
504 /***************************************************************/
505 //读取键盘
506 void read_key(void)
507 {
508 1 P1|=0x0f;keys=P1; //先保护P3口
509 1 keys|=0xf0; //屏蔽其他位
510 1 if((~keys)!=0) //有效按键
511 1 {delayMs(50); //消抖动
512 2 keys=P1; keys|=0xf0;
513 2 if((~keys)==0) keys=0;
514 2 switch(keys)
515 2 { case 0xfe:keys=1;break;
516 3 case 0xfd:keys=2;break;
517 3 case 0xfb:keys=3;break;
518 3 case 0xf7:keys=4;break;
519 3 default: break;
520 3 }
521 2 }
522 1 else keys=0;
523 1 }
524 /***************************************************************/
525 //主程序开始
526 void main (void)
527 { uchar InitLine,i;
528 1 state=0;
529 1 cishu=0;
530 1 Init_1302();
531 1 lcdInit ();
532 1 lcdClear();
533 1 lcdword(0, 0, 20, " 多功能液晶时钟");
534 1 lcdword(1, 0, 20, "设计者: 电容器");
535 1 lcdword(2, 0, 20, "仪表技术科陈志伟");
536 1 lcdword(3, 0, 20, "交流QQ:287458808");
537 1 delaySec(8);
538 1 lcdClear();
539 1 lcdword(0, 1, 20, "请稍等::::::::::");
540 1 convertChar(0, 1, 8);
541 1 lcdword(2, 0, 20, "系统初始化::::::");
542 1 for (InitLine=0; InitLine<17; InitLine++)
543 1 { convertChar(2, 0, InitLine);
544 2 delaySec(2);
545 2 }
546 1 lcdClear();
547 1 while(1)
548 1 {if(setting==0) //正在设置则不刷新
549 2 lcd_Interface(); //刷新主界面
550 2 read_key(); //读取键盘
551 2 if(keys!=0) view_state(); //根据键值执行相应的操作
C51 COMPILER V8.05a MAIN 12/17/2007 10:55:25 PAGE 10
552 2 for(i=1;i<=25;i++)
553 2 delayMs(30);
554 2 }
555 1 }
*** ERROR C249 IN LINE 555 OF MAIN.C: 'DATA': SEGMENT TOO LARGE
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -