DDS--AD9850-2DAC7611.zip

  • PUDN用户
    了解作者
  • Visual Basic
    开发工具
  • 40KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2014-08-13 23:07
    上传日期
AD9850与DAC7611同时控制,用于实现DDS信号源的频率调节和峰值调节、直流偏置点调节。
DDS--AD9850-2DAC7611.zip
  • DDS+˫DA
  • DDS+˫DA.plg
    200B
  • DDS+˫DA_Uv2.Bak
    2.1KB
  • DDS+˫DA.M51
    32.1KB
  • DDS+˫DA.Opt
    976B
  • DDS+˫DA.OBJ
    27.2KB
  • DDS+˫DA
    24.1KB
  • DDS+˫DA.Uv2
    2.1KB
  • DDS+˫DA_Opt.Bak
    974B
  • DDS+˫DA.lnp
    48B
  • DDS+˫DA.c
    11.3KB
  • DDS+˫DA.LST
    35.2KB
  • DDS+˫DA.hex
    10.2KB
内容介绍
#include<reg52.h> #include <stdio.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit cs=P1^0; //RS sbit sid=P1^1; //RW sbit sclk=P2^5; //EN sbit psb=P1^2; //PSB sbit K1=P3^0; sbit K2=P3^1; //sbit K3=P3^2; //sbit K4=P3^3; sbit K5=P3^4; sbit K6=P3^5; sbit K7=P3^6; sbit K8=P3^7; sbit K9=P1^7; sbit K10=P1^5; sbit K11=P1^6; //sbit K12=P3^7; sbit ad9850_w_clk =P0^0; //P2.2口接ad9850的w_clk脚/PIN7 sbit ad9850_fq_up =P0^1; //P2.1口接ad9850的fq_up脚/PIN8 sbit ad9850_bit_data =P0^2; //P1.7口接ad9850的D7脚/PIN25 sbit ad9850_rest =P0^3; //P2.0口接ad9850的rest脚/PIN12 sbit DA1CS=P2^0;//第一路DA,小心,在板上因为有复用,所以DA的数值不稳定,一直在跳动,要用最小系统试验 sbit DA1CLK=P2^1; sbit DA1SDI=P2^2; sbit DA1LD=P2^3; sbit DA2CS=P2^4;//第二路DA sbit DA2CLK=P0^7; sbit DA2SDI=P2^6; sbit DA2LD=P2^7; uchar a[]={"0123456789"}; uchar b[]={"频率:"}; uchar c[]={"Hz"}; //uchar d[]={"幅度:"}; //uchar f[]={"占空比:"}; //uchar h[]={"直流偏移:"}; uint A1,A2,A3,A4,A5,A6,A7,A8;// date1,date2,date3,date4,date5,date6,date7,date8,Vn1,Vn2,PWM1,PWM2,V0_1,V0_2 uint command=0,shift=1,DaDate1=0,DaDate2=0; long int Frequency=1000; //uint VPP=100,PWM=2,V0=0; void delay(uint num) { uint i,j; for(i=num;i>0;i--) for(j=110;j>0;j--); } void com(uchar com) { uchar i,date; date=0xf8; cs=1; sclk=0; for (i=0;i<8;i++) { sid=(bit)(date&0x80); sclk=0; sclk=1; date=date<<1; } date=com; date=date&0xf0; for(i=0;i<8;i++) { sid=(bit)(date&0x80); sclk=0; sclk=1; date=date<<1; } date=com; date=date<<4; for(i=0;i<8;i++) { sid=(bit)(date&0x80); sclk=0; sclk=1; date=date<<1; } cs=0; delay(1); } void date(uchar date) { uchar dat,i; cs=1; sclk=0; dat=0xfa; for (i=0;i<8;i++) { sid=(bit)(dat&0x80); sclk=0; sclk=1; dat=dat<<1; } dat=date; dat=dat&0xf0; for(i=0;i<8;i++) { sid=(bit)(dat&0x80); sclk=0; sclk=1; dat=dat<<1; } dat=date; dat=dat<<4; dat=dat&0xf0; for(i=0;i<8;i++) { sid=(bit)(dat&0x80); sclk=0; sclk=1; dat=dat<<1; } cs=0; delay(1); } void init() { psb=0; delay(1); com(0x30); com(0x02); com(0x0C); com(0x80); com(0x01); } void ad9850_reset_serial() { ad9850_w_clk=0; ad9850_fq_up=0; //rest信号 ad9850_rest=0; ad9850_rest=1; ad9850_rest=0; //w_clk信号 ad9850_w_clk=0; ad9850_w_clk=1; ad9850_w_clk=0; //fq_up信号 ad9850_fq_up=0; ad9850_fq_up=1; ad9850_fq_up=0; } //**************************DAC7611初始化************************* void DA1_init() { DA1LD=0; DA1CS=1; DA1CLK=1; DA1SDI=1; delay(5); } void DA2_init() { DA2LD=0; DA2CS=1; DA2CLK=1; DA2SDI=1; delay(5); } void ad9850_wr_serial(unsigned char w0,double frequence) { unsigned char i,w; long int y; double x; //计算频率的HEX值 x=4294967295/125;//适合125M晶振 //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!! frequence=frequence/1000000; frequence=frequence*x; y=frequence; //写w4数据 w=(y>>=0); for(i=0;i<8;i++) { ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w3数据 w=(y>>8); for(i=0;i<8;i++) { ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w2数据 w=(y>>16); for(i=0;i<8;i++) { ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w1数据 w=(y>>24); for(i=0;i<8;i++) { ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //写w0数据 w=w0; for(i=0;i<8;i++) { ad9850_bit_data=(w>>i)&0x01; ad9850_w_clk=1; ad9850_w_clk=0; } //移入始能 ad9850_fq_up=1; ad9850_fq_up=0; } void display() { uchar i; //*********************频率************** if(command==0) { ad9850_rest=0; } if(command==1) { ad9850_rest=1; } A1=Frequency/10000000; A2=Frequency%10000000/1000000; A3=Frequency%1000000/100000;; A4=Frequency%100000/10000;; A5=Frequency%10000/1000; A6=Frequency%1000/100; A7=Frequency%100/10; A8=Frequency%10; com(0x83); date(a[A1]); date(a[A2]); date(a[A3]); date(a[A4]); date(a[A5]); date(a[A6]); date(a[A7]); date(a[A8]); com(0x80); i=0; while(b[i]!='\0') { date(b[i]); i++; } com(0x87); i=0; while(c[i]!='\0') { date(c[i]); i++; } //*********************幅度************** /* Vn1=VPP/1000; Vn2=VPP%1000/100; com(0x90); i=0; while(d[i]!='\0') { date(d[i]); i++; } com(0x95); date(a[Vn1]); date('.'); com(0x96); date(a[Vn2]); com(0x97); date('V'); //*********************方波占空比************** PWM1=PWM/10; PWM2=PWM%10; com(0x88); i=0; while(f[i]!='\0') { date(f[i]); i++; } com(0x8C); date('%'); com(0x8D); date(a[PWM1]); com(0x8E); date(a[PWM2]); //*********************直流偏移量************** V0_1=V0/1000; V0_2=V0%1000/100; com(0x98); i=0; while(h[i]!='\0') { date(h[i]); i++; } com(0x9D); date(a[V0_1]); date('.'); com(0x9E); date(a[V0_2]); com(0x9F); date('V');*/ } void keycan() { //*************************************** if (K1==0)//调频率 { delay(5); if (K1==0) { Frequency=Frequency+1000; if (Frequency>=10000000) Frequency=10000000; while(!K1); delay(5); while(!K1); } } if (K2==0) { delay(5); if (K2==0) { Frequency=Frequency-1000; if (Frequency<=1) Frequency=1; while(!K2); delay(5); while(!K2); } } //*************************************** /* if (K3==0)//调幅度 { delay(5); if (K3==0) { VPP=VPP+100; if (VPP>=3000) VPP=3000; while(!K3); delay(5); while(!K3); } } if (K4==0) { delay(5); if (K4==0) { VPP=VPP-100; if (VPP<=100) VPP=100; while(!K4); delay(5); while(!K4); } } //*************************************** if (K5==0)//调占空比 { delay(5); if (K5==0) { PWM=PWM+2; if (PWM>=98) PWM=98; while(!K5); delay(5); while(!K5); } } if (K6==0) { delay(5); if (K6==0) { PWM=PWM-2; if (PWM<=2) PWM=2; while(!K6); delay(5); while(!K6); } } //*************************************** if (K7==0)//调直流偏置点 { delay(5); if (K7==0) { V0=V0+100; if (V0>=1500) V0=1500; while(!K7); delay(5); while(!K7); } } if (K8==0) { delay(5); if (K8==0) { V0=V0-100; if (V0<=100) V0=100; while(!K8); delay(5); while(!K8); } } */ //********************************** //********************频率预置************************ if (K9==0)//选位 { delay(5); if (K9==0) { command++; if (command==2) command=0; while(!K9); delay(5); while(!K9); } } if (command==1)//选位开始,一共八位数。两位一起显示 { if (K10==0) { delay(5); if (K10==0) { shift++; if (shift>8) shift=1; while(!K10) delay(5); while(!K10); } } if ((shift==1)||(shift==2)) { com(0x83); com(0x0D); delay(25); com(0x0C); } if ((shift==3)||(shift==4)) { com(0x84); com(0x0D); delay(25); com(0x0C); } if ((shift==5)||(shift==6)) { com(0x85); com(0x0D); delay(25); com(0x0C); } if ((shift==7)||(shift==8)) { com(0x86); com(0x0D); delay(25); com(0x0C); } //************************************ if (shift==1) //第一位数字 { if (K11==0)// { delay(5); if (K11==0) { A1++; if(A1>9) A1=0; while(!K11) delay(5); while(!K11); } }
评论
    相关推荐