久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2278|回復: 0
收起左側(cè)

AD9850 信號發(fā)生代碼

[復制鏈接]
ID:298113 發(fā)表于 2018-3-28 08:25 | 顯示全部樓層 |閱讀模式
  • *                                        AD9850.c                                                                *
  • *                                        AD9850的驅(qū)動程序C文件                                        *
  • *                                        Copyright (c)2009---MJC                                 *
  • *                                        Free to Copy and Modify.                                *
  • *                                        Author:Worrior                                                        *
  • *                                        Date:2009-9-1                                                        *
  • ************************************************************/
  • #include<intrins.h>
  • #include "AD9850I.h"
  • #include "lcd12864.h"
  • //unsigned char freq[8];                                //液晶顯示8種步進頻率值
  • unsigned char freq[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  • /********************
  • **函數(shù):AD9850Reset
  • **功能:AD9850的復位函數(shù)
  • **作者:Worrior
  • **日期:2009-9-1
  • ********************/
  • void AD9850Reset(void)
  • {
  •         AD9850WCLK = 1;
  •         AD9850FQUD = 1;
  • //        AD9850ReSet = 0;
  • //        AD9850ReSet = 1;//復位腳置高電平(10個AD9850的時鐘周期)
  • //        _nop_();_nop_();_nop_();_nop_();_nop_();
  • //        _nop_();_nop_();_nop_();_nop_();_nop_();//延時,其實不用這么長
  • //        AD9850ReSet = 0;//復位完成,再拉低
  • }
  • /*步進按鍵函數(shù)*/
  • void f10Mhz(void)                                                                                                                                                //10Mhz步進
  • {
  •         freq[0]=freq[0]+1;
  •         if(freq[0]>=10)
  •         {
  •                 freq[0]=0;
  •         }
  •         display_led();
  • }
  • void f1Mhz(void)                                                                                                                                                //1Mhz步進
  • {
  •         freq[1]=freq[1]+1;
  •         if(freq[1]>=10)
  •         {
  •                 freq[1]=0;
  •         }
  •         display_led();
  • }
  • void f100Khz(void)                                                                                                                                                //100Khz步進
  • {
  •         freq[2]=freq[2]+1;
  •         if(freq[2]>=10)
  •         {
  •                 freq[2]=0;
  •         }
  •         display_led();
  • }
  • void f10Khz(void)                                                                                                                                                //10Khz步進
  • {
  •         freq[3]=freq[3]+1;
  •         if(freq[3]>=10)
  •         {
  •                 freq[3]=0;
  •         }
  •         display_led();
  • }
  • void f1Khz(void)                                                                                                                                                //1Khz步進
  • {
  •         freq[4]=freq[4]+1;
  •         if(freq[4]>=10)
  •         {
  •                 freq[4]=0;
  •         }
  •         display_led();
  • }
  • void f100Hz(void)                                                                                                                                                //100hz步進
  • {
  •         freq[5]=freq[5]+1;
  •         if(freq[5]>=10)
  •         {
  •                 freq[5]=0;
  •         }
  •         display_led();
  • }
  • void f10Hz(void)                                                                                                                                                //10hz步進
  • {
  •         freq[6]=freq[6]+1;
  •         if(freq[6]>=10)
  •         {
  •                 freq[6]=0;
  •         }
  •         display_led();
  • }
  • void f1Hz(void)                                                                                                                                                        //1hz步進
  • {
  •         freq[7]=freq[7]+1;
  •         if(freq[7]>=10)
  •         {
  •                 freq[7]=0;
  •         }
  •         display_led();
  • }
  • /***計算控制字************/
  • /***入口:頻率數(shù)組指針***出口,控制字值*****/
  • unsigned long jisuan(unsigned char data *fno)//*fno-0>freq[0...7]
  • {
  •     unsigned long dds_no ;
  •     dds_no=
  •     (*(fno+7))*FF0+
  •     (*(fno+6))*FF1+
  •     (*(fno+5))*FF2+
  •     (*(fno+4))*FF3+
  •     (*(fno+3))*FF4+
  •     (*(fno+2))*FF5+
  •     (*(fno+1))*FF6+
  •     (*fno)*FF7 ;
  •     return(dds_no);
  • }
  • /********************
  • **函數(shù):AD9850SetFre
  • **功能:AD9850設(shè)定頻率控制字函數(shù)
  • **參數(shù):Fre,float型,要設(shè)定的頻率,單位Hz
  • **作者:Worrior
  • **日期:2009-9-1
  • ********************/
  • void AD9850ISetFre()
  • {
  •         unsigned long FTW = 0;//要寫入的32位頻率控制字(AD9850一次需要寫入40位控制字)
  •         unsigned char part1,part2,part3,part4;
  •         FTW=jisuan(freq);
  • //        if(FTW > 30000000)
  • //                FTW = 30000000;
  • //        FTW = (unsigned long) (Fre * AD9850_125M);//計算頻率控制字(公式:FTW=(2^32/fosc)*Fre)
  •         /*以下將32位頻率控制字分解*/
  •         part1 = (unsigned char) (FTW>>24);//取32~25位
  •         part2 = (unsigned char) (FTW>>16);//取24~17位
  •         part3 = (unsigned char) (FTW>>8); //取16~9位
  •         part4 = (unsigned char) (FTW);          //取8~1位
  •         /*以上將32位頻率控制字分解*/
  •         AD9850FQUD = 1;
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = 0x00;//寄存器最高的八位只送0x00
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part1;
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part2;
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part3;
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part4;
  •         AD9850WCLK = 0;//AD9850WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850FQUD = 0;//AD9850FQUD上升沿將AD9850緩沖區(qū)的40位數(shù)據(jù)送入DDS Core
  • }
  • /********************
  • **函數(shù):AD9850SetFre
  • **功能:AD9850設(shè)定頻率控制字函數(shù)
  • **參數(shù):Fre,float型,要設(shè)定的頻率,單位Hz
  • **作者:Worrior
  • **日期:2009-9-1
  • ********************/
  • void AD9850IISetFre(float Fre)
  • {
  •         unsigned long FTW = 0;//要寫入的32位頻率控制字(AD9850一次需要寫入40位控制字)
  •         unsigned char part1,part2,part3,part4;
  •         if(Fre > 30000000)
  •                 Fre = 30000000;
  •         FTW = (unsigned long) (Fre * 34.3597384);//計算頻率控制字(公式:FTW=(2^32/fosc)*Fre)
  •         /*以下將32位頻率控制字分解*/
  •         part1 = (unsigned char) (FTW>>24);//取32~25位
  •         part2 = (unsigned char) (FTW>>16);//取24~17位
  •         part3 = (unsigned char) (FTW>>8); //取16~9位
  •         part4 = (unsigned char) (FTW);          //取8~1位
  •         /*以上將32位頻率控制字分解*/
  •         AD9850FQUD = 1;
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = 0x00;//寄存器最高的八位只送0x00
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part1;
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part2;
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part3;
  •         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850WCLK = 1;
  •         AD9850DATAPORT = part4;
  •         AD9850WCLK = 0;//AD9850WCLK上升沿送數(shù)據(jù)
  •         _nop_();
  •         AD9850FQUD = 0;//AD9850FQUD上升沿將AD9850緩沖區(qū)的40位數(shù)據(jù)送入DDS Core
  • }


[color=rgb(51, 102, 153) !important]復制代碼

主程序:
  • #include <reg52.h>
  • #include "AD9850I.h"
  • #include "hs0038.h"
  • #include "lcd12864.h"
  • void main()
  • {
  •         hs0038_init();               //HS0038初始化,使用了外部中斷0///定時器1
  •         lcd12864_init();
  •         AD9850Reset();
  •         while(1)
  •         {
  •                 Get_Ircode_And_Dis();
  •                 switch (ircode[2])
  •                 {        /**************模式選擇****************/
  •                                 case 0x07:xuanzekey();break;
  •                                 case 0x15:quedingkey();break;
  •                                  case 0x09:fanhuikey();break;
  •                         /*************頻率調(diào)整區(qū)***************/
  •                                 case 0x0c:if(flag1==1) {f10Mhz();}; break;
  •                                 case 0x18:if(flag1==1) {f1Mhz(); };break;
  •                                  case 0x5e:if(flag1==1) {f100Khz();};break;
  •                                  case 0x08:if(flag1==1) {f10Khz(); };break;
  •                                  case 0x1c:if(flag1==1) {f1Khz(); } ;break;
  •                                 case 0x5a:if(flag1==1) {f100Hz();} ;break;
  •                                  case 0x42:if(flag1==1) {f10Hz(); } ;break;
  •                                 case 0x52:if(flag1==1) {f1Hz();  } ;break;
  •                     /***************頻率確認***************/
  •                                 case 0x4a:        if(flag1==1)
  •                                                         {
  •                                                         pce1=0;
  •                                                         pce2=1;
  •                                                         pce3=1;
  •                                                         AD9850ISetFre();
  •                                                         };
  •                                                         break;
  •                         /***************AM調(diào)制*********************/
  •                                 case 0x16:        pce1=1;                   //片選AD9850 I          實驗板U1
  •                                                         pce2=0;                   //片選AD9850 I          實驗板U2
  •                                                         pce3=1;
  •                                                         AD9850IISetFre(1000.0);break;
  •                                 case 0x44:if(flag2==1)
  •                                                         {
  •                                                     pce1=1;
  •                                                         pce2=1;
  •                                                         pce3=0;
  •                                                         pwr=0;
  •                                                         AM_mastepdown();
  •                                                         };
  •                                                         break;
  •                                 case 0x40:  if(flag2==1)
  •                                                         {
  •                                                         pce1=1;
  •                                                         pce2=1;
  •                                                         pce3=0;
  •                                                         pwr=0;
  •                                                         AM_mastepup();
  •                                                         };
  •                                                         break;
  •                         /***************FM調(diào)制*********************/
  •                             case 0x19:AD9850IISetFre(5000.0);break;
  •                                  default:break;
  •                 }
  •                 ircode[2]=0;                                                                            //注意一定要把ircode[2]清零。。。。。
  • //                AD9850SetFre();
  •         }
  • }



回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99国产精品 | 久久99精品国产99久久6男男 | 久久久国产一区 | 欧美不卡一区二区三区 | 欧美精品网站 | 久久久久国产 | 国产精品日韩在线 | 最新免费视频 | 久久网站免费视频 | 亚洲激情一区二区 | 99视频入口 | 在线视频一区二区三区 | 日本黄色的视频 | 欧美一级网站 | 自拍偷拍精品 | 九九久久国产 | 久久亚洲欧美日韩精品专区 | 欧美性受xxxx白人性爽 | 91精品国产乱码麻豆白嫩 | 精品久久久久一区二区国产 | 一区二区三区高清 | 精品久久久网站 | 国产一区二区三区 | 国产91久久久久 | 91久久网站 | 黄色在线免费观看视频网站 | 极品久久 | 精品日韩一区 | 欧美成人性生活 | 精品一区二区三区免费毛片 | 超碰人人艹 | 久久国产精品99久久久久久丝袜 | 99久久久无码国产精品 | 日韩精品一区二 | www.47久久青青 | 久草.com| a欧美| 国产精品久久久久久久久免费高清 | 91中文视频| 成人九色 | 久久99蜜桃综合影院免费观看 |