新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > IIC記憶單片機開機次數

        IIC記憶單片機開機次數

        作者: 時間:2016-11-30 來源:網絡 收藏
        IIC具有記憶功能,其實之前沒有體會好為什么會記憶,因為編的程序是讓燈閃爍的,所以理解不出它可以所謂記憶的原理,今天通過數碼管讓其記憶單片機開機次數,終于明天了它的真正原理,其實是單片機控制它的時候,程序不斷運行,把程序運行得到的數據不斷地寫入IIC寄存器中,而寄存器是掉電后不數據不會丟失的,所以當我們把程序關了,也就是掉電了以后數據被保存了下來,下次再開機運行的時候,程序是從頭開始的,但是地址是從我們上次我們寄存器儲存地址開始的,所以就達到了記憶的功能。這個的應用在數據的存儲和保護是很大的,比如交通燈記憶違章車輛,賬戶儲存,數據累積等可以靠它進行儲存。

        下面是IIC記憶單片機開機次數的程序:

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

        程序如下:
        //版權所有:單片機網http://www.51hei.com
        #include
        #include
        #define uchar unsigned char//宏定義
        #define uint unsigned int
        sbit scl=P2^0;//這兩個位定義是控制IIC的引腳
        sbit sda=P2^1;
        uchar number[10]={ //數碼管數組定義
        0x3f,
        0x06,
        0x5b,
        0x4f,
        0x66,
        0x6d,
        0x7d,
        0x07,
        0x7f,
        0x6f
        };
        void delayt(void)//數碼管的延時
        {
        uint x,y;
        for(x=0;x<5;x++)
        for(y=0;y<120;y++);
        }
        void delay(void)//IIC的適應延時
        {
        _nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();
        }
        void start()//開始
        {
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
        }
        void stop()//停止
        {
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
        }
        void init()//初始化設置
        {
        sda=1;
        scl=1;
        }
        void answer()//應答
        {
        uchar i;
        scl=1;
        while((sda==1)&&(i<250))i++;
        scl=0;
        delay();
        }
        void noanser()//非應答
        {
        scl=1;
        delay();
        sda=1;
        delay();
        scl=0;
        delay();
        }
        void writebyte(uchar dat)//寫字節
        {
        uchar i;
        scl=0;
        delay();
        for(i=0;i<8;i++)
        {
        if(dat&0x80)
        {
        sda=1;
        }
        else
        {
        sda=0;
        }
        dat=dat<<1;
        delay();
        scl=1;
        delay();
        scl=0;
        delay();
        }
        sda=1;

        }

        uchar readbyte()//讀字節
        {
        uchar i,dat;
        scl=0;
        delay();
        sda=1;
        delay();
        for(i=0;i<8;i++)
        {
        scl=1;
        delay();
        dat=dat<<1;
        if(sda)
        {
        dat++;
        }
        scl=0;
        delay();
        }
        return dat;
        }


        void write_byte(uchar add,uchar dat)//寫字節的封裝
        {
        init();
        start();
        writebyte(0xae);
        answer();
        writebyte(add);
        answer();
        writebyte(dat);
        answer();
        stop();
        }
        uchar read_byte(uchar add)//讀字節的封裝
        {
        uchar value;
        init();
        start();
        writebyte(0xae);
        answer();
        writebyte(add);
        answer();
        start();
        writebyte(0xaf);
        answer();
        value=readbyte();
        noanser();
        stop();
        return value;
        }
        void main()
        {


        uchar temp,k,j;

        temp=read_byte(0x10);//數碼管個位和十們的操作
        k=temp/10;
        j=temp%10;
        temp++;
        write_byte(0x10,temp);
        delay();
        while(1)//數碼管顯示
        {
        P1=number[k];
        P0=0;
        delayt();
        P1=number[j];
        P0=1;
        delayt();
        }
        }



        關鍵詞: IIC單片機開機次

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 西昌市| 大新县| 龙陵县| 江源县| 西乌珠穆沁旗| 平顺县| 舒城县| 临夏县| 神池县| 佳木斯市| 南溪县| 宣威市| 绥德县| 临漳县| 壶关县| 唐海县| 武山县| 离岛区| 盐亭县| 通山县| 瓦房店市| 乌兰察布市| 馆陶县| 和田县| 安福县| 阜康市| 禹城市| 特克斯县| 黄平县| 庄河市| 湖北省| 盐城市| 祁连县| 台安县| 连城县| 韶关市| 合山市| 宁南县| 古浪县| 吴忠市| 昂仁县|