標(biāo)題: 幫忙看看這i2c細(xì)節(jié)錯(cuò)在那,走不動(dòng) [打印本頁(yè)]

作者: 狼的救贖    時(shí)間: 2014-11-14 21:36
標(biāo)題: 幫忙看看這i2c細(xì)節(jié)錯(cuò)在那,走不動(dòng)
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char

sbit sda=P2^2;
sbit scl=P2^3;     //AT24c02 管腳定義
sbit duan=P2^1;
sbit wei=P2^0;
bit ack;

unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數(shù)碼管顯示定義
unsigned char tempdata[8];
void nop()
{
;;
}

void delayus(uchar t);
void delayms(unsigned int t);

void delayus(uchar t)
{
while(--t);
}

void delayms(unsigned int t)
{
while(t--)
  {
  delayus(245);
  delayus(245);
  }
}

void display()
{
uchar i;
P0=0;
duan=1;
duan=0;

P0=tempdata[i];
duan=1;
duan=0;

P0=weima[i];
wei=1;
wei=0;
i++;
if(i==8)i=0;
}

void timers0(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display();
}

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

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

void NOACK()
{
sda=1;
nop();
scl=1;
nop();
scl=0;
nop();
}
void write(unsigned char c)
{
unsigned char i;
scl=0;
for(i=0;i<8;i++)
  {  
  c=c<<1;
  sda=CY;
  scl=1;
  nop();
  scl=0;
  nop();
  }
  scl=1;
  nop();
  sda=1;
  nop();
  if(sda==0)ack=0;
  else ack=1;
  scl=0;
  nop();
}

unsigned char read()
{
unsigned char i,k;
scl=0;
nop();
for(i=0;i<8;i++)
   {
   scl=1;
   nop();
   k=(k<<1)|sda;
   scl=0;
   nop();
   }
   nop();
   scl=0;
   return(k);
}

bit write_string(unsigned char dizhi,unsigned char p)
{
start();
write(0xae);
if(ack==0)return(0);
write(dizhi);
if(ack==0)return(0);
write(p);
if(ack==0)return(0);
stop();
return(1);
}

bit read_string(unsigned char dizhi)
{
unsigned char p;
start();
write(0xae);
if(ack==0)return(0);
write(dizhi);
if(ack==0)return(0);

start();
write(0xaf);
if(ack==0)return(0);
p=read();
NOACK();
stop();
return(1);
}

void main()
{
unsigned char s,b;
TMOD |=0x01;
EA=1;
ET0=1;
TR0=1;
s=read_string(4);
while(1)
{
tempdata[0]=duanma[(s/10)/10];
tempdata[1]=duanma[(s/10)%10];
tempdata[2]=duanma[(s%10)%10];
for(b=0;b<5;b++)delayms(200);
s++;
write_string(4,s);
if(s==255)s=0;
}
}


作者: jiege    時(shí)間: 2014-11-15 20:24
希望能搞定幫忙頂一下
作者: dzljp    時(shí)間: 2014-11-16 20:51
幫忙頂一下




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1