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

📄 main.c

📁 基于TLC5617的DA转换proc
💻 C
字号:
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <./Atmel/at89x52.h>
#include "source.h"
unsigned int Mv_To_Dat(unsigned int mv){
	#define Vref_2times   5 
	unsigned int dat;
	dat=mv*(1024/5);
	dat &=0x3ff;//10 bits is vaild.
	return dat;
}
void Spi_Write(unsigned int dat){
	unsigned char i;
	TLC_NCS=0;
	TLC_CLK_SET;
	for(i=0;i<16;i++){
		TLC_DIN=((dat&0x8000)>0)?1:0;
		TLC_CLK_PULSE;
		dat<<=1;
	}
	TLC_CLK_SET;
	TLC_NCS=1;
}
#define SLOW_MODE         0X4000
#define FAST_MODE         0X0000
#define NORMAL_POWER_MODE 0X0000
#define SAVE_POWER_MODE   0X2000
void WriteA_RefreshB( unsigned int mv){/*通道A和B的模拟电压同时更新*/
	unsigned int dat;
	dat=Mv_To_Dat(mv);
	dat <<=2;
	dat |=FAST_MODE|NORMAL_POWER_MODE|0x8000;
	Spi_Write(dat);

}
void WriteB_DoubleBuf( unsigned int mv){/*写通道B和双缓冲寄存器*/
	unsigned int dat;
	dat=Mv_To_Dat(mv);
	dat <<=2;
	dat |=FAST_MODE|NORMAL_POWER_MODE|0x0000;
	Spi_Write(dat);	
}
void Write_DoubleBuf( unsigned int mv){/*仅写双缓冲寄存器*/
	unsigned int dat;
	dat=Mv_To_Dat(mv);
	dat <<=2;
	dat |=FAST_MODE|NORMAL_POWER_MODE|0x0001;
	Spi_Write(dat);
}
void Refresh_Two_Volt(unsigned int chla_mv,unsigned int chlb_mv){/*同时更新通道A和通道B的模拟电压值*/
	Write_DoubleBuf(chlb_mv);/*先写双缓冲寄存器的值,其对应的是通道B的电压*/
	WriteA_RefreshB(chla_mv);/*写通道A的电压,同时把双缓冲的电压值更新到B通道*/
													 /*这就达到了同时更新两路电压的目的*/
}
void Refresh_ChlA_Volt(unsigned int mv){/*只更新A的模拟电压*/
		WriteA_RefreshB(mv);/*因为双缓冲寄存器的值没有改*/
		                    /*所以这是只更新通道A的模拟电压*/
}
void Refresh_ChlB_Volt(unsigned int mv){/*只更新B的模拟电压*/
		WriteB_DoubleBuf(mv);/*此命令更新通道B的模拟电压值*/
		                     /*同时写双缓冲的值,这样就可以在更新其他通道时使用双缓冲寄存器中的值了,不会改变通道B的电压了*/
}
main()
{
	unsigned int  chl_bmv,chl_amv;
	unsigned int  i;
	IE=0X40;
	EA=1;       /* Enable interrupts */
	chl_bmv=1000;/*1伏电压*/
	chl_amv=2000;/*2伏电压*/
	i++;
	if(i==10000){
		chl_amv=1000;//1V
		Refresh_ChlA_Volt(chl_amv);
	}
	else if(i==20000){
			chl_bmv=2000;//2v
			Refresh_ChlB_Volt(chl_bmv);
	}
	else if(i==30000){
		i=0;
		chl_bmv=3000;//3v
		Refresh_Two_Volt(chl_amv,chl_bmv);
	}
}

⌨️ 快捷键说明

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