zoukankan      html  css  js  c++  java
  • 王官夫的SCCB

    ///////////////////////////////////////////////////////////////////////////
    //功能:写OV7660寄存器
    //返回:1-成功 0-失败
    //guanfu_wang
    unsigned char wr_Sensor_Reg(unsigned char regID, unsigned char regDat)
    {
    startSCCB();//发送SCCB 总线开始传输命令
    if(0==SCCBwriteByte(0x42))//写地址
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    delay_us(100);
       if(0==SCCBwriteByte(regID))//积存器ID
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    delay_us(100);
       if(0==SCCBwriteByte(regDat))//写数据到积存器
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
       stopSCCB();//发送SCCB 总线停止传输命令

       return(1);//成功返回
    }
    ////////////////////////////
    //功能:读OV7660寄存器
    //返回:1-成功 0-失败
    //guanfu_wang
    unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat)
    {
    //通过写操作设置寄存器地址
    startSCCB();
    if(0==SCCBwriteByte(0x42))//写地址
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    delay_us(100);
       if(0==SCCBwriteByte(regID))//积存器ID
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    stopSCCB();//发送SCCB 总线停止传输命令

    delay_us(100);

    //设置寄存器地址后,才是读
    startSCCB();
    if(0==SCCBwriteByte(0x43))//读地址
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    delay_us(1000);
       *regDat=SCCBreadByte();//返回读到的值
       noAck();//发送NACK命令
       stopSCCB();//发送SCCB 总线停止传输命令
       return(1);//成功返回
    }


    /*
    -----------------------------------------------
       功能: start命令,SCCB的起始信号
       参数: 无
     返回值: 无
    -----------------------------------------------
    */
    void startSCCB(void)
    {
        SCCB_SID_H();     //数据线高电平
        delay_us(500);

        SCCB_SIC_H();    //在时钟线高的时候数据线由高至低
        delay_us(500);
     
        SCCB_SID_L();
        delay_us(500);

        SCCB_SIC_L();  //数据线恢复低电平,单操作函数必要
        delay_us(500);


    }
    /*
    -----------------------------------------------
       功能: stop命令,SCCB的停止信号
       参数: 无
     返回值: 无
    -----------------------------------------------
    */
    void stopSCCB(void)
    {
        SCCB_SID_L();
        delay_us(500);
     
        SCCB_SIC_H();
        delay_us(500);
      

        SCCB_SID_H();
        delay_us(500);
       
    }

    /*
    -----------------------------------------------
       功能: noAck,用于连续读取中的最后一个结束周期
       参数: 无
     返回值: 无
    -----------------------------------------------
    */
    void noAck(void)
    {

    SCCB_SID_H();
    delay_us(500);

    SCCB_SIC_H();
    delay_us(500);

    SCCB_SIC_L();
    delay_us(500);

    SCCB_SID_L();
    delay_us(500);

    }

    /*
    -----------------------------------------------
       功能: 写入一个字节的数据到SCCB
       参数: 写入数据
     返回值: 发送成功返回1,发送失败返回0
    -----------------------------------------------
    */
    unsigned char SCCBwriteByte(unsigned char m_data)
    {
    unsigned char j,tem;

    for(j=0;j<8;j++) //循环8次发送数据
    {
    if((m_data<<j)&0x80)
    {
    SCCB_SID_H();
    }
    else
    {
    SCCB_SID_L();
    }
    delay_us(500);
    SCCB_SIC_H();
    delay_us(500);
    SCCB_SIC_L();
    delay_us(500);

    }
    delay_us(100);
    SCCB_SID_IN;/*设置SDA为输入*/
    delay_us(500);
    SCCB_SIC_H();
    delay_us(100);
    if(SCCB_SID_STATE){tem=0;}   //SDA=1发送失败,返回0}
    else {tem=1;}   //SDA=0发送成功,返回1
    SCCB_SIC_L();
    delay_us(500);
            SCCB_SID_OUT;/*设置SDA为输出*/

    return (tem);  
    }

    /*
    -----------------------------------------------
       功能: 一个字节数据读取并且返回
       参数: 无
     返回值: 读取到的数据
    -----------------------------------------------
    */
    unsigned char SCCBreadByte(void)
    {
    unsigned char read,j;
    read=0x00;

    SCCB_SID_IN;/*设置SDA为输入*/
    delay_us(500);
    for(j=8;j>0;j--) //循环8次接收数据
    {      
    delay_us(500);
    SCCB_SIC_H();
    delay_us(500);
    read=read<<1;
    if(SCCB_SID_STATE) 
    {
    read=read+1;
    }
    SCCB_SIC_L();
    delay_us(500);
    }
            SCCB_SID_OUT;/*设置SDA为输出*/
    return(read);
    }
     
     

    //功能:读OV7660寄存器
    //返回:1-成功 0-失败
    //guanfu_wang
    unsigned char rd_Sensor_Reg(unsigned char regID, unsigned char *regDat)
    {
    //通过写操作设置寄存器地址
    startSCCB();
    if(0==SCCBwriteByte(0x42))//写地址
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    delay_us(100);
       if(0==SCCBwriteByte(regID))//积存器ID
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    stopSCCB();//发送SCCB 总线停止传输命令

    delay_us(100);

    //设置寄存器地址后,才是读
    startSCCB();
    if(0==SCCBwriteByte(0x43))//读地址
    {
    stopSCCB();//发送SCCB 总线停止传输命令
    return(0);//错误返回
    }
    delay_us(1000);
       *regDat=SCCBreadByte();//返回读到的值
       noAck();//发送NACK命令
       stopSCCB();//发送SCCB 总线停止传输命令
       return(1);//成功返回
    }

  • 相关阅读:
    MFC tab页面中获到其它页面的数据
    sqlite数据库中"Select * From XXX能查到数据,但是Select DISTINCT group From xxx Order By group却查不出来
    关闭程序出现崩溃(exe 已触发了一个断点及未加载ucrtbased.pdb)
    springboot 通用Mapper使用
    springBoot 发布war包
    springCloud Zuul网关
    springboot hystrix turbine 聚合监控
    springBoot Feign Hystrix Dashboard
    springBoot Ribbon Hystrix Dashboard
    springBoot Feign Hystrix
  • 原文地址:https://www.cnblogs.com/tao560532/p/2490591.html
Copyright © 2011-2022 走看看