找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2586|回复: 2
收起左侧

帮忙看看这i2c细节错在那,走不动

[复制链接]
ID:64047 发表于 2014-11-14 21:36 | 显示全部楼层 |阅读模式
#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};//数码管显示定义
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;
}
}

回复

使用道具 举报

ID:51088 发表于 2014-11-15 20:24 来自手机 | 显示全部楼层
希望能搞定帮忙顶一下
回复

使用道具 举报

ID:67678 发表于 2014-11-16 20:51 | 显示全部楼层
帮忙顶一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表