找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 598|回复: 0
打印 上一主题 下一主题
收起左侧

GD60933数字红外温度仪程序

[复制链接]
跳转到指定楼层
楼主
ID:830387 发表于 2024-8-29 08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD60933数字红外温度仪使用说明,这是谷德科技出品的器件以下是驱动代码,供参考。

#define speedcommu                        300

uint16_t m,Command[4],tempReadv[4] ;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void I2cA_start()
{
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_SET);
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_SET);
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_RESET);
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_RESET);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void I2cA_stop()
{
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_RESET);
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_SET);   
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_SET);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void I2cA_sendAck(uint8_t ack)
{
    if(ack==0)
    {
        for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_RESET);
    }
    else
    {
        for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_SET);
    }
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_SET);
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_RESET);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
uint8_t I2cA_getAck(void)
{
  uint8_t ack;     
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_SET);
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_SET);
    if(HAL_GPIO_ReadPin(A_SDA_GPIO_Port,A_SDA_Pin)==GPIO_PIN_SET)ack=1;else ack=0;
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_RESET);
  return ack;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
uint8_t I2cA_read()
{
  uint8_t i,dat=0;
    for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_SET);
  for(i=0;i<8;i++)
    {
        for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_SET);
        dat<<=1;
        if(HAL_GPIO_ReadPin(A_SDA_GPIO_Port,A_SDA_Pin)==GPIO_PIN_SET)dat|=0x01;else dat&=0xFE;
        for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_RESET);
    }
    return dat;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void I2cA_write(uint8_t dat)
{
  uint8_t i;
  for(i=0;i<8;i++)
  {
        if((dat&0x80)==0x80)
        {
            for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_SET);
        }
        else
        {
            for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SDA_GPIO_Port,A_SDA_Pin,GPIO_PIN_RESET);
        }
        dat<<=1;
        for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_SET);        
        for(m=0;m<speedcommu;m++)HAL_GPIO_WritePin(A_SCL_GPIO_Port,A_SCL_Pin,GPIO_PIN_RESET);
  }
  I2cA_getAck();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
uint16_t I2cA_fromDevice(uint8_t deviceAdd,uint8_t datAdd)
{
    uint8_t dat;uint16_t temp;
    I2cA_start();
    I2cA_write(deviceAdd);
    I2cA_write(datAdd);
    I2cA_start();
    I2cA_write(deviceAdd+1);
    dat=I2cA_read();
    I2cA_sendAck(0);//1
    temp=I2cA_read();
    I2cA_sendAck(1);//0
    temp<<=8;
    temp+=dat;
    I2cA_stop();
    return temp;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
uint16_t CollectionTempA(void)
{
    if(Command[0]==0x55AA)tempReadv[0]=I2cA_fromDevice(0x30,0x1C);        //Read temperature
    Command[0]=I2cA_fromDevice(0x30,0x1F);//0x1F);                //0x55AA
    return tempReadv[0];
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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