📄 tlv5638.c
字号:
#include <reg51.h>
#include "TLV5638.h"
//短延时函数:ShortDelay()
void nNop(uchar i)
{
for(;i>0;i--) ;
}
//长延时函数:LongDelay()
void LongDelay(uint i)
{
uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);}
}
//向SPI写16bits数据函数:SPIWrite()
void SPIWrite(int temp)
{
uint i;
SetCS(0);
for(i=0;i<16;i++)
{
PinDIN = (bit) (temp & 0x8000);
SetSCLK(1);
temp <<= 1;
nNop(1);
SetSCLK(0);
nNop(1);
}
SetCS(1);
}
//将电压值转换为对应的12bits数字量函数:VoltToData()
int VoltToData(uint ref, float ex_ref, float out_volt)
{
int temp;
switch(ref)
{
case EXTERNAL : temp = (int)((out_volt*4096) / (2*ex_ref));break;
case IN_1024 : temp = (int)((out_volt*4096) / (2*1.024)); break;
case IN_2048 : temp = (int)((out_volt*4096) / (2*2.048)); break;
default : break;
}
return(temp & 0xfff);
}
//设置DAC A(即A 通道)输出函数:SetDAC_A()
void SetDAC_A(uint speed, uint ref, float ex_ref, float temp)
{
int ModCMD;
int Data;
ModCMD = 0x9000 | (speed<<14) | (ref);
Data = VoltToData(ref,ex_ref,temp);
Data = Data | 0x8000 | (speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//设置DAC B(即B 通道)输出函数:SetDAC_B()
void SetDAC_B(uint speed, uint ref, float ex_ref, float temp)
{
int ModCMD;
int Data;
ModCMD = 0x9000 | (speed<<14) | (ref);
Data = VoltToData(ref,ex_ref,temp);
Data = Data | 0x0000 | (speed<<14);
SPIWrite(ModCMD);
nNop(10);
SPIWrite(Data);
}
//设置DAC A与DAC B同时输出函数:SetDAC_AB()
void SetDAC_AB(uint speed, uint ref, float ex_ref, float temp1, float temp2)
{
int ModCMD;
int DataA,DataB;
ModCMD = 0x9000 | (speed<<14) | (ref);
DataA = VoltToData(ref,ex_ref,temp1);
DataA = DataA | 0x8000 | (speed<<14);
DataB = VoltToData(ref,ex_ref,temp2);
DataB = DataB | 0x1000 | (speed<<14);
SPIWrite(ModCMD);
SPIWrite(DataB);
SPIWrite(DataA);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -