数字秒表+普中51单片机+江科大自化协

发布者:心想的45号最新更新时间:2024-08-08 来源: cnblogs关键字:数字秒表 手机看文章 扫描二维码
随时随地手机看文章

        I2C_SCL=0;                //时序要求,51单片机速度比较慢

    }

}


/**

  * @brief  I2C主机接收从机一个字节,SCL为同步信号,高电平读数据

  * @param  无

  * @retval 接收到的一个字节数据

  */

unsigned char I2C_ReceiveByte(void)

{

    unsigned char i,Byte=0x00;

    I2C_SDA=1;                //主机释放数据线SDA

    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;

}


#ifndef _i2c_h_

#define _i2c_h_


void I2C_Start(void);

void I2C_Stop(void);

void I2C_SendByte(unsigned char Byte);

unsigned char I2C_ReceiveByte(void);

void I2C_SendAck(unsigned char AckBit);

unsigned char I2C_ReceiveAck(void);

    

#endif


3.6 AT24C02控制函数


#include

#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;

}


#ifndef _at24c02_h_

#define _at24c02_h_


void AT24C02_WriteByte(unsigned char WordAddress,Data);

unsigned char AT24C02_ReadByte(unsigned char WordAddress);

    

#endif


3.7 延时函数


#include


void delayms(unsigned int xms)        //@11.0592MHz

{

    unsigned char i, j;


    while(xms--)

    {

        _nop_();

        i = 2;

        j = 199;

        do

        {

            while (--j);

        } while (--i);    

    }

}


#ifndef _delayms_h_

#define _delayms_h_


delayms(unsigned int xms);

    

#endif


[1] [2]
关键字:数字秒表 引用地址:数字秒表+普中51单片机+江科大自化协

上一篇:呼吸灯(PWM)+普中51单片机+江科大自化协
下一篇:AT24C02数据存储+普中51单片机+江科大自化协

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved