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

📄 tlv5618.c

📁 12位da转换程序
💻 C
字号:
#include <at89x51.h>
 
#define uchar unsigned char
#define uint  unsigned int
#define ulint  unsigned long int

sbit DIN=P3^4;//串行输入
sbit CLK=P3^3;//工作时钟
sbit CS=P3^2;//片选信号	低电平有效	

sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;

unsigned char code table_duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,
								0x88,0x83,0xc6,0xa1,0x86,0x8e,
								0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
								0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18,
								};

unsigned char code table_wei[]={0x1f,0x9f,0x5f,0xdf,
								0x4f,0xcf,0x2f,0xaf,0x6f
								};
uchar x1,x2,x3,x4;
uchar y1,y2,y3,y4,y5;
uint xianshi_MV;
ulint xianshi_MA;

void delay(unsigned int z)
{
	uchar i,j;
	for(i=0;i<z;i++)
		for(j=0;j<110;j++);
}

void display(void)
{
	P2=table_wei[0];
	P0=table_duan[x1+0x20]; 
	delay(1);
	P0=table_duan[0x10];
		
	P2=table_wei[1];
	P0=table_duan[x2]; 
	delay(1);
	P0=table_duan[0x10];
	
	P2=table_wei[2];
	P0=table_duan[x3]; 
	delay(1);
	P0=table_duan[0x10];
	
	P2=table_wei[3];
	P0=table_duan[x4]; 
	delay(1);
	P0=table_duan[0x10];

	P2=table_wei[4];
	P0=table_duan[y1]; 
	delay(1);
	P0=table_duan[0x10];

	P2=table_wei[5];
	P0=table_duan[y2+0x20]; 
	delay(1);
	P0=table_duan[0x10];

	P2=table_wei[6];
	P0=table_duan[y3]; 
	delay(1);
	P0=table_duan[0x10];

	P2=table_wei[7];
	P0=table_duan[y4]; 
	delay(1);
	P0=table_duan[0x10];

	P2=table_wei[8];
	P0=table_duan[y5]; 
	delay(1);
	P0=table_duan[0x10];

	P2=0xef;
	P0=table_duan[0x11]; 
	delay(1);
	P0=table_duan[0x10];

	P2=0x8f;
	P0=table_duan[0x0a]; 
	delay(1);
	P0=table_duan[0x10];
}		

void DA_init(uint data1)//data1 待转换的数据
{
	uchar i;
	CS=1;
	DIN=0;
	CLK=0;
	CS=0;
	for(i=0;i<16;i++)
	{
        if((data1&0x8000)!=0) //0x0400==0001,0000,0000,0000 B
        	DIN=1;//数据输出
    	else
        	DIN=0;//数据输出
    	CLK=1;   //发生时钟
     	CLK=0;   //发生时钟
      	data1<<=1;//逻辑左移
    }
	CLK=1;   //发生时钟
    CLK=0;   //发生时钟
	CS=1;
	DIN=0;
	CLK=0;
}

void shuju_fenli(void)
{
	x1=xianshi_MV/1000;
	x2=(xianshi_MV%1000)/100;
	x3=(xianshi_MV%100)/10;
	x4=xianshi_MV%10;

	y1=xianshi_MA/10000;
	y2=(xianshi_MA%10000)/1000;
	y3=(xianshi_MA%1000)/100;
	y4=(xianshi_MA%100)/10;
	y5=xianshi_MA%10;
}
char code dx516[3] _at_ 0x003b;
void main()
{
	uint a=0xc800,b=0x4800,c;
	float d,shang;
	
	while(1)
	{	
		P2=0x4f;
		if(key1==0)
		{
			delay(20);
			if(key1==0)
			{
				a=a+0x0333;
				if(a>0xcfff)
				{
					a=a-0x0fff;
				}
				while(key1==0)
				{;}
			}
		}
		if(key2==0)
		{
			delay(20);
			if(key2==0)
			{
				a=a+0x0052;
				if(a>0xcfff)
				{
					a=a-0x0fff;
				}
				while(key2==0)
				{;}
			}
		}
		if(key3==0)
		{
			delay(20);
			if(key3==0)
			{
				a=a+0x0008;
				if(a>0xcfff)
				{
					a=a-0x0fff;
				}
				while(key3==0)
				{;}
			}
		}

		if(key4==0)
		{
			delay(20);
			if(key4==0)
			{
				a=a+0x0001;
				if(a>0xcfff)
				{
					a=a-0x0fff;
				}
				while(key4==0)
				{;}
			}
		}

		DA_init(a);
		delay(10);
		DA_init(b);
	    delay(10);

		c=a;
		c=c&0x0fff;
		d=c;
		shang=d/0x1000;
		xianshi_MV=2*2492.3*shang;
		xianshi_MV=xianshi_MV+2;

		xianshi_MA=xianshi_MV*10;
		xianshi_MA=xianshi_MA*10;
		xianshi_MA=xianshi_MA*10;

		if(xianshi_MV>0&xianshi_MV<10000)
			xianshi_MA=xianshi_MA/237.8;
		else if(xianshi_MV>10000&xianshi_MV<20000)
			xianshi_MA=xianshi_MA/238.5;
		else if(xianshi_MV>20000&xianshi_MV<30000)
			xianshi_MA=xianshi_MA/238.8;
		else if(xianshi_MV>30000&xianshi_MV<40000)
			xianshi_MA=xianshi_MA/239;
		else if(xianshi_MV>40000&xianshi_MV<50000)
			xianshi_MA=xianshi_MA/239.1;

		shuju_fenli();
		display();
	}
}

⌨️ 快捷键说明

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