微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PCF8591 DA驱动程序

PCF8591 DA驱动程序

时间:11-24 来源:互联网 点击:

return(tdata);
}
//-------------------------------------------------------------------
// 函数名称: DAC_PCF8591
// 入口参数: slave_add从机地址,n要发送的数据个数
// 函数功能: 发送n位数据子程序
//-------------------------------------------------------------------
void DAC_PCF8591(uchar controlbyte)
{

iic_start(); // 启动I2C
delayNOP();

IICSendByte(PCF8591_WRITE); // 发送地址位
check_ACK(); // 检查应答位
if(flag == 1)
{
SystemError = 1;
return; // 若非应答,置错误标志位
}
IICSendByte(controlbyte&0x77);//Control byte
check_ACK(); //检查应答位
if(flag == 1)
{
SystemError = 1;
return; // 若非应答,置错误标志位
}
}

//-------------------------------------------------------------------
// 函数名称: ADC_PCF8591
// 入口参数: controlbyte控制字
// 函数功能: 连续读入4路通道的A/D转换结果到receivebuf
//-------------------------------------------------------------------
/*
void ADC_PCF8591(uchar controlbyte)
{
uchar idata i; //,receive_da;

iic_start();

IICSendByte(PCF8591_WRITE);//控制字
check_ACK();
if(flag == 1)
{
SystemError = 1;
return;
}

IICSendByte(controlbyte);//控制字
check_ACK();
if(flag == 1)
{
SystemError = 1;
return;
}

iic_start(); //重新发送开始命令
IICSendByte(PCF8591_READ);//控制字
check_ACK();
if(flag == 1)
{
SystemError = 1;
return;
}

IICreceiveByte(); //空读一次,调整读顺序
slave_ACK(); //收到一个字节后发送一个应答位

//while(i<4)
for(i=0;i<4;i++)
{
// receive_da=IICreceiveByte();
// receivebuf[i]=receive_da;
receivebuf[i] = IICreceiveByte();
slave_ACK(); //收到一个字节后发送一个应答位
}
slave_NOACK(); //收到最后一个字节后发送一个非应答位
iic_stop();
}*/

/*********************************************************
输出三角波
*********************************************************/
void Triangle()
{
uchar l;
for(l=0;l<255;l++)
{
IICSendByte(l); //data byte
check_ACK(); //检查应答位
if(flag == 1)
{
SystemError = 1;
return; //置错误标志位SystemError
}
}

for(l=255;l>1;l--)
{
IICSendByte(l); //data byte
check_ACK(); //检查应答位
if(flag == 1)
{
SystemError = 1;
return; //置错误标志位SystemError
}
}
}

/*********************************************************
输出方波函数
*********************************************************/
void Square()
{
IICSendByte(N); //data byte
check_ACK(); //检查应答位
if(flag == 1)
{
SystemError = 1;
return; //置错误标志位SystemError
}
delay(15);
N=~N;
}

/*********************************************************
输出正弦波函数
*********************************************************/
void sin()
{
uint i;
for(i=0; i<256; i++)
{
IICSendByte(sin_tab[i]); //data byte
check_ACK(); //检查应答位
if(flag == 1)
{
SystemError = 1;
return; //置错误标志位SystemError
}
}

}

/*********************************************************
输出锯齿波函数
*********************************************************/
void Sawtooth()
{
uchar l;
for(l=0;l<255;l++)
{
IICSendByte(l); //data byte
check_ACK(); //检查应答位
if(flag == 1)
{
SystemError = 1;
return; //置错误标志位SystemError
}
}
}

/*********************************************************
功能健函数
*********************************************************/
void keyscan()
{
uchar m;
if((K2==0)&(!START)) //启动输出后,屏蔽K2健
{
k_count++;
beep();
switch (k_count)
{
case 1:
lcd_pos(0x00);
for(m=0;m<16;m++)
lcd_wdat(dis2[m]);

lcd_pos(0x40);
for(m=0;m<16;m++)
lcd_wdat(dis5[m]);
out1=1;
out4=0;
break;

case 2:
lcd_pos(0x40);
for(m=0;m<16;m++)
lcd_wdat(dis6[m]);
out1=0;
out2=1;
break;

case 3:
lcd_pos(0x40);
for(m=0;m<16;m++)
lcd_wdat(dis7[m]);
out2=0;
out3=1;

break;

case 4:
lcd_pos(0x40);
for(m=0;m<16;m++)
lcd_wdat(dis8[m]);
k_count=0;
out3=0;
out4=1;
break;

default:
out4=0; out3=0; out2=0; out1=0;
break;
}
}

if(K3==0) //启动输出
{
START=1;
beep();
}

if(K4==0) //停止输出
{
START=0;
beep();
}
}

/*******************************************************************/
/* */
/* 主函数 */
/* */
/*******************************************************************/
main()
{
uchar i;
delay(10); //延时
lcd_init(); //初始化LCD

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top