新聞中心

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

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

        作者: 時間:2016-12-02 來源:網絡 收藏
        #include

        #include
        #define uchar unsigned char
        #define uint unsigned int
        uchar tent,tent1,secbf,secbf1;sec,min,sec1,min1;

        bit write_secbf=0,write_secbf1=0;

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

        sbit scl_24=P2^6;
        sbit sda_24=P2^7;
        sbit en=P1^2;
        sbit rs=P1^0;
        sbit rw=P1^1;
        sbit gnd=P2^5;
        sbit puss=P2^3;
        sbit clear=P2^2;
        sbit puss1=P2^1;
        sbitstart=P2^0;
        void delay(int i)
        {uchar x,y;
        for (x=i;x>0;x--)
        for(y=110;y>0;y--);
        }

        /**********1602子程序****************************/

        void write_com(uchar com)
        {
        rs=0;
        P0=com;
        delay(5);
        en=1;
        delay(5);
        en=0;
        }

        void write_dat(uchar dat)
        {
        rs=1;
        P0=dat;
        delay(5);
        en=1;
        delay(5);
        en=0;

        }


        void init_1602()
        {
        en=0;
        rw=0;
        write_com(0x38);
        write_com(0x0c);//如果輸入0X0F會是什么效果
        write_com(0x06);
        write_com(0x01);
        write_com(0x80);
        }


        /**************************延時子程序***********************/


        void usdelay()
        {
        _nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();
        }

        /***************以下開始為24CXX用子程序**********************/


        void star24()//開始信號
        {//時鐘線在高電平時,數據線由高變低即為開始信號由高變低即為開始信號
        sda_24=1;
        usdelay();
        scl_24=1;
        usdelay();
        sda_24=0;//數據線由高變低即為開始信號
        usdelay();
        scl_24=0;
        }

        void stop24()//結束信號
        {//時鐘線在高電平時,數據線由低變高即為結束信號
        sda_24=0;
        usdelay();
        scl_24=1;
        usdelay();
        sda_24=1;
        usdelay();
        sda_24=0;//這句可有可無
        scl_24=0;//這句可有可無
        }

        void Ack24()
        {uchar i;
        scl_24=1;
        usdelay();
        while((sda_24==1)&&(i<200))i++;
        scl_24=0;
        usdelay();
        }
        /*
        void NoAck24() //不應答
        {
        sda_24=1;//時鐘線高電平時,數據線高,即為不應答
        usdelay();
        scl_24=1;
        usdelay();
        scl_24=0;
        usdelay();
        } */

        void init_24()
        {
        sda_24=1;
        usdelay();
        scl_24=1;
        usdelay();
        }


        void write_byte(uchar dat)
        {
        uchar i,temp;
        temp=dat;
        //scl_24=0;//低電平可以變數據,為高時是讀,且不能變
        for(i=0;i<8;i++)
        {
        temp=temp<<1;
        scl_24=0;
        usdelay();
        sda_24=CY;//CY是PSW寄存器中的CY位,再把CY賦給SDA,再由SCL控制發出去
        //sda_24=(bit)(temp&0x80);//用這句也可以換掉上一句(bit)是強制轉換命令,把數據轉成非0即1
        usdelay();
        scl_24=1;
        usdelay();
        }
        scl_24=0;
        usdelay();
        sda_24=1;//釋放總線
        usdelay();
        }

        uchar read_byte()
        {

        uchar i,k;
        scl_24=0; //這句可有可無
        usdelay(); //這句可有可無
        sda_24=1; //釋放總線
        usdelay();
        for(i=0;i<8;i++)
        {
        scl_24=1;
        usdelay();
        k=(k<<1)|sda_24;//判斷8次,移位7次
        scl_24=0;
        usdelay();

        }
        return k;
        }

        void write_add(uchar add,uchar dat)
        {
        star24();
        write_byte(0xa0);//呼叫器件,高四位為定了的1010,即A,低四位三個接了地,所以為000,最后一個0是寫標志
        Ack24();//寫了后要馬上應答
        write_byte(add);//寫要往哪個地址寫數據00-1023
        Ack24();//每寫一次要給一個應答位
        write_byte(dat);//把數據寫入
        Ack24();
        stop24();//給一個停止位,結束寫數據
        }


        uchar read_add(uchar add)
        {
        uchar dat;
        star24();
        write_byte(0xa0);//呼叫器件,高四位為定了的1010,即A,低四位三個接了地,所以為000,最后一個0是寫標志
        Ack24();//寫了后要馬上應答
        write_byte(add);//寫入要往哪個地址讀數據00-1023
        Ack24();//每寫一次要給一個應答位
        star24();
        write_byte(0xa1);//呼叫器件,高四位為定了的1010,即A,低四位三個接了地,所以為000,最后一個1是讀標志
        Ack24();//寫了后要馬上應答
        dat=read_byte();
        stop24();//給一個停止位,結束讀數據
        return dat;
        }

        void display_secbf(uchar dat)
        {

        write_com(0x80+13);
        write_dat(0x30+dat);

        }

        void display_secbf1(uchar dat)
        {

        write_com(0x80+0x40+13);
        write_dat(0x30+dat);

        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 敦煌市| 余江县| 咸宁市| 龙海市| 双鸭山市| 高州市| 调兵山市| 赤壁市| 黎城县| 汉川市| 临泽县| 公主岭市| 滕州市| 康定县| 河池市| 美姑县| 临泽县| 邛崃市| 玉溪市| 定边县| 安宁市| 乐昌市| 会昌县| 石首市| 平江县| 南京市| 永寿县| 威远县| 浦江县| 景东| 瑞金市| 英吉沙县| 广宁县| 中宁县| 昆山市| 古田县| 卫辉市| 墨竹工卡县| 鄂州市| 福建省| 文登市|