久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2884|回復: 5
收起左側

51單片機 帶倒計時的萬年歷

[復制鏈接]
ID:17109 發表于 2018-10-8 15:16 | 顯示全部樓層 |閱讀模式
分享一個用51單片機制作的     帶倒計時版的萬年歷          帶仿真電路
因為沒有農歷     把倒計時4只數碼管改成    農歷  月  和  日        要什樣修改才能增加農歷的功能呢  勞煩大家幫修改一下謝謝



221259oicepc2eg7fx8kxi.png

#include "Max7221.h"
#include "1302.h"
sbit SLED=P2^3;
sbit DQ=P2^4;
sbit BT1=P1^1;
sbit BT2=P1^2;
sbit BT3=P1^3;
sbit BT4=P1^4;
unsigned char Nums[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//顯示緩沖區
unsigned char TENums[]={0,0};
SYSTEMTIME NowTimes;
uint Temperature;
uchar Old_Sec;                                    
uchar Old_Day;
uchar Old_State=1;
uchar Buttons;
uchar ButtonCount;
uchar HasChange;
uchar HasOpera;
void Delay(unsigned int n)
{
        unsigned int i=0,j=0;
        for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}
void delay_18B20(unsigned int i)
{
        while(i--);
}

void Init_DS18B20(void)
{
         unsigned char x=0;
         DQ = 1;         
         delay_18B20(8);  
         DQ = 0;        
         delay_18B20(80);
         DQ = 1;         
         delay_18B20(14);
         x=DQ;            
         delay_18B20(20);
}

unsigned char ReadOneChar(void)
{
        uchar i=0;
        uchar dat = 0;
        for (i=8;i>0;i--)
         {
                  DQ = 0;
                  dat>>=1;
                  DQ = 1;
                  if(DQ)
                  dat|=0x80;
                  delay_18B20(4);
         }
        return(dat);
}

void WriteOneChar(uchar dat)
{
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
                  DQ = 0;
                DQ = dat&0x01;
            delay_18B20(5);
                DQ = 1;
            dat>>=1;
}
}

void ReadTemp(void)
{
        unsigned char a=0;
        unsigned char b=0;
        unsigned char t=0;
        Init_DS18B20();
        WriteOneChar(0xCC);           
        WriteOneChar(0x44);
        delay_18B20(100);      
        Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0xBE);
        delay_18B20(100);
        a=ReadOneChar();   
        b=ReadOneChar();          
        Temperature=b<<4;
        Temperature+=(a&0xf0)>>4;               
}

void DayDiscount(void)
{
        NowTimes.DateString[16]=NowTimes.DateString[16]-1;
        if(NowTimes.DateString[16]<0)
        {
                NowTimes.DateString[15]=NowTimes.DateString[15]-1;
                NowTimes.DateString[16]=9;
                if(NowTimes.DateString[15]<0)
                {
                        NowTimes.DateString[14]=NowTimes.DateString[14]-1;
                        NowTimes.DateString[15]=9;
                        if(NowTimes.DateString[14]<0)
                        {
                                NowTimes.DateString[13]=NowTimes.DateString[13]-1;
                                NowTimes.DateString[14]=9;
                                if(NowTimes.DateString[13]<0)
                                {
                                        NowTimes.DateString[13]=9;
                                        NowTimes.DateString[14]=9;
                                        NowTimes.DateString[15]=9;
                                        NowTimes.DateString[16]=9;
                                }
                        }
                }
        }
        T2H(NowTimes.DateString[13],0xc0);
        T2H(NowTimes.DateString[14],0xc2);
        T2H(NowTimes.DateString[15],0xc4);
        T2H(NowTimes.DateString[16],0xc6);
}

void GetButton()
{
        while(1)
        {
                if(BT1==1&&BT2==1&&BT3==1&&BT4==1){Buttons=0;break;}
                if(BT1==0&&BT2==1&&BT3==1&&BT4==1){Buttons=1;break;}
                if(BT1==1&&BT2==0&&BT3==1&&BT4==1){Buttons=2;break;}
                if(BT1==0&&BT2==0&&BT3==1&&BT4==1){Buttons=3;break;}
                if(BT1==1&&BT2==1&&BT3==0&&BT4==1){Buttons=4;break;}
                if(BT1==0&&BT2==1&&BT3==0&&BT4==1){Buttons=5;break;}
                if(BT1==1&&BT2==0&&BT3==0&&BT4==1){Buttons=6;break;}
                if(BT1==0&&BT2==0&&BT3==0&&BT4==1){Buttons=7;break;}
                if(BT1==1&&BT2==1&&BT3==1&&BT4==0){Buttons=8;break;}
                if(BT1==0&&BT2==1&&BT3==1&&BT4==0){Buttons=9;break;}
        }
        while(BT1==0||BT2==0||BT3==0||BT4==0)
        {
                Delay(1);
        }
}
void main()
{
        Init();
        Initial_DS1302();
        Display(Nums);
        while(1)
        {
                GetButton();
                if(Buttons!=0)
                {
                        switch(Buttons)
                        {
                                case 1:HasOpera=0;HasChange=0;ButtonCount+=1;if(ButtonCount>11){ButtonCount=0;}break;
                                case 2:HasOpera=1;break;
                                case 3:HasOpera=2;break;
                                case 4:break;
                                case 5:break;
                                case 6:break;
                                case 7:break;
                                case 8:break;
                                case 9:Old_State=!Old_State;Change7221State(Old_State);break;
                        }
                }

                DS1302_GetTime(&NowTimes);
                DateToStr(&NowTimes);
                Nums[0]=2;
                Nums[1]=0;
                Nums[2]=NowTimes.DateString[0];
                Nums[3]=NowTimes.DateString[1];
                Nums[4]=NowTimes.DateString[2];
                Nums[5]=NowTimes.DateString[3];
                Nums[6]=NowTimes.DateString[4];
                Nums[7]=NowTimes.DateString[5];
                Nums[8]=NowTimes.DateString[7];
                Nums[9]=NowTimes.DateString[8];
                Nums[10]=NowTimes.DateString[9];
                Nums[11]=NowTimes.DateString[10];
                Nums[12]=NowTimes.DateString[11];
                Nums[13]=NowTimes.DateString[12];
                Nums[14]=(Temperature/10);
                Nums[15]=(Temperature%10);
                Nums[16]=NowTimes.DateString[13];
                Nums[17]=NowTimes.DateString[14];
                Nums[18]=NowTimes.DateString[15];
                Nums[19]=NowTimes.DateString[16];
                Nums[20]=NowTimes.DateString[6];
                Nums[21]=10;
                Nums[22]=10;
                Nums[23]=10;
                Nums[24]=10;
                Nums[25]=10;
                switch(ButtonCount)
                {
                        case 1:
                                        TENums[0]=2;
                                        TENums[1]=3;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Year+=1;
                                                if(NowTimes.Year>50){NowTimes.Year=0;}
                                                T2H(NowTimes.Year,0x8c);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Year-=1;
                                                if(NowTimes.Year<0){NowTimes.Year=50;}
                                                T2H(NowTimes.Year,0x8c);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 2:
                                        TENums[0]=4;
                                        TENums[1]=5;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Month+=1;
                                                if(NowTimes.Month>12){NowTimes.Month=1;}
                                                T2H(NowTimes.Month,0x88);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Month-=1;
                                                if(NowTimes.Month<1){NowTimes.Month=12;}
                                                T2H(NowTimes.Month,0x88);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 3:
                                        TENums[0]=6;
                                        TENums[1]=7;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Day+=1;
                                                if(NowTimes.Day>28&&NowTimes.Month==2&&NowTimes.Year%4!=0){NowTimes.Day=1;}
                                                if(NowTimes.Day>29&&NowTimes.Month==2&&NowTimes.Year%4==0){NowTimes.Day=1;}
                                                if(NowTimes.Day>30&&(NowTimes.Month==4||NowTimes.Month==6||NowTimes.Month==9||NowTimes.Month==11)){NowTimes.Day=1;}
                                                if(NowTimes.Day>31){NowTimes.Day=1;}
                                                T2H(NowTimes.Day,0x86);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Day-=1;
                                                if(NowTimes.Day<1){NowTimes.Day=25;}
                                                T2H(NowTimes.Day,0x86);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 4:
                                        TENums[0]=8;
                                        TENums[1]=9;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Hour+=1;
                                                if(NowTimes.Hour>23){NowTimes.Hour=0;}
                                                T2H(NowTimes.Hour,0x84);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Hour-=1;
                                                if(NowTimes.Hour<0){NowTimes.Hour=23;}
                                                T2H(NowTimes.Hour,0x84);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 5:
                                        TENums[0]=10;
                                        TENums[1]=11;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Minute+=1;
                                                if(NowTimes.Minute>59){NowTimes.Minute=0;}
                                                T2H(NowTimes.Minute,0x82);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Minute-=1;
                                                if(NowTimes.Minute<0){NowTimes.Hour=59;}
                                                T2H(NowTimes.Minute,0x82);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 6:
                                        TENums[0]=12;
                                        TENums[1]=13;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Second+=1;
                                                if(NowTimes.Second>59){NowTimes.Second=0;}
                                                T2H(NowTimes.Second,0x80);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Second-=1;
                                                if(NowTimes.Second<0){NowTimes.Second=59;}
                                                T2H(NowTimes.Second,0x80);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 7:
                                        TENums[0]=16;
                                        TENums[1]=24;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.DateString[13]+=1;
                                                if(NowTimes.DateString[13]>9){NowTimes.DateString[13]=0;}
                                                T2H(NowTimes.DateString[13],0xc0);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.DateString[13]-=1;
                                                if(NowTimes.DateString[13]<0){NowTimes.DateString[13]=9;}
                                                T2H(NowTimes.DateString[13],0xc0);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 8:
                                        TENums[0]=17;
                                        TENums[1]=24;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.DateString[14]+=1;
                                                if(NowTimes.DateString[14]>9){NowTimes.DateString[14]=0;}
                                                T2H(NowTimes.DateString[14],0xc2);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.DateString[14]-=1;
                                                if(NowTimes.DateString[14]<0){NowTimes.DateString[14]=9;}
                                                T2H(NowTimes.DateString[14],0xc2);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 9:
                                        TENums[0]=18;
                                        TENums[1]=24;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.DateString[15]+=1;
                                                if(NowTimes.DateString[15]>9){NowTimes.DateString[15]=0;}
                                                T2H(NowTimes.DateString[15],0xc4);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.DateString[15]-=1;
                                                if(NowTimes.DateString[15]<0){NowTimes.DateString[15]=9;}
                                                T2H(NowTimes.DateString[15],0xc4);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 10:
                                        TENums[0]=19;
                                        TENums[1]=24;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.DateString[16]+=1;
                                                if(NowTimes.DateString[16]>9){NowTimes.DateString[16]=0;}
                                                T2H(NowTimes.DateString[16],0xc6);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.DateString[16]-=1;
                                                if(NowTimes.DateString[16]<0){NowTimes.DateString[16]=9;}
                                                T2H(NowTimes.DateString[16],0xc6);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                        case 11:
                                        TENums[0]=20;
                                        TENums[1]=24;
                                        if(HasOpera==1)
                                        {
                                                NowTimes.Week+=1;
                                                if(NowTimes.Week>7){NowTimes.Week=1;}
                                                T2H(NowTimes.Week,0x8A);
                                                HasChange=1;       
                                        }
                                        if(HasOpera==2)
                                        {
                                                NowTimes.Week-=1;
                                                if(NowTimes.Week<1){NowTimes.Week=7;}
                                                T2H(NowTimes.Week,0x8A);
                                                HasChange=1;       
                                        }
                                        HasOpera=0;
                                        break;
                       
                       
                        default:TENums[0]=24;TENums[1]=25;break;
                }
                if(HasChange==0)
                {
                        Nums[TENums[0]]=10;
                        Nums[TENums[1]]=10;       
                }
                if(NowTimes.Second!=Old_Sec&&Old_State)
                {
                        ReadTemp();
                        SLED=!SLED;
                        HasChange=!HasChange;
                        Old_Sec=NowTimes.Second;
                }
                Display(Nums);
                if(NowTimes.Day!=Old_Day)
                {
                        DayDiscount();
                        Old_Day=NowTimes.Day;       
                }
                Delay(100);
        }
}


帶倒計時版的萬年歷.rar

143.86 KB, 下載次數: 50

回復

使用道具 舉報

ID:387733 發表于 2018-10-8 17:16 | 顯示全部樓層
公歷轉農歷算法(C語言) - 藍藍的天上白云飄 - CSDN博客  

https://blog.csdn.net/syrchina/article/details/8538516
回復

使用道具 舉報

ID:406884 發表于 2018-10-9 09:58 | 顯示全部樓層
好,有創意。
回復

使用道具 舉報

ID:17109 發表于 2018-10-9 10:12 | 顯示全部樓層
sxhwdz 發表于 2018-10-8 17:16
公歷轉農歷算法(C語言) - 藍藍的天上白云飄 - CSDN博客  

https://blog.csdn.net/syrchina/article/de ...

可以  幫修改入這個萬年歷嗎?
回復

使用道具 舉報

ID:367145 發表于 2019-11-3 19:57 | 顯示全部樓層
為什么不能仿真
回復

使用道具 舉報

ID:621225 發表于 2019-11-4 12:15 | 顯示全部樓層
很完美!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黄色网 | 一区二区三区中文字幕 | 欧美黑人巨大videos精品 | 国产成人jvid在线播放 | www.99re | 狠狠爱免费视频 | 999久久久久久久久 国产欧美在线观看 | 成人一级黄色毛片 | 国产乱码精品一区二区三区av | av不卡一区 | 国产精品成人久久久久 | 91在线看| 老司机成人在线 | 久久中文字幕一区 | 日韩在线播放一区 | 国产1区2区3区 | 欧美日韩中文字幕在线播放 | 国产精品www | 久久精品中文 | 91久久国产综合久久 | 免费视频99 | 成年免费大片黄在线观看岛国 | 久久国| 最近免费日本视频在线 | 国产一区视频在线 | 国产精品毛片 | 亚洲色图婷婷 | 不卡的av在线 | 国产一区精品 | 久久精品国产免费 | 精品亚洲一区二区三区四区五区 | 1级黄色大片 | 国产欧美精品一区 | 亚洲成人免费视频在线观看 | 色呦呦在线 | 欧美1级 | h视频在线观看免费 | 中文字幕亚洲视频 | 黄免费观看视频 | 欧美日韩综合精品 | 色综合一区二区 |