⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlv5618.c

📁 TI公司的TLV5618 驱动程序。本代码在KEILC中编译通过
💻 C
字号:
	   //===================================================================== 
//                    TLV5618 DA转换驱动程序 
//硬件连接: DIN --P0^0;    
//          SCLK --P0^1;     
//          CS   --P0^2;        
//          VDD --逻辑电源(+5V) 
//          AGND --GND(0V)  
//writer:谷雨 2008年8月4日于EDA实验室 
//说明   参考电压为0-3.5V,本程序为2.5V 
//       输出模拟电压为:V=2*Vref*(dignum/0x1000) 注:dignum后四位为:0x0000~~0x0fff 
//注意: 所需输入的数字信号值为16位数,其中D15~~D12为特殊位设置,D11~~D0为数据位000~~fff 
//版本号:V1.0 
//===================================================================== 
#include <reg51.h>      //STC单片机头文件  
#include <intrins.h> 
#define uint unsigned int 
#define uchar unsigned char 
#define Channal_A     1    //通道A 
#define Channal_B     2    //通道B 
#define Channal_AB    3    //通道A&B 
//**************************一下为函数声明修************************************** 
static void DA_conver(uint Dignum); 
extern void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model); 
//**************************修改硬件时要修改的部分******************************** 
sbit DIN   = P3^3;     //数据输入端 
sbit SCLK = P3^4;     //时钟信号 
sbit CS    = P3^5;     //片选输入端,低电平有效 
//=================================================================  
// 函数名称 :void DA_conver(uint Dignum) 
// 函数功能 :进行DA转换  
// 入口参数 :Dignum:根据说明设置转化数据.头四位为特殊位用于选择转化方式, 
//            以及用于通道选择.请自行设置.后12位为需要转换的值 
// 出口参数 :无 
//================================================================= 
void DA_conver(uint Dignum) 
{ 
uint Dig=0; 
uchar i=0; 
SCLK=1; 
CS=0;           //片选有效 
for(i=0;i<16;i++)   //写入16为Bit的控制位和数据 
{ 
   Dig=Dignum&0x8000; 
   if(Dig)  
   { 
    DIN=1; 
   } 
   else 
   { 
    DIN=0; 
   } 
   SCLK=0; 
   _nop_(); 
   Dignum<<=1; 

   SCLK=1; 
   _nop_(); 
} 
SCLK=1; 
CS=1;       //片选无效 
} 
//=================================================================  
// 函数名称 :void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model) 
// 函数功能 :模式、通道选择并进行DA转换  
// 入口参数 :Data_A:A通道转换的电压值 
//            Data_B:B通道转换的电压值 
//            Channal:通道选择,其值为Channal_A,Channal_B,或Channal_AB 
//            Model:速度控制位 0:slow mode 1:fast mode 
// 出口参数 :无 
// 说明:     Data_A,Data_B的范围为:0-0x0fff 
//            本程序如果只需要一个通道时,另外一个通道的值可任意,但是不能缺省 
//================================================================= 
void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model) 
{ 
uint Temp; 
if(Model)  
{ 
   Temp=0x4000; 
} 
else  
    { 
   Temp=0x0000; 
} 
switch(Channal) 
{ 
    case Channal_A:         //A通道 
         DA_conver(Temp|0x8000|(0x0fff&Data_A)); 
      break;  
    case Channal_B:       //B通道 
         DA_conver(Temp|0x0000|(0x0fff&Data_B)); 
    break;  
    case Channal_AB: 
         DA_conver(Temp|0x1000|(0x0fff&Data_B));        //A&B通道 
         DA_conver(Temp|0x8000|(0x0fff&Data_A)); 
    break; 
    default: 
         break; 
} 
} 
//=================================================================  
// 函数名称 :int main(void) 
// 函数功能 :主函数,无实际意义,仅测试TLV5618用  
// 入口参数 :无 1-A;2-B;3-A&B 
// 出口参数 :无 
//================================================================= 
int main(void) 
{   while(1)
    {
      Write_A_B(0x0ccc,0x0000,Channal_A,0);   //测量A通道 
      //Write_A_B(0x0000,0x0600,Channal_B,1);   //测量B通道 
      // Write_A_B(0x0504,0x0a47,Channal_AB,1);   //测量AB通道,测量时需屏蔽上面两句 
  }
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -