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

📄 tlv5638.c

📁 51单片机及其C语言程序开发实例第9章节
💻 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 + -