新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機電子時鐘完整版

        51單片機電子時鐘完整版

        作者: 時間:2012-08-02 來源:網絡 收藏

        if(n==2)
        {
        fen--;
        if(fen==-1)
        fen=59;
        writesfm(7,fen);
        }
        }
        }
        menu=4;
        }
        void Alarm(void) //設定鬧鐘功能,k4鍵跳轉其他功能
        {
        write_add(0x06);
        write_add(0x01); //清屏
        write_add(0x80+0x00+0);
        for(i=0;i5;i++)
        {
        write_date(naozhong[i]); //顯示Alarm標識符
        }
        write_add(0x80+0x40+4);
        writesfm(4,nshi);
        write_date(0x3a);
        writesfm(7,nfen);
        shi=nshi;
        fen=nfen;
        while(!k4);
        while(k4)
        {
        key();
        }
        write_add(0x0c); //開顯示,不顯示光標
        }
        void key1(void)
        {
        if(k1==0) //設置光標所在位置
        {
        delay(10); //去抖
        if(k1==0)
        {
        num++;
        while(!k1);
        if(num==1)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x40+6);
        }
        if(num==2)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x40+3);
        }
        if(num==3)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x40+0);
        }
        if(num==4)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x00+6);
        }
        if(num==5)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x00+3);
        }
        if(num==6)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x00+0);
        }
        if(num==7)
        {
        write_add(0x0f); //顯示光標并閃爍
        write_add(0x80+0x00+11);
        }
        if(num==8)
        {
        num=0;
        write_add(0x0c);
        }
        }
        }
        }
        void key2(void)
        {
        Write1302(w_protect,0x00); //禁止寫保護
        if(k2==0) //實現加法
        {
        delay(10);
        if(k2==0)
        {
        while(!k2);
        if(num==1)
        {
        miao++;
        if(miao==60)
        {
        miao=0;
        }
        writesfm(6,miao);
        Write1302(w_Sec,(miao/10)*16+miao%10); //將miao轉換成BCD碼
        }
        if(num==2)
        {
        fen++;
        if(fen==60)
        {
        fen=0;
        }
        writesfm(3,fen);
        Write1302(w_Min,(fen/10)*16+fen%10);
        }
        if(num==3)
        {
        shi++;
        if(shi==24)
        {
        shi=0;
        }
        writesfm(0,shi);
        Write1302(w_Hou,(shi/10)*16+shi%10);
        }
        if(num==4)
        {
        ri++;
        if(ri==30)
        {
        ri=0;
        }
        writenyr(6,ri);
        Write1302(w_Day,(ri/10)*16+ri%10);
        }
        if(num==5)
        {
        yue++;
        if(yue==13)
        {
        yue=1;
        }
        writenyr(3,yue);
        Write1302(w_Mou,(yue/10)*16+yue%10);
        }
        if(num==6)
        {
        nian++;
        if(nian==100)
        {
        nian=0;
        }
        writenyr(0,nian);
        Write1302(w_Yea,(nian/10)*16+nian%10);
        }
        if(num==7)
        {
        x++;
        writexi(x);
        Write1302(w_xi,(x/10)*16+x%10);
        if(x==7)
        {
        x=0;
        }
        }
        }
        }
        }
        void key3(void)
        {
        Write1302(w_protect,0x00); //禁止寫保護
        if(k3==0) //實現減法
        {
        delay(10);
        if(k3==0)
        {
        while(!k3);
        if(num==1)
        {
        miao--;
        if(miao==-1)
        {
        miao=59;
        }
        writesfm(6,miao);
        Write1302(w_Sec,(miao/10)*16+miao%10);
        }
        if(num==2)
        {
        fen--;
        if(fen==-1)
        {
        fen=59;
        }
        writesfm(3,fen);
        Write1302(w_Min,(fen/10)*16+fen%10);
        }
        if(num==3)
        {
        shi--;
        if(shi==-1)
        {
        shi=23;
        }
        writesfm(0,shi);
        Write1302(w_Hou,(shi/10)*16+shi%10);
        }
        if(num==4)
        {
        ri--;
        if(ri==-1)
        {
        ri=30;
        }
        writenyr(6,ri);
        Write1302(w_Day,(ri/10)*16+ri%10);
        }
        if(num==5)
        {
        yue--;
        if(yue==-1)
        {
        yue=12;
        }
        writenyr(3,yue);
        Write1302(w_Mou,yue);
        }
        if(num==6)
        {
        nian--;
        if(nian==-1)
        {
        nian=99;
        }
        writenyr(0,nian);
        Write1302(w_Yea,(yue/10)*16+yue%10);
        }
        if(num==7)
        {
        x--;
        writexi(x);
        Write1302(w_xi,(x/10)*16+x%10);
        if(x==1)
        {
        x=8;
        }
        }
        }
        }
        }
        void key4()
        {
        if(k4==0)
        {
        delay(10);
        if(k4==0)
        {
        while(!k4);
        menu++;
        }
        }
        }
        void TimeSet()
        {
        write_add(0x0f);
        write_add(0x80+0x40+9);
        while(k4)
        {
        key1();
        key2();
        key3();
        }
        Write1302(w_protect,0x00); //寫保護
        menu=2;
        }
        void init_DS1302(void)
        {
        Write1302(w_protect,0x00); //禁止寫保護
        Write1302(w_Sec,0x56);
        Write1302(w_Min,0x59);
        Write1302(w_Hou,0x23); //24小時模式
        Write1302(w_xi,0x03);
        Write1302(w_Day,0x28);
        Write1302(w_Mou,0x02);
        Write1302(w_Yea,0x11); //初始化系統時間 2011年5月11日周三12:12:12
        Write1302(w_protect,0x80); //寫保護
        }
        void disp(void)
        {
        key4();
        if(menu==0)
        {
        Normal();
        read_temp(); //讀取溫度
        ds1820disp();//顯示
        }
        if(menu==1)
        {
        TimeSet();
        }
        num=0;
        if(menu==2)
        {
        StopWatch();
        }
        if(menu==3)
        {
        Alarm();
        }
        if(menu==4)
        {
        init_info();
        }
        if(menu==5)
        {
        menu=0;
        write_add(0x01); //清屏
        }
        }
        void main()
        {
        init_DS1302(); //初始化1302
        EN=1;
        RW=0; //寫命令
        write_add(0x38); //設置16*2行顯示,5*7點陣,8位數據接口
        write_add(0x0c); //開顯示,不顯示光標
        write_add(0x06);
        write_add(0x01); //清屏
        while(1)
        {
        disp(); //顯示
        }
        }

        51單片機相關文章:51單片機教程


        單片機相關文章:單片機教程


        單片機相關文章:單片機視頻教程


        單片機相關文章:單片機工作原理



        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 怀柔区| 磐石市| 漳浦县| 安宁市| 江西省| 高阳县| 武鸣县| 房山区| 晋城| 和林格尔县| 南漳县| 兴安县| 汉中市| 布尔津县| 嵩明县| 县级市| 卓尼县| 教育| 麟游县| 龙岩市| 晋城| 德格县| 衡山县| 东城区| 大英县| 宁国市| 虎林市| 广南县| 岳阳市| 额济纳旗| 曲水县| 信丰县| 黎平县| 综艺| 兴国县| 汉川市| 信宜市| 阳东县| 墨竹工卡县| 镇沅| 诏安县|