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

📄 wavegen.c

📁 12 bits DAC TLV5618 program
💻 C
字号:
/***************************PROGRAM FUNCTION*******************************/
//        TLV5618产生从0-5V变化的电压(锯齿波),DA数据每次变化1位,即电压增量=1.22mV  //
//        数码管显示预期电压值															//
//        预期电压值和万用表测得的电压值有出入									   //
//        待改进:小数显示时的四舍五入问题,尝试其它小数显示的算法			   //
//        模式设置:R1=1,SPD=1,PWR=0,R0=0--使用OUTPUT A进行输出             // 
#include<reg52.h>	  
#define uCHAR unsigned char 
#define uint unsigned int	 
sbit DACS1 = P2^5;     //5618/5617 CHIP SELECT
sbit DASDA = P1^1;
sbit DASCL = P1^0;
sbit seg_latch=P2^6;
sbit bit_latch=P2^7;

uCHAR code table[]={0x3f,0x03,0x6D,0x67,
      0x53,0x76,0x7E,0x23, 
      0x7F,0x77,0x7B,0x5E,	 
      0x3C,0x4F,0x7C,0x78};//my code
void SendDA(uCHAR data0,uCHAR data1,bit data2); //发送待进行DA转换的数据
void delay(uint z);
void SendDA(uCHAR data0,uCHAR data1,bit data2)	//bit变量只取0或1
{
	unsigned char i;    
	DASDA=1;
	DASCL=1; 
	DACS1 = 0; 
	if(data2) 
	{
		data0|=0x40;	//SPD=1:fast mode
	}//data2决定工作模式
	else 
	{
		data0|=0xc0;	 //R1=1,SPD=1
	}
	//data0中高四位为模式设置位,低四位为数据位
	for (i=0;i<8;i++)
	{         
		DASDA=(bit)(data0&0x80);//给一位数据
		DASCL=1; 
		DASCL=0;  //给一个脉冲
		data0<<=1;//移到下一位
	}
	//data1为12位数据的低8位
	for (i=0;i<8;i++)
	{           
		DASDA=(bit)(data1&0x80);
		DASCL=1;
	   DASCL=0; 
		data1<<=1;
	}
	DASDA= 1;   //为下次作准备	   
	DACS1= 1;   //为下次作准备
}
void DA(uint outputa)
{
	SendDA(outputa/256,outputa%256,0);//输出a
	//sendda(outputb/256,outputb%256,1);//输出b
}
void display(unsigned int num)			//显示程序	 1024->1.25V
{  
   float temp; 
	uCHAR qianwei,baiwei,shiwei,gewei;
	temp=(5.0/4096)*1000;//放大1000倍,基本量1.22mV
	temp*=num;
	num=(uint)(temp); //强制类型转换
   
	qianwei=num/1000;
	baiwei=num%1000/100;
   shiwei=num%100/10;
   gewei=num%10;		
   
   P0=table[qianwei]|0x80;	 //添加小数点
   seg_latch=1;
   seg_latch=0;
	P0=0xfe;	 //led1有效,显示千位
   bit_latch=1;
   bit_latch=0;
   delay(5);

   P0=table[baiwei];
   seg_latch=1;
   seg_latch=0;
   P0=0xfd;	 //led2有效,显示百位
   bit_latch=1;
   bit_latch=0;
   delay(5);

   P0=table[shiwei];
   seg_latch=1;
   seg_latch=0;
   P0=0xfb;	//led3有效,显示十位
   bit_latch=1;
   bit_latch=0;
   delay(5);

   P0=table[gewei];		
   seg_latch=1;
   seg_latch=0;
   P0=0xf7;	//led4有效,显示个位
   bit_latch=1;
   bit_latch=0;
   delay(5);
}

void delay(uint z)
{
	uint x,y;
	for(x=z;x>0;x--)
	   for(y=113;y>0;y--);
}
void main()
{
	while(1)
	{
		unsigned int i;
		uCHAR k;
		for(i=0;i<4096;i++)
		{
			DA(i);//12位的,范围0-4096
			for(k=0;k<20;k++)
			{
				display(i);  //显示预期电压值
			}
		}
		//delay(10);  //这儿不用延时,不然会造成显示闪烁
	}
}

⌨️ 快捷键说明

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