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

📄 tlc1549.c

📁 采用1*4,4*4键盘同时控制,带有8位数码显示的数控直流电源驱动及应用程序(Keil c51)
💻 C
字号:
//ADC
//--------------------------------------------------------------------------------------------------
//tlc1549控制引脚宏定义
//--------------------------------------------------------------------------------------------------
sbit AD_CS1 = P1^2;  //CS3电压反馈           // 将p1.2口模拟片选
sbit AD_CS2 = P1^3;  //CS4电流反馈		     // 将p1.2口模拟片选
sbit AD_CLK = P1^7;                          // 将p1.7口模拟时钟输出
sbit AD_DOUT = P1^5;                         // 将p1.6口模拟主机输出

//---------------------------------------------------------------------------------
//读取电压反馈AD转换值
//---------------------------------------------------------------------------------

unsigned int Read1549_U(void)
{
	unsigned char n;
	unsigned int AD_Val=0;
	AD_CS1 = 1;
	AD_CS2 = 1;
	Delay(1);

	AD_CLK = 0;
	AD_DOUT = 1;
	Delay(1);

	AD_CS1 = 0;	
	Delay(1);

	for( n = 0; n < 10; n++ )
	{
		AD_CLK = 0;
		AD_CLK = 1;        
		_nop_();
	}
  
    AD_CLK = 0;
 	Delay(2);

	AD_CS1 = 1;
	AD_DOUT = 1;
	Delay(2);

	AD_CLK = 0;
	AD_CS1 = 0;
	Delay(1);

	for( n = 0; n < 10; n++ )
	{

		if(AD_DOUT == 1)  
		{
			 AD_Val = AD_Val | 0x0001; 
		}                  //===从高位开始接收===//
		else if(AD_DOUT == 0)              
		{
			 AD_Val = AD_Val & 0xFFFE; 
		}
		if(n != 9)  
		{
			AD_Val = AD_Val << 1;
		}                  //===接收的数据左移一位===//

		AD_CLK = 1; 
		AD_CLK = 0;
		
	}
	AD_CLK = 0;
	AD_CS1 = 1;

	return AD_Val;    //===返回值===//
}
//---------------------------------------------------------------------
//读取电流反馈AD转换值
//----------------------------------------------------------------------
unsigned int Read1549_I(void)
{
	unsigned char n;
	unsigned int AD_Val=0;

	AD_CLK = 0;

	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	AD_CS2 = 1;
	AD_DOUT = 1;

	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	AD_CS2 = 0;
	Delay(3);
	
	for( n = 0; n < 10; n++ )
	{
		AD_CLK = 0; 
		AD_CLK = 1;        //===时钟置高===//

		if(AD_DOUT == 1)  
		{
			 AD_Val = AD_Val | 0x0001; 
		}                  //===从高位开始接收===//
		else               
		{
			 AD_Val = AD_Val & 0xFFFE; 
		}
		if(n < 9)  
		{
			AD_Val = AD_Val << 1;
		}                  //===接收的数据左移一位===//
		
		AD_CLK = 0;
	}

	AD_CLK = 0; 
	AD_CS2 = 0;
	AD_CS2 = 1;
	Delay(10);
	return AD_Val;    //===返回值===//
}

⌨️ 快捷键说明

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