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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3670|回復: 3
收起左側

為什么我AT24C02一直顯示255

[復制鏈接]
ID:900102 發表于 2021-4-6 16:35 | 顯示全部樓層 |閱讀模式
#include<stc15f2k60s2.h>
#include<intrins.h>

#define uchar unsigned char
uchar TAB[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0xaa,0xff};
uchar YI,ER,SAN,SI,WU,LIU,QI,BA;
#define DELAY_TIME 5
#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1
sbit SCL=P2^0;
sbit SDA=P2^1;
void IIC_Delay(unsigned char i);
void IIC_Stop(void);

void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
                while (--j);
        } while (--i);
}
void IIC_Delay(unsigned char i)  //IIC通信延時程序
{
    do{_nop_();}
    while(i--);        
}
void IIC_Start(void)     //iic啟動程序
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;       
}

void IIC_Stop(void)                                                        //iic停止
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}
void IIC_SendAck(bit ackbit)                        //iic響應
{
    SCL = 0;
    SDA = ackbit;                                          // 0:應答,1:非應答
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0;
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}
bit IIC_WaitAck(void)                                                //iic等待應答
{
    bit ackbit;
       
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    return ackbit;
}
void IIC_SendByte(unsigned char byt)  //發送數據
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) SDA  = 1;
        else SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

unsigned char IIC_RecByte(void)        //iic讀取字節
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
            SCL = 1;
        IIC_Delay(DELAY_TIME);
        da <<= 1;
        if(SDA) da |= 1;
        SCL = 0;
        IIC_Delay(DELAY_TIME);
    }
    return da;   
}


void iicwrite(uchar add,uchar dat)
{
        IIC_Start();
//        IIC_SendByte(0xa0);         //啟動寫模式
        IIC_SendByte(0x90);   //AD轉換
        IIC_SendAck(IIC_WaitAck());
       
        IIC_SendByte(add);
        IIC_SendAck(IIC_WaitAck());
        IIC_SendByte(dat);
        IIC_SendAck(IIC_WaitAck());
        IIC_Stop();
}

uchar iicread(uchar add)
{
        uchar temp;
        IIC_Start();
        //IIC_SendByte(0xa0);
        IIC_SendByte(0x90);
        IIC_SendAck(IIC_WaitAck());
       
        IIC_SendByte(add);
        IIC_Stop();
       
        IIC_Start();
        IIC_SendByte(0xa1);            //啟動讀模式
        //IIC_SendByte(0x91);
        IIC_SendAck(IIC_WaitAck());
        temp=IIC_RecByte();                                                //收回參數
        IIC_Stop();
        return temp;
       

}


void allinit()
{
        P2=0X80;
        P0=0XFF;
       
        P2=0XA0;
        P0=0X00;
       
        P2=0XC0;
        P0=0XFF;
        P2=0XF0;
        P0=0XFF;


}


void display1()
{
        P2=0XC0;
        P0=0X01;
        P2=0XFF;
        P0=TAB[YI];
        Delay1ms();
       
        P2=0XC0;
        P0=0X02;
        P2=0XFF;
        P0=TAB[ER];
        Delay1ms();

}
void display2()
{
        P2=0XC0;
        P0=0X04;
        P2=0XFF;
        P0=TAB[SAN];
        Delay1ms();
       
        P2=0XC0;
        P0=0X08;
        P2=0XFF;
        P0=TAB[SI];
        Delay1ms();

}
void display3()
{
        P2=0XC0;
        P0=0X10;
        P2=0XFF;
        P0=TAB[WU];
        Delay1ms();
       
        P2=0XC0;
        P0=0X20;
        P2=0XFF;
        P0=TAB[LIU];
        Delay1ms();

}
void display4()
{
        P2=0XC0;
        P0=0X40;
        P2=0XFF;
        P0=TAB[QI];
        Delay1ms();
       
        P2=0XC0;
        P0=0X80;
        P2=0XFF;
        P0=TAB[BA];
        Delay1ms();

}





void main()
{
        uchar num;
        allinit();
       
        YI=11,ER=11;SAN=11;SI=11;WU=11;LIU=0;QI=0;BA=0;
iicwrite(0x00,0);   
        num=iicread(0x00);
        //iicwrite(0x00,num+1);  //AT24C02
       
       
        while(1)
        {
                num=iicread(0x03);
                LIU=num/100;QI=num%100/10;BA=num%10;
                display1();
                display2();
                display3();
                display4();
        }





}

回復

使用道具 舉報

ID:607298 發表于 2021-4-7 09:42 | 顯示全部樓層
EEPROM沒有寫數據,一般都是0xFF(255)
回復

使用道具 舉報

ID:900102 發表于 2021-4-7 16:06 | 顯示全部樓層
lightday 發表于 2021-4-7 09:42
EEPROM沒有寫數據,一般都是0xFF(255)

但是用pcf8591芯片的滑動變阻器會出現一個一直亂跳的數值
回復

使用道具 舉報

ID:883031 發表于 2021-4-7 16:29 | 顯示全部樓層
估計是數據沒寫進去。查一下程序在讀寫IIC時的時序是否正確,這個很重要。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产三级 | 午夜小视频在线观看 | 浴室洗澡偷拍一区二区 | 欧美一级片中文字幕 | 日韩三级视频 | 久久久天天 | 国产精品国产精品国产专区不卡 | 97久久久久久 | 国产高清精品一区二区三区 | 国产激情在线看 | 日本一区高清 | 亚洲一区二区三区久久久 | 亚洲国产精品第一区二区 | 精品小视频 | 91 在线 | 国产精品毛片久久久久久久 | 精品二区 | 成人福利电影 | 久久久久综合 | 在线观看免费福利 | 黄色免费网址大全 | 一区欧美 | 国产欧美一区二区三区免费 | 精品欧美一区免费观看α√ | 成人精品在线观看 | 欧美一级免费看 | 美日韩免费视频 | 欧美国产日韩精品 | 国产精品久久久久av | 视频精品一区二区三区 | 黄网站涩免费蜜桃网站 | 午夜小电影 | 91久久精品国产91久久性色tv | 欧美日韩1区2区 | 国产成人福利 | 日韩超碰在线 | 中文字幕精品一区久久久久 | 欧美日韩一区在线播放 | 日韩www| 懂色tv | 成年人在线观看视频 |