新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機—AT24C1024(帶程序解析!)—07

        51單片機—AT24C1024(帶程序解析!)—07

        作者: 時間:2016-11-25 來源:網絡 收藏



        然后就是程序了:

        main.c(先從主程序開始嗎~~后邊還有很多的

        //------------------------------------------------------------------------------
        //main.c~~~主文件
        #include"reg52.h"
        #include"MacroAndCOnst.h"
        #include"at24c1024.h"
        #include"delay.h"
        #include"lcdinit.h"
        //------------------------------------------------------------------------------
        uchar code title[]="AT24C1024 Text: ";
        uchar send_data[16]={0,1,2,3,4,5,6,7,8,9};//要寫入到AT24C1024的數據
        uchar receive_data[10]; //存儲懂AT24C1024讀出的數據
        //------------------------------------------------------------------------------
        //main
        void main()
        {
        lcd_init();
        lcd_display_string(0x80,title,16);
        //delay(100);//不知道為什么,我第一做的時候延時時間長就錯誤,很明顯是寄存器公用問題
        //可是當我整理的時候卻又能用了~我去列~留著~
        while(!mcu_send_string(0xa0,0x00,0x00,send_data,10));
        delay(10);//這里一定要有一定的延時~~你懂的~~不過我用while循環送~~也可以不用延時
        //如果沒有while語句,那就必須要有個一直延時的~~
        while(!mcu_receive_string(0xa0,0x00,0x00,receive_data,10));
        lcd_display_string(0x80+0x40,receive_data,10);
        while(1);
        }

        LcdInit.c

        //------------------------------------------------------------------------------
        //LCD1602的初始化程序—可調用函數—C51
        #include"reg52.h"
        #include"MacroAndConst.h"
        #include"Delay.h"
        #include"Foot.h"
        //------------------------------------------------------------------------------
        #definedata_port P2
        sbit lcd_en=P3^4;//定義lcd_en使能引腳
        sbit lcd_rs=P3^5;//定義鎖存引腳
        sbit lcd_rw=P3^6;//定義讀寫引腳
        //------------------------------------------------------------------------------
        //LCD寫指令函數
        void lcd_write_command(uchar com)
        {
        lcd_rs=0;
        lcd_rw=0;
        data_port=com;
        delay(1);
        lcd_en=1;
        delay(1);
        lcd_en=0;
        }
        //------------------------------------------------------------------------------
        //LCD寫數據函數
        void lcd_write_data(uchar dat)
        {
        lcd_rs=1;
        lcd_rw=0;
        data_port=dat;
        delay(1);
        lcd_en=1;
        delay(1);
        lcd_en=0;
        }
        //------------------------------------------------------------------------------
        //LCD初始化函數
        void lcd_init()
        {
        lcd_write_command(0x01);
        delay(1);
        lcd_write_command(0x38);
        delay(1);
        lcd_write_command(0x0c);
        delay(1);
        lcd_write_command(0x06);
        delay(1);
        }
        //------------------------------------------------------------------------------
        //LCD顯示一個字節函數
        void lcd_display_char(uchar add,uchar dat)
        {
        lcd_write_command(add);
        delay(1);
        lcd_write_data(dat);
        delay(1);
        }
        //------------------------------------------------------------------------------
        //LCD顯示多個字節函數
        void lcd_display_string(uchar add,uchar *s,uchar num)
        {
        uchar i;
        lcd_write_command(add);
        for(i=0;i {
        lcd_write_data(s[i]);
        delay(1);
        }
        }
        IIC.c

        //------------------------------------------------------------------------------
        #include"reg52.h"
        #include"MacroAndConst.h"
        #include"intrins.h"
        #include"Foot.h"
        bitack;
        //------------------------------------------------------------------------------
        //開始信號函數
        void IIC_start()
        {
        sda=1;
        _nop_();
        scl=1;//開始信號建立時間大于4.7us
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        sda=0; //開始信號鎖定大于4us
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        scl=0;//鉗住IIC總線,準備發送或者接收數據
        _nop_();
        _nop_();
        }
        //------------------------------------------------------------------------------
        //結束信號函數
        void IIC_stop()
        {
        sda=0;
        _nop_();
        scl=1; //結束時間大于4us
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        sda=1;//保證一個終止信號和其實信號的空閑時間大于4.7us
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        }
        //------------------------------------------------------------------------------
        //主控器件接收應答函數
        void IIC_ack_acc()
        {
        _nop_();
        _nop_();
        sda=1;//8位數據發送完后,準備接收數據
        _nop_();
        _nop_();
        scl=1;
        _nop_();
        _nop_();
        _nop_();
        if(sda==1)
        ack=0;
        else
        ack=1;//接收到應答位,ack為1,否則置0
        scl=0;
        _nop_();
        _nop_();
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 肇州县| 东乡县| 浙江省| 托克逊县| 景泰县| 偏关县| 靖江市| 莱州市| 嘉黎县| 迁安市| 荆州市| 长治市| 博湖县| 新郑市| 盐津县| 武清区| 文水县| 华池县| 大埔区| 罗甸县| 寿光市| 新河县| 莎车县| 新兴县| 阿鲁科尔沁旗| 长阳| 新津县| 凤城市| 江孜县| 陈巴尔虎旗| 瓦房店市| 高要市| 饶阳县| 濮阳市| 淳化县| 朝阳市| 金湖县| 封丘县| 万州区| 台东市| SHOW|