PCF8591

PCF8591 dac

void dac_pcf8591(unsigned char dat)
{
    IIC_Start();
    IIC_SendByte(0x90);
    IIC_WaitAck();
    IIC_SendByte(0x40);  //DAC输出模式
    IIC_WaitAck();
    
    IIC_SendByte(dat);
    IIC_WaitAck();
    IIC_Stop();
}

adc

unsigned char pcf8591_adc(){

    unsigned char dat;
    
    I2CStart();
    I2CSendByte(0x90);
    I2CWaitAck();
    I2CSendByte(0x03);
    I2CWaitAck();
    
    I2CStart();
    I2CSendByte(0x91);
    I2CWaitAck();
  
    I2CReceiveByte();
    I2CSendAck(0);
    dat = I2CReceiveByte();
    I2CSendAck(1);
    
    I2CStop();
    
    return dat;
  
}

主函数

            adc_value =  (float)adread() /255.0f * 500.0f;//3为RB2  1为光敏电阻
            
            Delay10ms();
            pcf_8591[1] = t_display[volt / 100 + 32];
            pcf_8591[2] = t_display[volt / 10 % 10];
            pcf_8591[3] = t_display[volt % 10];

终极版

/* ------------------pcf8591----------------- */
uint8_t control_byte = 0x04;
uint8_t dac_level = 0; //当前dac输出的等级,输出前先修改这个值再调用输出函数
uint8_t adc_level[4] = { 0 };

void dac_out(void)
{
    control_byte |= 0x40; //开启dac输出
    
    I2CStart();
    I2CSendByte(0x90);
    I2CWaitAck();
    I2CSendByte(control_byte);
    I2CWaitAck();
    I2CSendByte(dac_level);
    I2CWaitAck();
    I2CStop();
}

void dac_stop(void)
{
    control_byte &= ~0x40; //关闭dac输出
    
    I2CStart();
    I2CSendByte(0x90);
    I2CWaitAck();
    I2CSendByte(control_byte);
    I2CWaitAck();
    I2CStop();
}

void adc_read(void)
{
    I2CStart();
    I2CSendByte(0x90);
    I2CWaitAck();
    I2CSendByte(control_byte);
    I2CWaitAck();
    
    I2CStart();
    I2CSendByte(0x91);
    I2CWaitAck();
    
    I2CReceiveByte(); //第一次读取的数据不要使用
    I2CSendAck(0); //发送应答
    adc_level[0] = I2CReceiveByte();
    I2CSendAck(0); //发送应答
    adc_level[1] = I2CReceiveByte();
    I2CSendAck(0); //发送应答
    adc_level[2] = I2CReceiveByte();
    I2CSendAck(0); //发送应答
    adc_level[3] = I2CReceiveByte();
    I2CSendAck(1); //发送非应答
    I2CStop();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值