📄 24c01.c
字号:
#include <iom8v.h>
#include <macros.h>
#define SLAW 0b10100000
#define SLAR 0b10100001
#define SCL_H PORTC|=0B00100000
#define SCL_L PORTC&=0B11011111
#define SDA_H PORTC|=0B00010000
#define SDA_L PORTC&=0B11101111
#define START DDRC|=0B00110000;SCL_L;SDA_H;SCL_H;delay(1);SDA_L;delay(1);SCL_L
//DDRC 要根据情况决定用位运算还是直接赋值。
#define END SCL_L;SDA_L;SCL_H;delay(1);SDA_H;delay(1);SCL_L
//c4接SDA,c5接SCL
int num[10]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X27,0X7F,0X6F};
void main()
{
int i=0;
DDRB=0XFF;
DDRC=0XFF;
DDRD=0XFF;
PORTB=num[0];
PORTC=0Xfe;
PORTD=0Xef;
//for(i=1;i<10;i++){write(i,i);}
write(0,0);
for(i=0;i<11;i++){PORTB=read();delay(1000);}
}
getn(int m,int n,int p) //取m的第n位输出到第p(0~7)位上
{
int x;
x=m>>n&0x01;
return (x<<p);
}
void ser(void) //应答
{
DDRC&=0B11101111;
SCL_H;
SCL_L;
DDRC|=0B00110000;
}
void write(int adr,int data) //写数据
{
int i;
START;
in(SLAW);ser();
in(adr);ser();
in(data);ser();
END;
}
read(void) //读数据
{
int i,v=0b11111111;
START;
in(SLAR);ser();
DDRC&=0B11101111;
for(i=0;i<8;i++)
{
SCL_H;
if((PINC&0B00010000)==0)
v^=(0b10000000>>i);//第i位取反
SCL_L;
}
ser();
END;
return(v);
}
void delay(int t)
{
int s;
for(;t>0;t--)
for(s=0;s<100;s++);
}
void in(int v) //按字节输入24C01A
{
int i;
for(i=0;i<8;i++)
{
SCL_L;
SDA_L;
PORTC|=getn(v,7-i,4);
SCL_H;
SCL_L;
SDA_L;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -