久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

立即注冊 登錄
返回首頁

uid:155764的個(gè)人空間

日志

EEPROM多字節(jié)讀寫

已有 3908 次閱讀2017-11-3 22:09

 /************************main.c文件程序源代碼**************************/


#include <reg52.h>

extern void LcdInit();
extern void LcdShowStr(unsigned char x, unsigned char y, const unsigned char *str);
extern void I2CStart();
extern void I2CStop();
extern unsigned char I2CReadACK();
extern unsigned char I2CReadNAK();
extern bit I2CWrite(unsigned char dat);
void E2Read(unsigned char *buf, unsigned char addr, unsigned char len);
void E2Write(unsigned char *buf, unsigned char addr, unsigned char len);
void ArrayToHexStr(unsigned char *str, unsigned char *array, unsigned char len);

void main ()
{
    unsigned char i;
    unsigned char buf[5];
    unsigned char str[20];

    LcdInit();   //初始化液晶
    E2Read(buf, 0x90, sizeof(buf));       //E2中讀取一段數(shù)據(jù)
    ArrayToHexStr(str, buf, sizeof(buf)); //轉(zhuǎn)換為十六進(jìn)制字符串
    LcdShowStr(0, 0, str);                //顯示到液晶上
    for (i=0; i<sizeof(buf); i++)        //數(shù)據(jù)依次+1,+2,+3...
    {
        buf[ i] = buf[ i] + 1 + i;
    }
    E2Write(buf, 0x90, sizeof(buf));      //再寫回到E2

    while(1)
    {}
}

void ArrayToHexStr(unsigned char *str, unsigned char *array, unsigned char len) //把一個(gè)字節(jié)數(shù)組轉(zhuǎn)換為十六進(jìn)制字符串的格式
{
    unsigned char tmp;

    while (len--)
    {
        tmp = *array >> 4;         //先取高4
        if (tmp <= 9)              //轉(zhuǎn)換為0-9A-F
            *str = tmp + '0';
        else
            *str = tmp - 10 + 'A';
        str++;
        tmp = *array & 0x0F;       //再取低4
        if (tmp <= 9)              //轉(zhuǎn)換為0-9A-F
            *str = tmp + '0';
        else
            *str = tmp - 10 + 'A';
        str++;
        *str = ' ';                //轉(zhuǎn)換完一個(gè)字節(jié)添加一個(gè)空格
        str++;
        array++;
    }
}
void E2Read(unsigned char *buf, unsigned char addr, unsigned char len) //E2讀取函數(shù),數(shù)據(jù)接收指針bufE2中的起始地址addr,讀取長度len
{
    do {                       //用尋址操作查詢當(dāng)前是否可進(jìn)行讀寫操作
        I2CStart();
        if (I2CWrite(0x50<<1)) //器件應(yīng)答則跳出循環(huán),繼續(xù)執(zhí)行,非應(yīng)答則進(jìn)行下一次查詢
            break;
        I2CStop();
    } while(1);
    I2CWrite(addr);           //寫入起始地址
    I2CStart();               //發(fā)送重復(fù)啟動(dòng)信號
    I2CWrite((0x50<<1)|0x01); //尋址器件,后續(xù)為讀操作
    while (len > 1)           //連續(xù)讀取len-1個(gè)字節(jié)
    {
        *buf = I2CReadACK();  //最后字節(jié)之前為讀取操作+應(yīng)答
        buf++;
        len--;
    }
    *buf = I2CReadNAK();      //最后一個(gè)字節(jié)為讀取操作+非應(yīng)答
    I2CStop();
}

void E2Write(unsigned char *buf, unsigned char addr, unsigned char len) //E2寫入函數(shù),源數(shù)據(jù)指針bufE2中的起始地址addr寫入長度len
{
    while (len--)
    {
        do {                       //用尋址操作查詢當(dāng)前是否可進(jìn)行讀寫操作,即等待上一次寫入操作完成
            I2CStart();
            if (I2CWrite(0x50<<1)) //器件應(yīng)答則跳出循環(huán),繼續(xù)執(zhí)行,非應(yīng)答則進(jìn)行下一次查詢
                break;
            I2CStop();
        } while(1);
        I2CWrite(addr);           //寫入起始地址
        I2CWrite(*buf);           //寫入一個(gè)字節(jié)數(shù)據(jù)
        I2CStop();                //結(jié)束寫操作,以等待寫入完成
        buf++;                    //數(shù)據(jù)指針遞增
        addr++;                   //E2地址遞增
    }
}


路過

雞蛋

鮮花

握手

雷人

評論 (0 個(gè)評論)

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

返回頂部
主站蜘蛛池模板: 欧美www在线 | 91国自产 | 欧美性生活网 | 伊人网站在线观看 | 国产精品一区二区在线 | 国内精品久久久久久 | 在线一区视频 | 欧美a在线 | a级黄色网 | 欧美成人精品激情在线观看 | 午夜影院普通用户体验区 | 亚洲一区二区中文字幕 | 成人精品一区二区 | av香蕉 | 国产在线www| 亚洲综合色站 | 欧美在线免费 | 九九亚洲 | 欧美天堂 | 亚洲精品美女视频 | 欧美成人专区 | av中文在线 | 日韩精品在线免费观看视频 | 亚洲精品乱码久久久久久黑人 | 毛片网站在线观看 | 狠狠操狠狠干 | 日韩欧美在线一区 | 激情毛片| 日韩三极 | 久久久久亚洲精品 | 久久亚洲一区二区 | 欧美精品一区二区三区在线 | 久久精品国产v日韩v亚洲 | 一区二区三区在线 | 久久国产精品色av免费观看 | 99精品视频在线观看 | 精品欧美一区二区在线观看视频 | 欧美精品一区在线发布 | 99热热 | 天天干天天干 | 视频一区中文字幕 |