新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于24C08帶掉電記憶功能的兩路電子跑表

        基于24C08帶掉電記憶功能的兩路電子跑表

        作者: 時間:2016-12-02 來源:網(wǎng)絡 收藏

        void display_sec(uchar add,uchar dat)
        {
        uchar a,b;
        a=dat/10;
        b=dat%10;
        write_com(0x80+add);
        write_dat(0x30+a);
        write_dat(0x30+b);
        write_dat(.);
        }

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

        void display_sec1(uchar add,uchar dat)
        {
        uchar a,b;
        a=dat/10;
        b=dat%10;
        write_com(0x80+0x40+add);
        write_dat(0x30+a);
        write_dat(0x30+b);
        write_dat(.);
        }

        void display_min(uchar add,uchar dat)
        {
        uchar a,b;
        a=dat/10;
        b=dat%10;
        write_com(0x80+add);
        write_dat(0x30+a);
        write_dat(0x30+b);
        write_dat(:);
        }

        void display_min1(uchar add,uchar dat)
        {
        uchar a,b;
        a=dat/10;
        b=dat%10;
        write_com(0x80+0x40+add);
        write_dat(0x30+a);
        write_dat(0x30+b);
        write_dat(:);
        }

        void keyscan()
        {
        if (start==0)
        {
        TR0=~TR0;
        TR1=~TR1;
        }
        if(puss==0)
        {
        delay(30);
        while(!puss);
        TR0=~TR0;
        }

        if(puss1==0)
        {
        delay(30);
        while(!puss1);
        TR1=~TR1;
        }


        if(clear==0)
        {

        delay(30);
        while(!clear);
        secbf=0;
        write_add(0,0);
        write_add(0,0);
        sec=0;
        write_add(1,0);
        write_add(1,0);
        min=0;
        write_add(2,0);
        write_add(2,0);
        display_secbf(secbf);
        display_sec(10,sec);
        display_min(7,min);
        TR0=0;

        secbf1=0;
        write_add(10,0);
        write_add(10,0);
        sec1=0;
        write_add(11,0);
        write_add(11,0);
        min1=0;
        write_add(12,0);
        write_add(12,0);

        display_secbf1(secbf);
        display_sec1(10,sec);
        display_min1(7,min);
        TR1=0;
        }
        }


        void N01()
        {
        display_secbf(secbf);
        display_sec(10,sec);
        display_min(7,min);
        if(secbf==10)
        {
        secbf=0; //定時10秒,如果滿了,從0重新開始
        sec++;
        if(sec==60)
        {
        sec=0;
        min++;
        if(min==60)
        min=0;
        write_add(2,min);
        }
        write_add(1,sec);
        }
        if(write_secbf==1)
        {
        write_secbf=0;
        write_add(0,secbf);

        }

        }

        void N02()
        {
        display_secbf1(secbf1);
        display_sec1(10,sec1);
        display_min1(7,min1);
        if(secbf1==10)
        {
        secbf1=0; //定時10秒,如果滿了,從0重新開始
        sec1++;
        if(sec1==60)
        {
        sec1=0;
        min1++;
        if(min1==60)
        min1=0;
        write_add(12,min1);
        }

        write_add(11,sec1);
        }
        if(write_secbf1==1)
        {
        write_secbf1=0;
        write_add(10,secbf1);
        }

        }


        void main()
        {
        gnd=0;
        init_1602();
        init_24();
        secbf=read_add(0);//從地址2中讀出以前保存的數(shù)據(jù)
        if(secbf==10) secbf=0;//防止首次讀出錯誤數(shù)據(jù)
        sec=read_add(1);
        min=read_add(2);

        secbf1=read_add(10);//從地址2中讀出以前保存的數(shù)據(jù)
        if(secbf1==10) secbf1=0;//防止首次讀出錯誤數(shù)據(jù)
        sec1=read_add(11);
        min1=read_add(12);


        TMOD=0x11;//定時器工作方式1
        ET0=1;//開啟 定時器中斷使能
        EA=1;//總中斷打開
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        TR0=0;//計時開始

        ET1=1;//開啟 定時器中斷使能

        TH1=(65536-5000)/256;
        TL1=(65536-5000)%256;
        TR1=0;//計時開始
        while(1)
        {
        keyscan();
        N01();
        N02();
        }

        }


        void t0()interrupt 1
        {
        TH0=(65536-5000)/256;
        TL0=(65536-5000)%256;
        tent++;//每中斷一次自加1,每次中斷約50MS
        if(tent==20)
        {
        tent=0;
        secbf++;
        write_secbf=1;//數(shù)據(jù)更新標志位,1/10秒寫一次24C08
        }
        }

        void t1()interrupt 3
        {
        TH1=(65536-5000)/256;
        TL1=(65536-5000)%256;
        tent1++;//每中斷一次自加1,每次中斷約50MS
        if(tent1==20)
        {
        tent1=0;
        secbf1++;
        write_secbf1=1;//數(shù)據(jù)更新標志位,1/10秒寫一次24C08
        }
        }


        上一頁 1 2 下一頁

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 依兰县| 新田县| 梅河口市| 岚皋县| 虎林市| 广东省| 兴国县| 临洮县| 胶州市| 绥江县| 印江| 通化市| 建阳市| 濮阳县| 石城县| 栾川县| 汤阴县| 五莲县| 信阳市| 灵璧县| 和政县| 南宁市| 五华县| 瓦房店市| 普陀区| 裕民县| 得荣县| 长泰县| 黄龙县| 岳阳县| 基隆市| 蒙阴县| 前郭尔| 东平县| 黔西| 清苑县| 永福县| 榕江县| 南华县| 离岛区| 新巴尔虎右旗|