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

📄 main.c

📁 TLC5620串行DAC 用51实现。调试通过
💻 C
字号:
/*
	Main.C
	TLC5620串行DAC例程:产生正弦波
*/


#include <REG51.H>


//定义I/O端口
sbit DAT  = P1^4;	//串行数据
sbit CLK  = P1^5;	//串行时钟,下降沿有效
sbit LDAC = P1^6;	//DAC更新锁存控制,下降沿有效
sbit LOAD = P1^7;	//串行数据装载,下降沿有效


/*
函数:Dac()
功能:发送数据至TLC5620串行DAC
参数:
	addr:DAC通道地址,取值0~3,对应通道A~D
	rng:附加的范围位,rng=0时,Vo不会超过Vref,rng=1时,Vo变为2倍
	dat:8位DAC数据
公式:
	rng=0时,Vo=Vref*(dat/256)
	rng=1时,Vo=Vref*(dat/256)*2
*/
void Dac(unsigned char addr, bit rng, unsigned char dat)
{
	unsigned char n;
//发送通道地址
	n = 2;
	do
	{
		DAT = (bit)(addr & 0x02);
		addr <<= 1;
		CLK = 0;
		CLK = 1;
	} while ( --n != 0 );
//发送RNG位
	DAT = rng;
	CLK = 0;
	CLK = 1;
//发送8位DAC数据
	n = 8;
	do
	{
		DAT = (bit)(dat & 0x80);
		dat <<= 1;
		CLK = 0;
		CLK = 1;
	} while ( --n != 0 );
//装载数据
	LOAD = 0;
	LOAD = 1;
//数据锁存到DAC转换器
	LDAC = 0;
	LDAC = 1;
}


/*
函数:Delay()
功能:延时1ms~256ms
参数:
	t>0时,延时(t)ms
	t=0时,延时256ms
*/
void Delay(unsigned char t)
{
	do
	{
		TH0 = 0xFC;
		TL0 = 0x66;
		TR0 = 1;
		while ( !TF0 );
		TR0 = 0;
		TF0 = 0;
	} while ( --t != 0 );
}


/*
函数:SinWave()
功能:利用TLC5620串行DAC在通道B产生正弦波
说明:请用示波器观察SmartSOPC实验箱D5区的DACB通道
*/
void SinWave()
{
	code unsigned char SinTab[] =
	{
	        128,147,167,185,202,218,231,241,249,253,
	        255,253,249,241,231,218,202,185,167,147,
	        127,108,88,70,53,37,24,14,6,2,
	        0,2,6,14,24,37,53,70,88,108
	};
	unsigned char n;
	for (;;)
	{
		for ( n=0; n<40; n++ )
		{
			Dac(1,0,SinTab[n]);
			Delay(5);
		}
	}
}


void main()
{
	TMOD &= 0xF0;
	TMOD |= 0x01;
	DAT = 1;
	CLK = 1;
	LDAC = 1;
	LOAD = 1;
	SinWave();
	for (;;);
}

⌨️ 快捷键说明

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