AVR没有D/A,但可以用PWM来代替D/A,其实也可以用数字电位器来代替D/A输出,X9312是一个100点变化的数字电位器,完全可以作为D/A输出 
 
/*-----------------------------------D/A部分 ---------------------------------*/   
 
 
 
/*-----------------------------------------------------------*/ 
 
/* X9312滑动端上调函数(入口参数:UP=向上调整的步数,x选择芯片) */              
 
/*-----------------------------------------------------------*/ 
 
void X9312_UP(unsigned char x,unsigned char step) 
 
{ unsigned char i; 
 
   if(x=='A') IC3A_ON;            //IC3A使能 
 
   if(x=='B') IC3B_ON;            //IC3B使能 
 
   delay_us(1); 
 
   IC3X_DIRUP;                    //IC3x方向向上 
 
   delay_us(1); 
 
   for(i=step;i>0;i--) 
 
    {IC3X_H;                      //IC3x高电平 
 
     delay_us(1); 
 
     IC3X_L;                      //INC从高电平跳变到低电平,实现一次上调 
 
     delay_us(1); 
 
        } 
 
   if(x=='A') IC3A_OFF;           //IC3A关闭 
 
   if(x=='B') IC3B_OFF;           //IC3B关闭 
 
   delay_us(1); 
 
   IC3X_H; 
 
   delay_us(1); 
 
   if(x=='A') IC3A_OFF;           //IC3A关闭 
 
   if(x=='B') IC3B_OFF;           //IC3B关闭 
 
   delay_ms(10);                  //数字电位器操作结束必须延时10ms后采样结果才能正确 
 
}  
 
/*------------------------------------------------------------*/ 
 
/* X9312滑动端下调函数(入口参数 OWN=向下调整的步数,x选择芯片)*/              
 
/*------------------------------------------------------------*/ 
 
void X9312_DOWN(unsigned char x,unsigned char step) 
 
{ unsigned char i; 
 
   if(x=='A') IC3A_ON;            //IC3A使能 
 
   if(x=='B') IC3B_ON;            //IC3B使能 
 
   delay_us(1); 
 
   IC3X_DIRDN;                    //IC3x方向向上 
 
   delay_us(1); 
 
   for(i=step;i>0;i--) 
 
    {IC3X_H;                      //IC3x高电平 
 
     delay_us(1); 
 
     IC3X_L;                      //INC从高电平跳变到低电平,实现一次上调 
 
     delay_us(1); 
 
        } 
 
   if(x=='A') IC3A_OFF;           //IC3A关闭 
 
   if(x=='B') IC3B_OFF;           //IC3B关闭 
 
   delay_us(1); 
 
   IC3X_H; 
 
   delay_us(1); 
 
   if(x=='A') IC3A_OFF;           //IC3A关闭 
 
   if(x=='B') IC3B_OFF;           //IC3B关闭 
 
   delay_ms(10);                  //数字电位器操作结束必须延时10ms后采样结果才能正确 
 
} 
 
/*---------------------------------------------------------*/ 
 
/*                X9312_A存储滑动端位置函数                  */              
 
/*---------------------------------------------------------*/ 
 
void X9312_SAVE()    
 
  {CLI(); 
 
   IC3X_H;             //IC3x高电平 
 
   delay_us(100); 
 
   IC3A_ON;            //IC3A使能 
 
   delay_us(100); 
 
   IC3A_OFF;           //CS从低到高的跳变,实现存储功能. 
 
   delay_ms(500); 
 
   SEI();   
 
  } 
 |