i2c 24c02简单的应用

#include < reg52.h >
    
#define  uchar unsigned char

sbit ledlk
= P1 ^ 0 ;
sbit smglk
= P1 ^ 1 ;
sbit scl
= P1 ^ 4 ;
sbit sda
= P1 ^ 3 ;

void  delay()
{;;}

void  delayms(uchar ms)
{
    uchar i,j;
    
for (i = ms;i > 0 ;i -- )    
        
for (j = 100 ;j > 0 ;j -- );
}

void  init()
{
    smglk
= 0 ;
}

void  start()
{
    sda
= 1 ;
    delay();
    scl
= 1 ;
    sda
= 0 ;
    delay();
}

void  stop()
{
    sda
= 0 ;
    delay();
    scl
= 1 ;
    delay();
    delay();
    sda
= 1 ;
    delay();
    delay();
}  

void  answ()
{
    uchar i;
    scl
= 1 ;
    
while ((sda == 1 ) && (i < 4 ))i ++ ;    
    scl
= 0 ;
}  

void  write_byte(uchar tmp)
{
    uchar i;
    
    
for (i = 0 ;i < 8 ;i ++ )
    {
        tmp
= tmp << 1 ;
        scl
= 0 ;    
        sda
= CY;
        scl
= 1 ;
    }
    scl
= 0 ;  
}       

uchar read_byte()
{

    uchar i,k;
    scl
= 0 ;
    
for (i = 0 ;i < 8 ;i ++ )
    {
        scl
= 1 ;    
        k
= (k << 1 ) | sda;
        scl
= 0 ;    
    }
    
return  k;
}

void  write(uchar add,uchar date)
{
    start();
    write_byte(
0xa0 );
    answ();    
    write_byte(add);
    answ();
    write_byte(date);
    answ();
    stop();
}

uchar read(uchar add)
{
    uchar tmp;    
    start();
    write_byte(
0xa0 );
    answ();
    write_byte(add);
    answ();
    
    start();
    write_byte(
0xa1 );
    answ();
    tmp
= read_byte();
    stop();
    
return  tmp;
}
void  main()
{
    unsigned 
int  i;
    init();
    
for (i = 0 ;i < 256 ;i ++ )
    {    
        write(
23 ,i);
        delayms(
1000 );
        P2
= read( 23 );
    }
    
while ( 1 );
    
}        
                
    
    

转载于:https://www.cnblogs.com/zjr10000/archive/2009/07/13/1522205.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值