求个msp430f5529的与光敏或雨水传感器传感器相关的程序啊

2019-07-15 15:36发布

rt
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
奇怪的S
2019-07-15 18:31
本帖最后由 Stark扬 于 2018-10-11 15:30 编辑

/******************************************************************************************************
文件名:iic.c
编写者:czhang
描述:iic总线的子程序。
版本:2003年10月11日   1.0

*****************************************************************************************************/
#include  <msp430f6638.h>
#include "BH1750.h"
#include "iic.h"
#include "general.h"
/***************************************************************************
初始化IIC
***************************************************************************/

void InitIIC()
{
    IIC_DIR |= IIC_SCL;  //SCL管脚为输出
    IIC_DIR &= ~IIC_SDA; //SDA管脚为输入
    C_SCL;
    Stop();
}

/***************************************************************************
进行短暂的延时,原因是MSP430的速度比较快。使用者可以根据时钟频率自行调节延时长短
***************************************************************************/
void delay()
{
    unsigned char q0;
    for(q0=0;q0<20;q0++)
    {
        _NOP();
    }
}

/***************************************************************************
启动IIC总线
***************************************************************************/
void Start()
{
    SDA_OUT;
    S_SDA;
    delay();
    S_SCL;
    delay();
    C_SDA;
    delay();
    C_SCL;
    delay();
}

/***************************************************************************
停止操作,释放IIC总线
***************************************************************************/
void Stop()
{
    SDA_OUT;
    C_SCL;
    delay();
    C_SDA;
    delay();
    S_SCL;
    delay();
    S_SDA;
    delay();
}

/***************************************************************************
IIC总线应答
***************************************************************************/
void Ack()
{
    SDA_OUT;
    C_SDA;
    delay();
    S_SCL;
    delay();
    C_SCL;
    delay();
    S_SDA;
}

/***************************************************************************
IIC总线无应答
***************************************************************************/
void NoAck()
{
    SDA_OUT;
    S_SDA;
    delay();
    S_SCL;
    delay();
    C_SCL;
    delay();
}

/***************************************************************************
IIC总线检验应答
返回值:IIC应答位的值0:应答   1:无应答
***************************************************************************/
unsigned char TestAck()
{
    unsigned char ack;

    S_SCL;
    delay();
    SDA_IN;
    delay();
    ack=READ_SDA;
    delay();
    C_SCL;
    delay();
    return(ack);
}

/***************************************************************************
IIC总线写8位数据
input:要写的8位数据
***************************************************************************/
void Write8Bit(unsigned int input)
{
    unsigned char temp,q0;
    SDA_OUT;
    for(temp=8;temp!=0;temp--)
    {
        q0=input&0x80;
        if(q0==0x80)
            S_SDA;
        else
            C_SDA;
      delay();
        S_SCL;
        delay();
        C_SCL;
        delay();
        input=input<<1;
    }
}

/***************************************************************************
IIC总线读8位数据
返回值:读出的8位数据
***************************************************************************/
unsigned char Read8Bit()
{
    unsigned char temp,q0,rbyte=0;
    SDA_IN;
    for(temp=8;temp!=0;temp--)
    {
        S_SCL;
        delay();
        rbyte=rbyte<<1;
        SDA_IN;
        q0=READ_SDA;
        if(q0==IIC_SDA)
            rbyte=rbyte|0x1;
        delay();
        C_SCL;
        delay();
    }
    return(rbyte);
}

以前用过的,感受一下~?

一周热门 更多>