新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī) + ds12c887時(shí)鐘芯片 開(kāi)發(fā)的電子時(shí)鐘

        51單片機(jī) + ds12c887時(shí)鐘芯片 開(kāi)發(fā)的電子時(shí)鐘

        作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
        原文地址:51單片機(jī)+ds12c887時(shí)鐘芯片開(kāi)發(fā)的電子時(shí)鐘作者:紫暮秋風(fēng)











        主要代碼如下

        本文引用地址:http://www.104case.com/article/201611/320485.htm

        void delay(int z)
        {
        int x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }

        void write_com(char com) //寫指令操作
        {
        rs=0;
        lcden=0; //這一步萬(wàn)萬(wàn)不可少,否則不出結(jié)果
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
        }

        void didi()
        {
        beep=0;
        delay(50);
        beep=1;
        delay(100);
        beep=0;
        delay(50);
        beep=1;
        }
        void write_data(char date) //寫命令操作
        {
        rs=1;
        lcden=0; //這一步萬(wàn)萬(wàn)不可少,否則不出結(jié)果
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0; //使用完畢后一定要釋放使能端 即置零

        }


        void init() //初始化函數(shù)
        {
        char num;
        EA=1;
        EX0=1;
        IT0=1;
        wela=0;
        dula=0;
        lcden=0;
        set_alarm(17,13,30);
        write_ds(0x0B,0x26);
        read_ds(0x0c);
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
        for(num=0;num<15;num++)
        {
        write_data(table1[num]);
        delay(5);
        }
        write_com(0x80+0x40);
        for(num=0;num<10;num++)
        {
        write_data(table2[num]);
        delay(5);
        }

        }


        void write_time(char clock,char address1)
        {
        char ge,shi;
        shi=clock/10;
        ge=clock%10;
        write_com(0x80+0x40+address1);
        write_data(0x30+shi);
        delay(10);
        write_data(0x30+ge); //記住此處一定要加0x30 因?yàn)閏har型數(shù)字+0x30才能在液晶上顯示出來(lái),另外字符如a,b等可直接顯示
        } //例如write_data(a) write_data(5+0x30)才是對(duì)的//不能寫write_data(a)或write_data(5)

        void keyscan1() //加法檢測(cè)
        {
        if(s17==0)
        {
        delay(50);
        if(s17==0&flag1==1)
        {
        flag1=0;
        }
        if((s17==0)&&(s13num==1))
        {
        if(miao==59)
        {
        miao=0;
        }
        miao++;
        write_time(miao,0x08);
        }

        if((s17==0)&&(s13num==2))
        {
        if(fen==59)
        {
        fen=0;
        }

        fen++;
        write_time(fen,0x05);
        }

        if((s17==0)&&(s13num==3))
        {
        if(shi==23)
        {
        shi=0;
        }
        shi++;
        write_time(shi,0x02);
        }

        while(!s17);
        }

        }


        void keyscan2() //減法檢測(cè)
        {
        if(s21==0)
        {
        delay(50);

        if(s21==0&flag1==1)
        {
        flag1=0;
        }
        if((s21==0)&&(s13num==1))
        {
        if(miao==0)
        {
        miao=59;
        }
        miao--;
        write_time(miao,0x08);
        }

        if((s21==0)&&(s13num==2))
        {
        if(fen==0)
        {
        fen=59;
        }

        fen--;
        write_time(fen,0x05);
        }

        if((s21==0)&&(s13num==3))
        {
        if(shi==0)
        {
        shi=23;
        }
        shi--;
        write_time(shi,0x02);
        }

        while(!s21);
        }
        }


        void keyscan() //復(fù)位鍵檢測(cè)
        {
        rd=0;
        if(s13==0)
        {
        delay(5);
        if(s13==0)
        {
        flag=1;
        TR0=0;
        s13num++;
        }
        while(!s13);
        if(flag1==1)
        {
        s13num=4;
        flag1=0;
        }
        write_com(0x0f);
        }

        if(s13num==1)
        {
        write_com(0x80+0x40+0x08);
        }
        if(s13num==2)
        {
        write_com(0x80+0x40+0x05);
        }
        if(s13num==3)
        {
        write_com(0x80+0x40+0x02);
        }
        if(s13num==4)
        {
        s13num=0;
        flag=0;
        write_com(0x0c);
        write_ds(4,shi);
        write_ds(2,fen);
        write_ds(0,miao);
        }

        keyscan1();
        keyscan2();
        }


        void write_ds(char add,char date)
        {
        dscs=0;
        dsas=1;
        dsds=1;
        dsrw=1;
        P0=add;
        dsas=0;
        dsrw=0;
        P0=date;
        dsrw=1;
        dsas=1;
        dscs=1;
        }

        char read_ds(char add)
        {
        char ds_date;
        dscs=0;
        dsas=1;
        dsds=1;
        dsrw=1;
        P0=add;
        dsas=0;
        dsds=0;
        P0=0xff; //此處一定要給P0附0xff
        ds_date=P0;
        dsds=1;
        dsas=1;
        dscs=1;
        return ds_date;
        }


        void set_time()
        {
        write_ds(4,15);
        write_ds(2,03);
        write_ds(0,50);
        }

        void set_alarm(char ashi,char afen,char amiao)
        {
        write_ds(1,amiao);
        write_ds(3,afen);
        write_ds(5,ashi);

        }

        void main()
        {

        init();
        while(1)
        {
        keyscan();
        if(flag1==1)
        didi();
        if(flag==0)
        {
        miao=read_ds(0);
        fen=read_ds(2);
        shi=read_ds(4);
        write_time(miao,0x08);
        write_time(fen,0x05);
        write_time(shi,0x02);
        }

        }

        }

        void ext0() interrupt 0
        {
        char c;
        beep=0;
        c=read_ds(0x0C);
        flag1=1;
        }




        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 阜南县| 阿拉善右旗| 安丘市| 东乌| 青神县| 五台县| 通化市| 枣强县| 英德市| 会东县| 都江堰市| 平塘县| 宁明县| 湛江市| 公安县| 绍兴市| 长泰县| 沁阳市| 克山县| 洛隆县| 宣汉县| 双辽市| 德江县| 启东市| 晋城| 改则县| 海宁市| 资中县| 博客| 远安县| 泾川县| 龙井市| 横山县| 松桃| 松江区| 林甸县| 克东县| 靖江市| 普陀区| 绥中县| 朔州市|