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

📄 ad767.c

📁 实现了12位DA转换芯片ad767与C8051F020的接口数据采集和控制
💻 C
字号:
#include <reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit CS=P2^3;

uchar dh,dl;
long dat=2000;

uchar code wei[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};


void delay(uchar Time)
{
	uchar i=0;
	for(;Time>0;Time--)
		{  for(;i<128;i++)
			{;;}
		}
}

void da(uchar dl,uchar dh)
{	CS=1;
	P3=dl;P0=dh;
	CS=0;  _nop_();
	CS=1;	
}

uchar keyscan(void)
{	
	uchar code_h;
	uchar code_l;
	P2=0xF0;
	if((P2&0xF0)!=0xF0)
	{	delay(10);
		if((P2&0xF0)!=0xF0)
		{	code_h=0xFE;
			while((code_h&0x10)!=0xF0)
			{ P2=code_h;
			if((P2&0xF0)!=0xF0)
			{code_l=(P2&0xF0|0x0F);
			 return((~code_h)+(~code_l));
			}
			else code_h=(code_h<<1)|0x01;
		    }
		}
	}
	return(0);
}


void display(long dat)
{
	uchar bai,shi,ge;
	long disnum;
	disnum=(dat*1000)/4096;
	if(disnum>999)
	{	P0=0xFB;
		P1=0xc6;
		delay(10);
		P0=0xFD;
		P1=0xc1;
		delay(10);
		P0=0xFE;
		P1=wei[0];
		delay(10);
	}
	else{		
//	disnum&=0x00ff;	
	bai=disnum/100;
	shi=(disnum-bai*100)/10;
	ge=disnum%10;	
	P0=0xFB;
	P1=wei[bai]&0x7f;
	delay(10);
	P0=0xFD;
	P1=wei[shi];
	delay(10);
	P0=0xFE;
	P1=wei[ge];
	delay(10);
	}	
}

void sjb()
{	uint c,j;
	for(c=0;c<9&(keyscan()==0);c++)
	{	dat=dat+41;
		dl=dat&0xff;
		dh=((dat>>4)&0xf0)|(P0&0x0f);
		da(dl,dh);
		for(j=0;j<100;j++)
			{delay(255);display(dat);}
	 }
	 for(;c>0&(keyscan()==0);c--)
	 {	dat=dat-41;
		dl=dat&0xff;
		dh=((dat>>4)&0xf0)|(P0&0x0f);
		da(dl,dh);
		for(j=0;j<100;j++)
			{delay(255);display(dat);}
	 }
}

void main()
{
	
//	uint disnum;
//	long int temp;
	uchar keyvalue;
	bit flag,flag2;
	int i,j;
	while(1)
	{	if(keyscan()!=0)		
	 	{	
			keyvalue=keyscan();
			while(keyscan());
			display(keyvalue);
			switch(keyvalue){
				case 17:
					{dat=dat+41;
					if(dat>4096)
						 dat=0;
					break;}
				case 33:
					{dat=dat-41;
					if(dat<1)
						dat=0;
					break;}
				case 65:
					{dat=dat+4;
					if(dat>4096)
						dat=0;
					break;}
				case 129:
					{dat=dat-4;
					if(dat<1)
						dat=0;
					break;}
				case 130:
					 {flag=!flag;
					 break;}
				case 66:
					{
					flag2=!flag2;
					break;
					}
				default:dat=dat;
				}
		}
		if(flag)
		{	dat=0;
			for(i=0;i<9&(keyscan()==0);i++)
			{	dat=dat+41;
				dl=dat&0xff;
				dh=((dat>>4)&0xf0)|(P0&0x0f);
				da(dl,dh);
				for(j=0;j<100;j++)
					{delay(255);display(dat);}
			}
			
		}
		else  if(flag2==0)

			{
			display(dat);
			dl=dat&0xff;
			dh=((dat>>4)&0xf0)|(P0&0x0f);
			da(dl,dh);	
			}

		else 
		{	dat=0;
			sjb();
		}
			
	}			
}

⌨️ 快捷键说明

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