找回密码
 立即注册
查看: 35|回复: 2

12-1 AT24C02数据存储,江协科技讲普中51单片机开发板STC89C52学习板 配套程序, A2标

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2026-07-23 09:36:34
已绑定手机

231

主题

172

回帖

1081

积分

版主

积分
1081
发表于 2026-7-13 13:19:45 | 显示全部楼层 |阅读模式
12-1 AT24C02数据存储,江协科技讲普中51单片机开发板STC89C52学习板 配套程序, A2标准版
主程序main.C代码如下:


#include <REGX52.H>
#include "LCD1602.h"
#include "Key.h"
#include "AT24C02.h"
#include "Delay.h"

unsigned char KeyNum;
unsigned int Num;

void main()
{
        LCD_Init();
        LCD_ShowNum(1,1,Num,5);
        while(1)
        {
                KeyNum=Key();
                if(KeyNum==1)        //K1按键,Num自增
                {
                        Num++;
                        LCD_ShowNum(1,1,Num,5);
                }
                if(KeyNum==2)        //K2按键,Num自减
                {
                        Num--;
                        LCD_ShowNum(1,1,Num,5);
                }
                if(KeyNum==3)        //K3按键,向AT24C02写入数据
                {
                        AT24C02_WriteByte(0,Num%256);
                        Delay(5);
                        AT24C02_WriteByte(1,Num/256);
                        Delay(5);
                        LCD_ShowString(2,1,"Write OK");
                        Delay(1000);
                        LCD_ShowString(2,1,"        ");
                }
                if(KeyNum==4)        //K4按键,从AT24C02读取数据
                {
                        Num=AT24C02_ReadByte(0);
                        Num|=AT24C02_ReadByte(1)<<8;
                        LCD_ShowNum(1,1,Num,5);
                        LCD_ShowString(2,1,"Read OK ");
                        Delay(1000);
                        LCD_ShowString(2,1,"        ");
                }
        }
}


12-1 AT24C02数据存储.zip

53.34 KB, 下载次数: 3

回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2026-07-23 09:36:34
已绑定手机

231

主题

172

回帖

1081

积分

版主

积分
1081
发表于 2026-7-13 13:20:23 | 显示全部楼层
12-1 AT24C02数据存储,江协科技讲普中51单片机开发板STC89C52学习板 配套程序, A2标准版
I2C.C代码如下:

#include <REGX52.H>

sbit I2C_SCL=P2^1;
sbit I2C_SDA=P2^0;

/**
  * @brief  I2C开始
  * @param  无
  * @retval 无
  */
void I2C_Start(void)
{
        I2C_SDA=1;
        I2C_SCL=1;
        I2C_SDA=0;
        I2C_SCL=0;
}

/**
  * @brief  I2C停止
  * @param  无
  * @retval 无
  */
void I2C_Stop(void)
{
        I2C_SDA=0;
        I2C_SCL=1;
        I2C_SDA=1;
}

/**
  * @brief  I2C发送一个字节
  * @param  Byte 要发送的字节
  * @retval 无
  */
void I2C_SendByte(unsigned char Byte)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                I2C_SDA=Byte&(0x80>>i);
                I2C_SCL=1;
                I2C_SCL=0;
        }
}

/**
  * @brief  I2C接收一个字节
  * @param  无
  * @retval 接收到的一个字节数据
  */
unsigned char I2C_ReceiveByte(void)
{
        unsigned char i,Byte=0x00;
        I2C_SDA=1;
        for(i=0;i<8;i++)
        {
                I2C_SCL=1;
                if(I2C_SDA){Byte|=(0x80>>i);}
                I2C_SCL=0;
        }
        return Byte;
}

/**
  * @brief  I2C发送应答
  * @param  AckBit 应答位,0为应答,1为非应答
  * @retval 无
  */
void I2C_SendAck(unsigned char AckBit)
{
        I2C_SDA=AckBit;
        I2C_SCL=1;
        I2C_SCL=0;
}

/**
  * @brief  I2C接收应答位
  * @param  无
  * @retval 接收到的应答位,0为应答,1为非应答
  */
unsigned char I2C_ReceiveAck(void)
{
        unsigned char AckBit;
        I2C_SDA=1;
        I2C_SCL=1;
        AckBit=I2C_SDA;
        I2C_SCL=0;
        return AckBit;
}


回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:80
  • 最近打卡:2026-07-23 09:36:34
已绑定手机

231

主题

172

回帖

1081

积分

版主

积分
1081
发表于 2026-7-13 13:20:58 | 显示全部楼层
12-1 AT24C02数据存储,江协科技讲普中51单片机开发板STC89C52学习板 配套程序, A2标准版
AT24C02.C代码如下:

#include <REGX52.H>
#include "I2C.h"

#define AT24C02_ADDRESS                0xA0

/**
  * @brief  AT24C02写入一个字节
  * @param  WordAddress 要写入字节的地址
  * @param  Data 要写入的数据
  * @retval 无
  */
void AT24C02_WriteByte(unsigned char WordAddress,Data)
{
        I2C_Start();
        I2C_SendByte(AT24C02_ADDRESS);
        I2C_ReceiveAck();
        I2C_SendByte(WordAddress);
        I2C_ReceiveAck();
        I2C_SendByte(Data);
        I2C_ReceiveAck();
        I2C_Stop();
}

/**
  * @brief  AT24C02读取一个字节
  * @param  WordAddress 要读出字节的地址
  * @retval 读出的数据
  */
unsigned char AT24C02_ReadByte(unsigned char WordAddress)
{
        unsigned char Data;
        I2C_Start();
        I2C_SendByte(AT24C02_ADDRESS);
        I2C_ReceiveAck();
        I2C_SendByte(WordAddress);
        I2C_ReceiveAck();
        I2C_Start();
        I2C_SendByte(AT24C02_ADDRESS|0x01);
        I2C_ReceiveAck();
        Data=I2C_ReceiveByte();
        I2C_SendAck(1);
        I2C_Stop();
        return Data;
}


回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-24 05:53 , Processed in 0.068018 second(s), 52 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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