📄 24c02.c
字号:
//AT24C16读写
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define READ 0xa1 // 器件地址以及读取操作
#define WRITE 0xa0 // 器件地址以及写入操作
uchar code dis_code[] = {0x70,0xb0,0xd1,0xe0,0xd1,0xb0,0x71,0xf2}; // 写入到AT24C01的数据串
uchar code display[8];
bit ack; //应答标志
sbit SDA = P3^0;
sbit SCL = P3^1;
void start();
void stop();
bit WriteByte(uchar write_data);
uchar ReadByte(uchar random_addr);
void delayms(uchar ms);
void WriteStr(uchar sla,uchar StartAddr,uchar *Str,uchar num);
main(void)
{
uchar i;
delayms(250);
WriteStr(0xa0,0x00,dis_code,8);
for(i=0;i<8;i++)
{
P1 = ReadByte(i); // 循环读取24Cxx内容,并输出到P0口
delayms(250);
delayms(250);
}
while(1);
}
// 开始位
void start()
{
SDA = 1;
SCL = 1;
_nop_();
_nop_();
SDA = 0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL = 0;
}
// 停止位
void stop()
{
SDA = 0;
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
SDA = 1;
}
// 从MCU移出数据到AT24Cxx
bit WriteByte(uchar write_data)
{
uchar i;
bit ack_bit;
for(i = 0; i < 8; i++) // 循环移入8个位
{
SDA = (bit)(write_data & 0x80);
_nop_();
SCL = 1;
_nop_();
_nop_();
SCL = 0;
write_data <<= 1;
}
SDA = 1; // 读取应答
_nop_();
_nop_();
SCL = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit = SDA;
SCL = 0;
return ack_bit; // 返回AT24Cxx应答位
}
// 在指定地址读取
uchar ReadByte(uchar random_addr)
{
uchar i,read_data;
start();
WriteByte(WRITE);
WriteByte(random_addr);
start();
WriteByte(READ);
for(i = 0; i < 8; i++)
{
SCL = 1;
read_data <<= 1;
read_data |= (uchar)SDA;
SCL = 0;
}
stop();
return read_data;
}
// 在指定地址addr开始写入数据write_data
void WriteStr(uchar sla,uchar StartAddr, uchar *Str,uchar num)
{
uchar i;
start();
WriteByte(sla);
WriteByte(StartAddr);
for(i=0;i<num;i++)
{
WriteByte(*Str);
Str++;
}
stop();
delayms(10); // 写入周期
}
// 延时子程序
void delayms(uchar ms)
{
uchar i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -