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

📄 正弦波通过按键选择频率.c

📁 AD9852的单音频产生波形程序 加载失时钟是内部设置的
💻 C
字号:
#include <C8051F410.h>
#include <math.h>
typedef unsigned char uchar;                       
typedef unsigned int uint;
typedef unsigned long ulong;
void delay(unsigned int k);
void oscill();
void check_sw();
bit yor_n();
uchar scan_key();
void key_value_process(uchar keyvalue);
void delayms(unsigned char ms);
void DDS_w_d();
void initial_AD9852();
unsigned char xdata biaozhi;
unsigned long  i;
//&&&&&&&&&&&&&&&&&&&&&&&&&&
bdata unsigned char temp;
sbit temp0=temp^0;
sbit temp1=temp^1;
sbit temp2=temp^2;
sbit temp3=temp^3;
sbit temp4=temp^4;
sbit temp5=temp^5;
sbit temp6=temp^6;
sbit temp7=temp^7;
//&&&&&&&&&&&&&&&&&&&&&&&&&&&
									//注意
unsigned char ADDR;					//// 所有函数均使用ADDR和DATA
unsigned char DATA[6];			   ////	 函数不带参数传输
#define N 4	   //倍频数
#define CLK 50 //外部时钟
sbit IO_RES=P2^6;  //A2 //高电平激活,在下一个指令周期开始应该将此置为低电平(17) 
sbit SDIO=P2^1;	   //A0(第19脚)
sbit IO_UD=P2^2;   //(第20脚)
sbit SCLK=P2^3;    //(第21脚);//数据上升沿被装入 
sbit _CS=P2^4;      //(第22脚)//低电平激活  
//sbit OSK=P1^5;      
sbit RESET=P2^5;   //(71)
//sbit FSK_BPSK=P1^7;

void main()
{
        
biaozhi=0;      
oscill();
P2MDOUT   = 0xff;
i=65553;
while(1)
{
check_sw();
switch(biaozhi)
{case 1:initial_AD9852() ;z
	    ADDR=2;
        DATA[5]=0x09;
	    DATA[4]=0x00;
	    DATA[3]=0x99;
	    DATA[2]=0x99;
		DATA[1]=0x99;
	    DATA[0]=0x00;
	    DDS_w_d();while(i--);i=65553;break;
 case 2: ADDR=2;
        DATA[5]=0xff;
	    DATA[4]=0x00;
	    DATA[3]=0x66;
	    DATA[2]=0x55;
		DATA[1]=0x99;
	    DATA[0]=0x00;
	    DDS_w_d();while(i--);i=65553;break;
 case 3:break;
 case 4: break;
 case 5: break;	             
 case 6:break;
 case 7: break;
 case 8: break;	             
 case 9:break;
  }
 } 
}
//*******************************410初始化程序
void oscill(){  CLKSEL = 0x00;//选择内部振荡方式
               //CLKSEL = 0x01;//选择外部振荡方式 
    OSCICN    = 0x87;
PCA0MD    &= ~0x40;//关开门狗
     XBR1      = 0x40;
}


//****************************************************
//延时子程序
void delay(unsigned int k)
{
while(k--);
}
//*************************************************	
void check_sw(){uchar key_value;
 	if( yor_n()){delay(10); 
              key_value=scan_key();
                while(yor_n());
               key_value_process(key_value);	}	}
//*********************其中1.4,1.3,1.2是列分别对应13,12,11脚
//********************/其中1.7,1.6,1.5是行分别对应16,15,14脚
//有无按键按下,判断行线是否有变化
bit yor_n()
{uchar scanvalue,keyvalue;
scanvalue=0x1C;//让所有的列都为0
P1=scanvalue;
keyvalue=P1;
if(keyvalue==0x1C) return 0;
else return 1;}
//****************************************************************
//列(高3位)扫描,并返回键值,判断是否有按键按下,有返回1,没返回0
uchar scan_key()
{uchar scanvalue,keyvalue;
scanvalue=0xdC;
while(scanvalue!=0xfC){
P1=scanvalue;
keyvalue=P1;

if((keyvalue&0x1C)!=0x1C)  break;
scanvalue=(keyvalue<<1)|0x1C;}//列位又移一位,并将行位置高
return keyvalue;}
//**************************
//对应按键时处理
void key_value_process(uchar keyvalue){
                uchar xdata scan;
                 scan=keyvalue; 
  switch(scan)
{
 case 0x6C:biaozhi=1;break;
 case 0xAC:biaozhi=2;break;
 case 0xCC:biaozhi=3; break;
 case 0x74:biaozhi=4; break;
 case 0xB4:biaozhi=5;break;
 case 0xD4:biaozhi=6;break; 
  case 0x58:biaozhi=7;break;
  case 0x98:biaozhi=8;break;
   case 0xD8:biaozhi=9;break;
   } }
   //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
   //*********************888
void delayms(unsigned char ms)
{while(ms--);}
//****************************
void DDS_w_d()	   //根据已有的地址ADDR和DATA 写数据到AD9852
{	char num,i;	
	if((ADDR==0)||(ADDR==1)||(ADDR==8)||(ADDR==9)||(ADDR==0x0b))
	num=2;
	else if(ADDR==0x0a)
	num=1;
	else if(ADDR==6)
	num=3;
	else if(ADDR==5||ADDR==7)
	num=4;
	else num=6;
	_CS=0; 	
	IO_RES=0;
	SCLK=1;	
//	IO_UD=0;
	IO_RES=1;
	delayms(10);
	IO_RES=0;
	


	delayms(50);
	IO_RES=0;
  //I/O输入,数据即可在上升沿输入近来
	temp=ADDR; 
	for(i=7;i>=0;i--) 
	{		
		SCLK=0;
		delayms(10);
		SDIO=temp7;
		SCLK=1;
	    delayms(10);
		temp<<=1;
					
	} 
	for(;num>0;num--)
	{	
		temp=DATA[num-1];
		for(i=7;i>=0;i--)
		{	
			SCLK=0;delayms(10);
			SDIO=temp7;	
			SCLK=1;
			delayms(10);
			temp<<=1;	
		}
	}
//	IO_UD=1;
	delayms(10);
//	IO_UD=0;
	_CS=1;
	
}

//***********************8888
void initial_AD9852()  //初始化AD9852
{
	DATA[3]=0x04;
	DATA[2]=0x44;
	DATA[1]=0x01;
	DATA[0]=0x00;
	ADDR=7;///////////////////////////
	RESET=1;
	delayms(50);
	RESET=0;
	DDS_w_d();
	delayms(50);	
}





⌨️ 快捷键说明

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