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

📄 main.c

📁 通过凌阳16位单片机SPCE061A实现TLV5816底层驱动和DA转换源代码
💻 C
字号:
//智能轮椅电机模拟信号输入程序,TLV5618AI驱动
//参考电压Vref=2.5V由MC1403PI提供
//输出模拟电压=2*Vref*(DigitalNum/0x1000)
#include "SPCE061A.h"
#include "IObit.h"

#define uint unsigned int
#define uchar unsigned char

#define DIN1 IOB15
#define SCLK1 IOB14
#define CS1 IOB13
#define DIN2 IOB12
#define SCLK2 IOB11
#define CS2 IOB10

void delayms(uint msNum)
{
	uint i,j;
	for (j=0;j<msNum;j++)
	{
		for (i=0;i<78;i++) //35 cycles                    
		{
			asm("nop");    //4 cycles  
		}
	*P_Watchdog_Clear=0x01;
	}
}

void DA_init(void)   //DA initial function
{
	*P_IOB_Dir=0xffff;
	*P_IOB_Attrib=0xffff;
}

void DA_AB(uint DigitalNum) //DA convert function,DigitalNum后四位为0x0000~0x0fff,D0~D15均由DIN(IOB15)传送
{
	uint n; 
	uint TopBit;
	SCLK1=1;
	CS1=0;  //starting DA convert
	for (n=0;n<=15;n++)
	{
		TopBit=DigitalNum&0x8000;
		if (TopBit==0)
			DIN1=0;
		else 
			DIN1=1;   //取DigitalNum最高位进行传输  
        SCLK1=0;                  
        SCLK1=1;
		DigitalNum<<=1;
	}
	SCLK1=1;
	CS1=1;
}	

void DA_LR(uint DigitalNum) //DA convert function,DigitalNum后四位为0x0000~0x0fff,D0~D15均由DIN(IOB15)传送
{
	uint n;
	uint TopBit;
	SCLK2=1;
	CS2=0;  //starting DA convert
	for (n=0;n<=15;n++)
	{
		TopBit=DigitalNum&0x8000;
		if (TopBit==0)
			DIN2=0;
		else 
			DIN2=1;   //取DigitalNum最高位进行传输  
        SCLK2=0;                  
        SCLK2=1;
		DigitalNum<<=1;
	}
	SCLK2=1;
	CS2=1;
}	

void motor_init(void)
{
    DA_AB(0x8000);//DAC1 A
	DA_AB(0x0000);//DAC1 B
	DA_LR(0x8000);//DAC2 A
	DA_LR(0x0000);//DAC2 B
	DA_AB(0x8800); //四路DA转换模拟输出均设置为2.5V
	DA_AB(0x0800);   
	DA_LR(0x8800);  
	DA_LR(0x0800);
	delayms(3000);

}
	
void ahead(void)
{
    DA_AB(0x8000+0x0a00);
	DA_AB(0x0000+0x0fff-0x0a00);   
	DA_LR(0x8800);  
	DA_LR(0x0800);
}

void back(void)
{
    DA_AB(0x8000+0x0fff-0x0a00);
	DA_AB(0x0000+0x0a00);   
	DA_LR(0x8800);  
	DA_LR(0x0800);
}

void stop(void)
{
    DA_AB(0x8800);
	DA_AB(0x0800);   
	DA_LR(0x8800);  
	DA_LR(0x0800);
}


void left(void)
{
    DA_AB(0x8800);
	DA_AB(0x0800);   
	DA_LR(0x8000+0x0a00);  
	DA_LR(0x0000+0x0fff-0x0a00);
}

void right(void)
{
    DA_AB(0x8800);
	DA_AB(0x0800);   
	DA_LR(0x8000+0x0fff-0x0a00);  
	DA_LR(0x0000+0x0a00);
}
	


int main()
{
	uint SPIData;
	DA_init();
	motor_init();
	ahead();
	delayms(3000);
	back();
	delayms(3000);
	left();
	delayms(3000);
	stop();
	while (1)
	{
		*P_Watchdog_Clear=0x01;
	}	
}

⌨️ 快捷键说明

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