唯倚社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 587|回复: 5

[学习教程] 读写AT24C02+1602显示+仿真图

[复制链接]

2

主题

2

帖子

17

积分

LV1

Rank: 1

积分
17
发表于 2017-9-23 19:51:17 | 显示全部楼层 |阅读模式

轻松玩转社区

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

#include "AT24C02.h"
#include"delaynms.h"
#include<intrins.h>   //包含_nop_()函数定义的头文件
#define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B
#define OP_WRITE 0xa0 // 器件地址以及写入操作,0xa1即为1010 0000B

/***************************************************
函数功能:开始数据传送
***************************************************/
void start()
// 开始位
{
SDA = 1;    //SDA初始化为高电平"1"
SCL = 1;    //开始数据传送时,要求SCL为高电平"1"
_nop_();    //等待一个机器周期
_nop_();    //等待一个机器周期
SDA = 0;    //SDA的下降沿被认为是开始信号
_nop_();    //等待一个机器周期
_nop_();    //等待一个机器周期
_nop_();    //等待一个机器周期
_nop_();    //等待一个机器周期
SCL = 0;    //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)
}
/***************************************************
函数功能:结束数据传送
***************************************************/
void stop()
// 停止位
{
SDA = 0;     //SDA初始化为低电平"0"
_nop_();     //等待一个机器周期
_nop_();     //等待一个机器周期
SCL = 1;     //结束数据传送时,要求SCL为高电平"1"
_nop_();     //等待一个机器周期
_nop_();     //等待一个机器周期
_nop_();     //等待一个机器周期
_nop_();     //等待一个机器周期
SDA = 1;    //SDA的上升沿被认为是结束信号
}
/***************************************************
函数功能:从AT24Cxx读取数据
出口参数:x
***************************************************/
unsigned char ReadData()
// 从AT24Cxx移入数据到MCU
{
unsigned char i;
unsigned char x;   //储存从AT24Cxx中读出的数据
for(i = 0; i < 8; i++)
{
  SCL = 1;                //SCL置为高电平
  x<<=1;                  //将x中的各二进位向左移一位
  x|=(unsigned char)SDA;  //将SDA上的数据通过按位"或"运算存入x中
  SCL = 0;                        //在SCL的下降沿读出数据
}
return(x);                //将读取的数据返回
}
/***************************************************
函数功能:向AT24Cxx的当前地址写入数据
入口参数:y (储存待写入的数据)
***************************************************/
//在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0
bit WriteCurrent(unsigned char y)
{
unsigned char i;
bit ack_bit;               //储存应答位
for(i = 0; i < 8; i++)  // 循环移入8个位
{
     SDA = (bit)(y&0x80);   //通过按位"与"运算将最高位数据送到S
                                    //因为传送时高位在前,低位在后
  _nop_();            //等待一个机器周期   
    SCL = 1;            //在SCL的上升沿将数据写入AT24Cxx      
    _nop_();            //等待一个机器周期
   _nop_();             //等待一个机器周期      
  
    SCL = 0;            //将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲
  y <<= 1;           //将y中的各二进位向左移一位
}
SDA = 1;     // 发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,
                 //以让SDA线转由接收设备(AT24Cxx)控制
_nop_();        //等待一个机器周期
_nop_();        //等待一个机器周期
SCL = 1;       //根据上述规定,SCL应为高电平
_nop_();       //等待一个机器周期
_nop_();       //等待一个机器周期
_nop_();       //等待一个机器周期
_nop_();       //等待一个机器周期
ack_bit = SDA; //接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节
                //若送高电平,表示没有接收到,传送异常
SCL = 0;       //SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)
return  ack_bit;   // 返回AT24Cxx应答位
}
/***************************************************
函数功能:向AT24Cxx中的指定地址写入数据
入口参数:add (储存指定的地址);dat(储存待写入的数据)
***************************************************/
void WriteSet(unsigned char add, unsigned char dat)
// 在指定地址addr处写入数据WriteCurrent
{
start();               //开始数据传递
WriteCurrent(OP_WRITE);  //选择要操作的AT24Cxx芯片,并告知要对其写入数据
WriteCurrent(add);       //写入指定地址
WriteCurrent(dat);       //向当前地址(上面指定的地址)写入数据
stop();                //停止数据传递
delaynms(4);        //1个字节的写入周期为1ms, 最好延时1ms以上
}
/***************************************************
函数功能:从AT24Cxx中的当前地址读取数据
出口参数:x (储存读出的数据)
***************************************************/
unsigned char ReadCurrent()
{
unsigned char x;
start();               //开始数据传递
WriteCurrent(OP_READ);   //选择要操作的AT24Cxx芯片,并告知要读其数据
x=ReadData();         //将读取的数据存入x
stop();                //停止数据传递
return x;              //返回读取的数据
}
/***************************************************
函数功能:从AT24Cxx中的指定地址读取数据
入口参数:set_add
出口参数:x
***************************************************/
unsigned char ReadSet(unsigned char set_add)
// 在指定地址读取
{
start();                      //开始数据传递
WriteCurrent(OP_WRITE);       //选择要操作的AT24Cxx芯片,并告知要对其写入数据
WriteCurrent(set_add);       //写入指定地址
return(ReadCurrent());        //从指定地址读出数据并返回
}


1.png





读写AT24C02 1602显示 仿真图.zip

26.75 KB, 下载次数: 0, 下载积分: E币 -1

137

主题

308

帖子

3832

积分

LV3

Rank: 3Rank: 3

积分
3832

最佳新人

发表于 2017-9-23 19:52:00 | 显示全部楼层
人艰不拆
回复

使用道具 举报

1

主题

100

帖子

79

积分

版主

Rank: 7Rank: 7Rank: 7

积分
79
发表于 2017-9-23 20:16:28 | 显示全部楼层
某大学生的最低奋斗目标,农夫,山泉,有点田
回复

使用道具 举报

31

主题

151

帖子

812

积分

版主

Rank: 7Rank: 7Rank: 7

积分
812
发表于 2017-9-23 23:02:50 | 显示全部楼层
楼主已死,有事儿烧纸
回复

使用道具 举报

3

主题

122

帖子

426

积分

版主

Rank: 7Rank: 7Rank: 7

积分
426
发表于 2017-9-24 04:46:59 | 显示全部楼层
喜闻乐见
回复

使用道具 举报

137

主题

308

帖子

3832

积分

LV3

Rank: 3Rank: 3

积分
3832

最佳新人

发表于 2017-9-24 10:24:59 | 显示全部楼层
我只是来打酱油的
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|weiecn ( 湘ICP备14002058号 )

GMT+8, 2018-12-17 01:35 , Processed in 0.061561 second(s), 11 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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