PCF8591 DA驱动程序
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
PCF8591DA驱 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)