Single chip electronic perpetual calendar with lunar calendar display

Publisher:清新心情Latest update time:2020-08-05 Source: 51hei Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere

                                    temp=(miao)/10*16+(miao)%10; //Convert decimal into DCB code required by DS1302

                                                   write_1302(0x8e,0x00); //Allow writing, disable write protection

                                                   write_1302(0x80,0x80|temp); //Write the adjusted second data BCD code to the second register 80H in DS1302

                                                   write_1302(0x8e,0x80); //Open write protection

                                                //write_1602com(0x0b);

                                                break;

                                        case 5:

                                                fen--;

                                                if(fen==-1)

                                                fen=59;

                                                write_sfm(3,fen);

                                                write_1602com(er+4); //Because the LCD mode is set to write data, the pointer automatically increases by one, so here it is written back to the original position

                                                temp=(fen)/10*16+(fen)%10; //Convert decimal to DCB code required by DS1302

                                                   write_1302(0x8e,0x00); //Allow writing, disable write protection

                                                   write_1302(0x82,temp); //Write the adjusted sub-data BCD code to the sub-register 82H in DS1302

                                                   write_1302(0x8e,0x80); //Open write protection                                               

                                                break;

       

                                        case 4:

                                                he--;

                                                  if(shi==-1)

                                                it=23;

                                                write_sfm(0,shi);

                                                temp=(shi)/10*16+(shi)%10; //Convert decimal into DCB code required by DS1302

                                                   write_1302(0x8e,0x00); //Allow writing, disable write protection

                                                   write_1302(0x84,temp); //Write the adjusted hour data BCD code to hour register 84H in DS1302

                                                   write_1302(0x8e,0x80); //Open write protection

                                                write_1602com(er+1); //Because the LCD mode is set to write data, the pointer automatically increases by one, so the cursor needs to return to its original position

                                                break;

                        /*

                        case 4:week--;

                                        if(week==0)

                                                week=7;

                                 

                    write_1602com(yh+0x0C); //Specify the position of weekly data display after 'add'

                                        write_week(week); //Specify the weekly data display content

                                   temp=(week)/10*16+(week)%10; //Convert decimal to DCB code required by DS1302

                                   write_1302(0x8e,0x00); //Allow writing, disable write protection

                                   write_1302(0x8a,temp); //Write the adjusted week data BCD code to the week register 8aH in DS1302

                                   write_1302(0x8e,0x80); //Open write protection

                                   write_1602com(yh+0x0e);//Because the LCD mode is set to write data, the pointer automatically increases by one, so the cursor needs to return to its original position

                                break;

                        */

                                        case 3:

                                                ri--;

                                                if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12))

                                                {

                                                        if(ri==0)

                                                                ri=31;

                                                }

                                                else

                                                {

                                                        if(yue==2)

                                                        {

                                                                if(p_r==1)

                                                                {

                                                                        if(ri==0)

                                                                                ri=29;

                                                                }

                                                                else

                                                                {

                                                                        if(ri==0)

                                                                                ri=28;

                                                                }

                                                        }

                                                        else

                                                        {

                                                                if(ri==0)

                                                                        ri=30;

                                                        }

                                                }

                                                Conver_week(nian,yue,ri);

                                                write_week(week);

                                                write_nyr(9,ri);

                                                temp=(ri)/10*16+(ri)%10; //Convert decimal into DCB code required by DS1302

                                                   write_1302(0x8e,0x00); //Allow writing, disable write protection

                                                   write_1302(0x86,temp); //Write the adjusted date data BCD code to date register 86H in DS1302

                                                   write_1302(0x8e,0x80); //Open write protection

                                                write_1602com(yh+10);//Because the LCD mode is set to write data, the pointer automatically increases by one, so the cursor needs to return to its original position               

                                                break;

                                        case 2:

                                                yue--;

                                                if(yue==0)

                                                yue=12;

                                                if((yue==4)||(yue==6)||(yue==9)||(yue==11))

                                                {

                                                        if(ri>30)

                                                                ri=1;

                                                }

                                                else

                                                {

                                                        if(yue==2)

                                                        {

                                                                if(p_r==1)

                                                                {

                                                                        if(ri>29)

                                                                                ri=1;

                                                                }

                                                                else

                                                                {

                                                                        if(ri>28)

                                                                                ri=1;

                                                                }

                                                        }

                                                }

                                                Conver_week(nian,yue,ri);

                                                write_week(week);

                                                write_nyr(6,yue);

                                                temp=(yue)/10*16+(yue)%10; //Convert decimal into DCB code required by DS1302

                                                   write_1302(0x8e,0x00); //Allow writing, disable write protection

                                                   write_1302(0x88,temp); //Write the adjusted month data BCD code to month register 88H in DS1302

                                                   write_1302(0x8e,0x80); //Open write protection

                                                write_1602com(yh+7);//Because the LCD mode is set to write data, the pointer automatically increases by one, so the cursor needs to return to its original position

                       

                                                break;       

                                        case 1:

                                                our--

                                                 if(nian==-1)

                                                ours=99;                                               

                                                nian_temp=2000+nian;

                                                if((nian_temp%400==0)||((nian_temp%100!=0)&&(nian_temp%4==0))) //Judge whether it is a leap year

                                                        p_r=1;

                                                else

                                                        p_r=0;

                                                Conver_week(nian,yue,ri);

                                                write_week(week);

[1] [2] [3] [4] [5] [6] [7] [8]
Reference address:Single chip electronic perpetual calendar with lunar calendar display

Previous article:51 MCU Proteus simulation 320x240TFT color screen
Next article:Microcontroller breathing light program and waveform demonstration

Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号