📄 lcd12864.lst
字号:
298 1 unsigned int value;
299 1 float t;
300 1 reset();
301 1 write_byte(jump_ROM);
302 1 write_byte(start);
303 1 reset();
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 6
304 1 write_byte(jump_ROM);
305 1 write_byte(read_EEPROM);
306 1 TMPL=read_byte();
307 1 TMPH=read_byte();
308 1 value=TMPH;
309 1 value<<=8;
310 1 value|=TMPL;
311 1 t=value*0.0625;
312 1 TMPH=t;
313 1 TMPL=(t-TMPH)*10+0.5;
314 1 }
315
316 sbit clock_Rst = P3 ^ 3;
317 sbit clock_dat = P3 ^ 4;
318 sbit clock_clk = P3 ^ 5;
319 unsigned char sec=0xff,min=0xff,hour=0xff,day=0xff,mon=0xff,week=0xff,year=0xff;
320
321 void clock_out(unsigned char dd);
322 void write_clock(unsigned char ord,unsigned char dd);
323 void init_1302(void);
324 unsigned char clock_in(void);
325 unsigned char read_clock(unsigned char ord);
326 void update(void);
327 void LCD_Week(void);
328 /*===============================================================================/
329 *函数名称:clock_out
330 *入口参数:dd
331 *函数功能:写入指令或数据
332 /===============================================================================*/
333 void clock_out(unsigned char dd)
334 {
335 1
336 1 unsigned char i,temp;
337 1 temp=dd;
338 1 for(i=8;i>0;i--)
339 1 {
340 2
341 2 if((temp&0x01)==1)
342 2 clock_dat=1;
343 2 else clock_dat=0;
344 2 _nop_();
345 2 clock_clk=1;
346 2 _nop_();
347 2 clock_clk=0;
348 2 temp=temp>>1;
349 2 }
350 1
351 1
352 1 }
353 /*===============================================================================/
354 *函数名称:write_clock
355 *入口参数:命令ord,数据dd
356 *函数功能:时钟调整
357 /================================================================================*/
358 void write_clock(unsigned char ord,unsigned char dd)
359 {
360 1 unsigned char temp;
361 1 clock_Rst=0;
362 1 do{temp=clock_Rst;}while(temp==1);
363 1 clock_clk=0;
364 1 clock_Rst=1;
365 1 do{temp=clock_Rst;}while(temp==0);
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 7
366 1 clock_out(ord);
367 1 clock_out(dd);
368 1 clock_clk=1;
369 1 clock_Rst=0;
370 1
371 1 }
372
373 /*==============================================================================/
374 *函数名称:init_1302
375 *函数功能:ds1302初始化
376 /=============================================================================*/
377 void init_1302(void)
378 {
379 1 write_clock(0x8e,0x00);
380 1 // write_clock(0x80,0x80);
381 1 write_clock(0x90,0x00);
382 1 write_clock(0x8c,0x08);//_nop_();
383 1 write_clock(0x8a,0x02);//_nop_();
384 1 write_clock(0x88,0x11);//_nop_();
385 1 write_clock(0x86,0x01);//_nop_();
386 1 write_clock(0x84,0x18);//_nop_();
387 1 write_clock(0x82,0x00);//_nop_();
388 1 write_clock(0x80,0x00);//_nop_();
389 1 // write_clock(0x90,0xa5);//_nop_();
390 1 write_clock(0x8e,0x80);
391 1 }
392 /*=================================================================================/
393 *函数名称:clock_in
394 *返回 值:ACC
395 *函数功能:输出数据
396 /=================================================================================*/
397 unsigned char clock_in(void)
398 {
399 1
400 1 unsigned char i,temp;
401 1 temp=0x00;
402 1 for(i=8;i>0;i--)
403 1 {
404 2 temp=temp>>1;
405 2 if(clock_dat==1) temp|=0x80;
406 2 clock_clk=1;
407 2 clock_clk=0;
408 2 }
409 1 // if(clock_dat==1) temp|=0x80;
410 1 return(temp);
411 1 }
412 /*****************************************************************************/
413 //DS1302读数据(底层协议)
414 unsigned char read_clock(unsigned char ord){
415 1 unsigned char dd,k;
416 1 k=0x00;
417 1 clock_Rst=0;
418 1 do {dd=clock_Rst;} while(dd==1);
419 1 clock_clk=0;
420 1 clock_Rst=1;
421 1 do {dd=clock_Rst;} while(dd==0);
422 1 clock_out(ord);
423 1 dd=clock_in();
424 1 clock_clk=1;
425 1 clock_Rst=0;
426 1 k=dd>>4;
427 1 dd=dd&0x0f;
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 8
428 1 dd=dd+k*10;
429 1 return (dd);
430 1 }
431
432 void read_clocks(void)
433 {
434 1 sec=read_clock(0x81);
435 1 min=read_clock(0x83);
436 1 hour=read_clock(0x85);
437 1 day=read_clock(0x87);
438 1 mon=read_clock(0x89);
439 1 week=read_clock(0x8b);
440 1 year=read_clock(0x8d);
441 1 }
442
443 void write_clocks(void)
444 {
445 1 write_clock(0x8e,0x00);
446 1 // write_clock(0x80,0x80);
447 1 write_clock(0x90,0x00);
448 1 write_clock(0x8c,year);//_nop_();
449 1 write_clock(0x8a,week);//_nop_();
450 1 write_clock(0x88,mon);//_nop_();
451 1 write_clock(0x86,day);//_nop_();
452 1 write_clock(0x84,hour);//_nop_();
453 1 write_clock(0x82,min);//_nop_();
454 1 write_clock(0x80,sec);
455 1 // write_clock(0x90,0xa5);//_nop_();
456 1 write_clock(0x8e,0x80);
457 1 }
458
459
460
461 /*按键控制程序段*/
462 sbit KeyHL =P1^3; //左上
463 sbit KeyBL =P1^4; //左下
464 sbit KeyBR =P1^5; //右下
465 sbit KeyHR =P1^6; //右上
466 sbit KeyGas = P1^7; //煤气报警控制
467 unsigned char adjust=1,add_or_dec, type=0x01 ;
468 void update(void);
469
470
471 unsigned char BCD_Coverter(unsigned char dd)
472 {
473 1 unsigned char temp;
474 1 temp=dd;
475 1 temp=temp/10;
476 1 dd=(dd%10)|(temp<<4);
477 1 return dd;
478 1 }
479 void adjust_year(void)
480 {
481 1 if(year>=0&&year<=99&&add_or_dec==1) year++;
482 1 if(year==100&&add_or_dec==1) year=0;
483 1 if(year==0x00&&add_or_dec==0) year=100;
484 1 if(year>0x00&&year<=100&&add_or_dec==0) year--;
485 1
486 1 LCD_WriteData(5,1,year/10+0x30);
487 1 LCD_data(year%10+0x30);
488 1
489 1 }
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 9
490 void adjust_mon(void)
491 {
492 1
493 1 if(mon>=1&&mon<=12&&add_or_dec==1) mon++;
494 1 if(mon==13&&add_or_dec==1) mon=1;
495 1 if(mon>=1&&mon<=12&&add_or_dec==0) mon--;
496 1 if(mon==0&&add_or_dec==0) mon=12;
497 1 LCD_WriteData(5,2,mon/10+0x30);
498 1 LCD_data(mon%10+0x30);
499 1
500 1 }
501 void adjust_day(void)
502 {
503 1 unsigned char day_max;
504 1
505 1 if(mon==2)
506 1 {
507 2 if(year%4==0)
508 2 {
509 3 if(year%100!=0) day_max=29;
510 3 else if(year%400==0)day_max=29;
511 3 else day_max=28;
512 3 }
513 2 else day_max=28;
514 2 }
515 1 else if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10||mon==12) day_max=31;
516 1 else day_max=30;
517 1 if(day>=1&&day<=day_max&&add_or_dec==1) day++;
518 1 if(day==(day_max+1)&&add_or_dec==1) day=1;
519 1 if(day>=1&&day<=day_max&&add_or_dec==0) day--;
520 1 if(day==0&&add_or_dec==0) day=day_max;
521 1 LCD_WriteData(7,2,day/10+0x30);
522 1 LCD_data(day%10+0x30);
523 1
524 1 }
525
526 void adjust_hour(void)
527 {
528 1
529 1 if(hour>=0&&hour<=23&&add_or_dec==1) hour++;
530 1 if(hour==24&&add_or_dec==1) hour=0;
531 1 if(hour==0&&add_or_dec==0) hour=24;
532 1 if(hour>0&&hour<=24&&add_or_dec==0) hour--;
533 1 LCD_WriteData(1,3,hour/10+0x30);
534 1 LCD_data(hour%10+0x30);
535 1
536 1
537 1 }
538 void adjust_min(void)
539 {
540 1 if(min>=0&&min<=59&&add_or_dec==1) min++;
541 1 if(min==60&&add_or_dec==1) min=0;
542 1 if(min==0&&add_or_dec==0) min=60;
543 1 if(min>0&&min<=60&&add_or_dec==0) min--;
544 1
545 1 LCD_WriteData(2,3,0x3a);
546 1 LCD_data(min/10+0x30);
547 1 LCD_data(min%10+0x30);
548 1
549 1 }
550 void adjust_week(void)
551 {
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 10
552 1
553 1 if(week>=1&&week<=7&&add_or_dec==1) week++;
554 1 if(week==8&add_or_dec==1) week=1;
555 1 if(week>=1&&week<=7&&add_or_dec==0) week--;
556 1 if(week==0&&add_or_dec==0) week=7;
557 1 LCD_Week();
558 1 }
559 void adjust_time(void)
560 {
561 1
562 1 LCD_WriteStr(1,1,"[Esc]");
563 1 LCD_WriteStr(6,1,"[NEXT]");
564 1 LCD_WriteStr(1,4,"[+] 调整年份 [-]");
565 1 while(KeyHL==0);
566 1 delay(1000);
567 1 while(adjust==1)
568 1 {
569 2
570 2 if(KeyHL==0)
571 2 {
572 3 delay(1000);
573 3 if(KeyHL==0)adjust=0;
574 3 }
575 2
576 2
577 2 if(KeyBL==0)
578 2 {
579 3 delay(1000);
580 3 add_or_dec=1; //加操作
581 3 switch(type)
582 3 {
583 4 case 1: adjust_year();break;
584 4 case 2: adjust_mon(); break;
585 4 case 3: adjust_day(); break;
586 4 case 4: adjust_hour(); break;
587 4 case 5: adjust_min(); break;
588 4 case 6: adjust_week(); break;
589 4 default:break;
590 4 }
591 3 // update();
592 3 while(KeyBL==0);
593 3 delay(1000);
594 3 }
595 2
596 2
597 2 if(KeyBR==0)
598 2 {
599 3 delay(1000);
600 3 add_or_dec=0; //减操 作
601 3 switch(type)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -