当前位置:首页 > MCU > CT107D > 正文内容

CT107D DAC 电压模拟输出

chanra1n4年前 (2020-10-16)CT107D3469
/*
  程序说明: IIC总线驱动程序
  软件环境: Keil uVision 4.10 
  硬件环境: CT107单片机综合实训平台 8051,12MHz
  日    期: 2011-8-9
*/

#include "reg52.h"
#include "intrins.h"

#define DELAY_TIME 5

#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1

//总线引脚定义
sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */

void IIC_Delay(unsigned char i)
{
    do{_nop_();}
    while(i--);        
}
//总线启动条件
void IIC_Start(void)
{
    SDA = 1;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 0;
    IIC_Delay(DELAY_TIME);
    SCL = 0;	
}

//总线停止条件
void IIC_Stop(void)
{
    SDA = 0;
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//发送应答
void IIC_SendAck(bit ackbit)
{
    SCL = 0;
    SDA = ackbit;  					// 0:应答,1:非应答
    IIC_Delay(DELAY_TIME);
    SCL = 1;
    IIC_Delay(DELAY_TIME);
    SCL = 0; 
    SDA = 1;
    IIC_Delay(DELAY_TIME);
}

//等待应答
bit IIC_WaitAck(void)
{
    bit ackbit;
	
    SCL  = 1;
    IIC_Delay(DELAY_TIME);
    ackbit = SDA;
    SCL = 0;
    IIC_Delay(DELAY_TIME);
    return ackbit;
}

//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
    unsigned char i;

    for(i=0; i<8; i++)
    {
        SCL  = 0;
        IIC_Delay(DELAY_TIME);
        if(byt & 0x80) SDA  = 1;
        else SDA  = 0;
        IIC_Delay(DELAY_TIME);
        SCL = 1;
        byt <<= 1;
        IIC_Delay(DELAY_TIME);
    }
    SCL  = 0;  
}

//从I2C总线上接收数据
unsigned char IIC_RecByte(void)
{
    unsigned char i, da;
    for(i=0; i<8; i++)
    {   
    	SCL = 1;
	IIC_Delay(DELAY_TIME);
	da <<= 1;
	if(SDA) da |= 1;
	SCL = 0;
	IIC_Delay(DELAY_TIME);
    }
    return da;    
}
void adc_set(unsigned char dat)
{
	IIC_Start(); 
	IIC_SendByte(0x90); // 地址+写
	IIC_WaitAck();
	IIC_SendByte(0x40);// DAC输出模式
	IIC_WaitAck();
	
	IIC_SendByte(dat);  ;//DAC写入数据
	IIC_WaitAck();
	IIC_Stop();
}


扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/153.html

分享给朋友:

“CT107D DAC 电压模拟输出” 的相关文章

CT107D-让我们先从亮第一个LED灯开始吧!

CT107D-让我们先从亮第一个LED灯开始吧!

我们从官方的SCH文件中,可以看到LED相关电路:上面还很贴心的给标注了D1~D8连接的相应MCU引脚,真是非常方便,从原理图上可以看出,假如我们想让LED(L1)亮起来,由于LED组为共阳结构,需给Q1端推送一个低电平,才能使得L1亮起来。于是我信心满满的打开keil,然后编写C程序:#inclu...

CT107D-流水灯(跑马灯的简单实现)

CT107D-流水灯(跑马灯的简单实现)

#include <reg52.h> #include <intrins.h> sbit relay=P0^4;   //继电器 sbit buzzer=P0^6;  //蜂鸣器...

CT107D-MM编程方法

CT107D-MM编程方法

#include <reg52.h> #include <absacc.h> void main() { XBYTE[0x8000]=0x00; }这是最简单的一个案例,我们使用MM编程方法需要使用的是XBYTE这个关键词,值得注意的...

CT107D DS18B20

CT107D DS18B20

先贴上核心代码unsigned char get_temp(void) { unsigned char TH,TL; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); De...

CT107D ADC 光敏电阻

CT107D ADC 光敏电阻

#include<iic.h> #include "reg52.h" #include "intrins.h" typedef unsigned char BYTE; typedef&nbs...