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

📄 general.h

📁 基于STC89C58的单片机控制DDS程序
💻 H
字号:
/*8279键盘和LED显示程序*/
#include<absacc.h>
#include<stc89c58.h>
#include<timer1.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long


#define COM XBYTE [0x0001]         //命令状态口
#define DAT XBYTE [0X0000]         //数据口
#define RAM XBYTE [0X8000]         //RAM地址
/*共阴的七段数码管译码0   1     2    3    4    5    6    7    8   9     a   b    c    d    e    f*/
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar xdata Mydata[1000] _at_ 0x8000;
uint fre_order[16];
uint ftw=0;

sbit ad9858_reset=P1^5; //9858reset
sbit ad9858_fud=P1^4;
sbit ad9858_cs=P1^2;
sbit ad9858_sclk=P1^0;
sbit ad9858_serial_reset=P1^3;
sbit ad9858_sdata=P1^1;
sbit ad9858_ps0=P1^6;
sbit ad9858_ps1=P1^7;

//uchar ad9858_cfrdata[]={0x00,0x58,0x00,0x00,0x00};
uchar ad9858_cfrdata[]={0x00,0x00,0x60,0x00,0x78};//0x58 enable the sysclkout

uchar ad9858_ftw0data[]={0x03,0x06,0x66,0x66,0x66};
 //key0~key7 显示0~7
 //skey0~skey7 显示8~f
uchar ad9858_ftw1[]={0x05,0x0c,0xcc,0xcc,0xcc};
int key_num[]={0,0,0,0};

uchar keyin(void);

void delay(uint k) //delay k msec;
{  
	uint i,j;
   for(i=0;i<k;i++)
	{
		for(j=0;j<5;j++)
			;
	}	
	return ;
}

uchar *convert(uint *value)
//uint value[16];
{
	uint i,a;
	ulong j;
	uchar temp[4];
	j=0;
	a=1;
	for(i=0;i<8;i++)
	{
		j+=value[7-i]*a;
		a*=10;
	}
	j*=4.294967296;
	temp[0]=j%256;
	j/=256;
	temp[1]=j%256;
	j/=256;
	temp[2]=j%256;
	temp[3]=j/256;
	return temp;
}

void AD9858_update(uchar *p)
{
	uint i,j;
	uchar temp1;
	ad9858_reset=0;
	ad9858_fud=0;
	ad9858_cs=0;
	for(i=0;i<4;i++)
	{
		ad9858_ftw1[i+1]=p[i];
	}
	for(i=0;i<48;i++)
		{
			j=0;
			temp1 = ad9858_ftw1[j];
			ad9858_sclk=0;
			delay(1);
			ad9858_sdata = temp1&0x80==0?0:1;	
			ad9858_sclk=1;
			delay(1);
			temp1<<=1;
			if(!i%8) j++;
		}
	ad9858_cs=1;
	//.............
	ad9858_ps0=0;
	ad9858_ps1=1;
}

/*按键函数*/
void key0(void)
{

	COM=0x80+ftw-1;
 	DAT=table[0];
}

void key1(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[1];
}

void key2(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[2];
}

void key3(void)
{
 	COM=0x80+ftw-1;
	DAT=table[3];
}

void key4(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[4];
}

void key5(void)
{
		COM=0x80+ftw-1;
		DAT=table[5];
}

void key6(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[6];
}

void key7(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[7];
}

void key8(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[8];
}

void key9(void)
{
 	COM=0x80+ftw-1;
 	DAT=table[9];
}

void key10(void)
{
// 	COM=0x80;
 //	DAT=table[10];
	key_num[0]+=1;
}

void key11(void)
{
 	COM=0x80;
 	DAT=table[11];
	key_num[1]+=1;
}

void key12(void)
{
 	COM=0x80;
 	DAT=table[12];
	key_num[2]+=1;
}

void key13(void)
{
 	COM=0x80;
 	DAT=table[13];
	key_num[3]+=1;
}

void key14(void)
{
 //	COM=0x80;
 //	DAT=table[14];
	 uint k;
 	 ftw=0;
	 for(k=0;k<4;k++)
	 {
	 	fre_order[k]+=key_num[k];
		key_num[k]=0;
	 }
	 AD9858_update(convert(fre_order));
	 	for(k=0;k<8;k++)
	{
		COM=0x80+k;
 		DAT=table[fre_order[k]];
	}

}

void key15(void)
{
 	//COM=0x80;
 //	DAT=table[15];
/*	uint i,j;
	for(i=0;i<1000;i++)
	{
		Mydata[i]=i%8;
	}*/
	uint j;
	if(ftw>8)
	{
	j=ftw;
	for(;j>8;j--)
		fre_order[j]=0;
	}
	if(ftw<8)//不足的位数补成0
	{
	j=ftw;
	for(;j<8;j++)
		fre_order[j]=0;
	}
	//if(!ftw)
	for(j=0;j<8;j++)
	{
		COM=0x80+j;
 		DAT=table[fre_order[j]];
	}
	ftw=0;//顺序字置零;
	
/*	for(j=0;j<4;j++)
	{
	COM=0x80+j;
	DAT=convert(fre_order)[j];
	}*/
	AD9858_update(convert(fre_order));

}
/*带shift功能按键*/
void skey0(void)
{
 	COM=0x80;
 	DAT=table[8];
}

void skey1(void)
{
 	COM=0x81;
 	DAT=table[9];
}

void skey2(void)
{
 	COM=0x82;
	DAT=table[10];
}

void skey3(void)
{
 	COM=0x83;
 	DAT=table[11];
}

void skey4(void)
{
 	COM=0x84;
 	DAT=table[12];
}

void skey5(void)
{
 	COM=0x85;
 	DAT=table[13];
}

void skey6(void)
{
 	COM=0x86;
 	DAT=table[14];
}

void skey7(void)
{
 	COM=0x87;
 	DAT=table[15];
}

void skey8(void)
{
 	COM=0x86;
 	DAT=table[0];
}

void skey9(void)
{
 	COM=0x85;
 	DAT=table[7];
}

void skey10(void)
{
 	COM=0x84;
 	DAT=table[6];
	key_num[0]-=1;
}

void skey11(void)
{
 	COM=0x83;
 	DAT=table[5];
	key_num[1]-=1;
}

void skey12(void)
{
 	COM=0x82;
 	DAT=table[4];
	key_num[2]-=1;
}

void skey13(void)
{
 	COM=0x81;
	DAT=table[3];
	key_num[3]-=1;
}

void skey14(void)
{
 	//COM=0x80;
 	//DAT=table[2];
	uint i;
	for(i=0;i<4;i++)
	key_num[i]=0;
	ftw=0;
}

void skey15(void)
{
 	//COM=0x81;
 	//DAT=table[1];
	uint i;//shift +key15撤销;
	for(i=0;i<8;i++)
	fre_order[i]=0;
	ftw=0;
	
}


uchar keyin(void)
{
 	uchar i;
	//while(int_flag==0);
 	COM=0x40;
	i=DAT;i=i&0x7f; //取键盘数据低7位
 	return(i);
}

⌨️ 快捷键说明

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