|
以下是源程序:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#include<stdlib.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int
#define WSLA 0xa0
#define RSLA 0xa1
bit NACK;
sbit SDA=P1^6;
sbit SCL =P1^7 ;
sbit LED1=P3^0;
sbit LED2=P3^1;
sbit LED3=P3^2;
sbit LED4=P3^3;
bit flag=0,flag1,flag2=0;
uchar n=8;
uchar idata BufWrite[8];
uchar idata BufRead[8];
uchar addr=0x00;
uchar word[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
void display(uchar ch);
void delay()
{
uchar k;
for(k=0;k<5;k++)
_nop_();
}
void start()
{
SDA=1;
_nop_();
SCL=1;
delay();
SDA=0;
delay();
SCL=0;
_nop_();
}
void stop()
{
SDA=0;
_nop_();
_nop_();
SCL=1;
delay();
SDA=1;
delay();
SCL=0;
SDA=0;
}
void CACK()
{
SDA=1;
SCL=1;
flag=0;
flag1=SDA;
if( flag1==1)
flag=1;
SCL=0;
_nop_();
}
void N_ACK()
{
SDA=1;
_nop_();
_nop_();
_nop_();
SCL=1;
delay();
SCL=0;
_nop_();
_nop_();
SDA=0;
}
void ACK()
{
SDA=0;
_nop_();
_nop_();
_nop_();
SCL=1;
delay();
SCL=0;
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
}
void WriteOneByte(uchar ch)
{
uchar i;
uchar Write;
Write= ch;
for( i=0;i<8;i++)
{
if((Write&0x80)==0x80)
{
SDA=1;
}
else
{
SDA=0;
}
_nop_();
SCL=1;
delay();
SCL=0;
Write= Write<<1;
}
}
uchar ReadOneByte()
{
uchar i;
uchar Read=0x00;
uchar m=8;
SDA=1;
for( i=0;i<8;i++)
{
SDA=1;
_nop_();
_nop_();
SCL=1;
delay();
Read=Read<<1;
if(SDA==1)
Read=Read|0x01;
else
Read=Read &0xfe;
SCL=0;
/*
flag2=SDA;
Read=(_crol_(flag2,m--)|| Read);
SCL=0; */
}
return Read;
}
void WriteByte(uchar addr)
{
uchar i;
start();
WriteOneByte(WSLA);
CACK();
WriteOneByte(addr);
CACK();
for(i=0;i<n;i++)
{
WriteOneByte(BufWrite);
CACK();
}
stop();
}
void ReadByte(uchar addr)
{
uchar i;
start();
WriteOneByte(WSLA);
CACK();
WriteOneByte(addr);
CACK();
start();
WriteOneByte(RSLA);
CACK();
for(i=0;i<n;i++)
{
BufRead=ReadOneByte();
if(i==7)
N_ACK();
else
ACK();
display(BufRead);
}
stop();
}
void display(uchar ch)
{
uchar j;
uint k;
P0= ch;
LED1=0;
for(k=0;k<10000;k++)
{
for(j=0;j<20;j++);
}
}
/*
void display()
{
uchar i,j;
uint k;
for(i=0;i<n;i++)
{
P0= BufRead;
LED1=0;
for(k=0;k<10000;k++)
{
for(j=0;j<10;j++);
}
}
}
*/
void main()
{
uchar i;
uint k;
for(i=0;i<n;i++)
{
BufWrite= word;
}
while(1)
{
WriteByte(0x00);
for(k=0;k<10000;k++);
ReadByte(0x00);
for(k=0;k<10000;k++);
}
}
加入proteus的调试ourdev_692249ESQROJ.rar(文件大小:53K) (原文件名:IIC.rar) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|