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

                                                                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==32)

                                                                        ri=1;

                                                        }

                                                        else

                                                        {

                                                                if(yue==2)

                                                                {

                                                                        if(p_r==1)

                                                                        {

                                                                                if(ri==30)

                                                                                        ri=1;

                                                                        }

                                                                        else

                                                                        {

                                                                                if(ri==29)

                                                                                        ri=1;

                                                                        }

                                                                }

                                                                else

                                                                {

                                                                        if(ri==31)

                                                                                ri=1;

                                                                }

                                                        }

                                                        Conver_week(nian,yue,ri);

                                                        write_week(week);

                                                        write_nyr(9,ri); //Let LCD display the set date data in the correct position

                                                        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==13)

                                                                yue=1;

                                                        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); //Let LCD display the set month data in the correct position

                                                        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:nian++;

                                                 if(nian==100)

                                                        ours=0;

                                                        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);

                                                        write_nyr(3,nian); //Let LCD display the set year data in the correct position

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

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

                                                           write_1302(0x8c,temp); //Write the adjusted year data BCD code to the year register 8cH in DS1302

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

                                                        write_1602com(yh+4);//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;

                                }

                        }

       

                }

                //------------------Decrease key dec, refer to the 'add key' comment for each sentence function---------------

                if(dec==0)

                {

                        delay(10); //Adjust delay to eliminate jitter

                        if(dec==0)

                        {

                                led1=0;

                                collection=0;


                            buzzer=0; //The buzzer beeps once

                            delay(20);

                            buzzer=1;

                                while(!dec);

                                switch(setn)

                                {

                                        case 6:

                                                miao--;

                                                if(miao==-1)

                                                        miao=59; //When the second data is reduced to -1, it will automatically become 59

                                                write_sfm(0x06,miao); //Display the new seconds after the change in the correct position of the LCD

                                                write_1602com(er+7); //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

[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号