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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7806|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

AD9854原理圖與單片機(jī)驅(qū)動(dòng)程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

AD9854原理圖如下(pdf文檔清晰版請(qǐng)下載附件):


AD9854單片機(jī)源程序如下:
  1. //=====================================================================
  2. //                    AD9854 驅(qū)動(dòng)程序設(shè)計(jì)
  3. //AD9854.c
  4. //說明:10MHZ 有源晶振
  5. //=====================================================================
  6. #include <reg52.h>
  7. #include <lcd1602.h>       
  8. #include <intrins.h>   

  9. sfr P4 = 0xC0;        //1111,1111 端口4

  10. sbit KEY1 = P3^5;
  11. sbit KEY2 = P3^4;
  12. sbit KEY3 = P3^3;
  13. sbit KEY4 = P3^2;

  14. unsigned char FreqWord[6];                                 //6個(gè)字節(jié)頻率控制字

  15. /*
  16.       CLK_Set為時(shí)鐘倍頻設(shè)置,可設(shè)置4~20倍倍頻,但最大不能超過300MHZ
  17.       Freq_mult_unsigned long和Freq_mult_doulle均為2的48次方除以系統(tǒng)時(shí)鐘,一個(gè)為長(zhǎng)整形,一個(gè)為雙精度型
  18. */

  19. #define      CLK_Set            20
  20. const unsigned long  Freq_mult_ulong  = 1407375;
  21. const double Freq_mult_doulle = 1407374.88355328;


  22. //**************************修改硬件時(shí)要修改的部分********************************

  23. #define AD9854_DataBus P2
  24. #define AD9854_AdrBus  P0

  25. sbit AD9854_RST    = P3^6;   //AD9854復(fù)位端口
  26. sbit AD9854_UDCLK  = P3^7;   //AD9854更新時(shí)鐘
  27. sbit AD9854_WR     = P4^1;   //AD9854寫使能,低有效
  28. sbit AD9854_RD     = P4^2;   //AD9854讀使能,低有效
  29. sbit AD9854_FDATA  = P4^3;   //AD9854 FSK,PSK控制
  30. sbit AD9854_OSK    = P4^4;   //AD9854 OSK控制端

  31. unsigned char flag = 1;
  32. unsigned int fc = 1000;
  33. unsigned long LFerq = 750;
  34. unsigned long HFerq = 1250;


  35. void AD9854_WR_Byte(unsigned char addr,unsigned char dat);          
  36. void AD9854_Init(void);                                                  
  37. void Freq_convert(long Freq);                           
  38. void AD9854_InitFSK(void);                               
  39. void AD9854_SetFSK(unsigned long Freq1,unsigned long Freq2);                                                                 
  40. //void delay (unsigned int us);

  41. void UpDisplay()
  42. {
  43.         unsigned char disbuf[5];
  44.         LCD_Write_String(0, 0, "BaseFerq       M");
  45.         LCD_Write_String(0, 1, "Now Ferq       M");
  46.         disbuf[0] = fc / 1000 + '0';
  47.         disbuf[1] = '.';
  48.         disbuf[2] = fc % 1000 / 100 + '0';
  49.         disbuf[3] = fc % 100 / 10 + '0';
  50.         disbuf[4] = fc % 10 + '0';
  51.         disbuf[5] = 0;
  52.         LCD_Write_String(9, 0, disbuf);

  53.         disbuf[0] = HFerq / 1000 + '0';
  54.         disbuf[1] = '.';
  55.         disbuf[2] = HFerq % 1000 / 100 + '0';
  56.         disbuf[3] = HFerq % 100 / 10 + '0';
  57.         disbuf[4] = HFerq % 10 + '0';
  58.         disbuf[5] = 0;
  59.         LCD_Write_String(9, 1, disbuf);
  60. }
  61. void DownDisplay()
  62. {
  63.         unsigned char disbuf[5];
  64.         LCD_Write_String(0, 0, "BaseFerq       M");
  65.         LCD_Write_String(0, 1, "Now Ferq       M");
  66.         disbuf[0] = fc / 1000 + '0';
  67.         disbuf[1] = '.';
  68.         disbuf[2] = fc % 1000 / 100 + '0';
  69.         disbuf[3] = fc % 100 / 10 + '0';
  70.         disbuf[4] = fc % 10 + '0';
  71.         disbuf[5] = 0;
  72.         LCD_Write_String(9, 0, disbuf);

  73.         disbuf[0] = LFerq / 1000 + '0';
  74.         disbuf[1] = '.';
  75.         disbuf[2] = LFerq % 1000 / 100 + '0';
  76.         disbuf[3] = LFerq % 100 / 10 + '0';
  77.         disbuf[4] = LFerq % 10 + '0';
  78.         disbuf[5] = 0;
  79.         LCD_Write_String(9, 1, disbuf);
  80. }
  81. void AD9854_SetSine(unsigned long Freq,unsigned int Shape)
  82. {
  83.         unsigned char count;
  84.         unsigned char Adress;

  85.         Adress = 0x04;                        //選擇頻率控制字地址的初值

  86.         Freq_convert(Freq);                           //頻率轉(zhuǎn)換

  87.         for(count=6;count>0;)                  //寫入6字節(jié)的頻率控制字  
  88.     {
  89.                 AD9854_WR_Byte(Adress++,FreqWord[--count]);
  90.     }
  91.        
  92.         AD9854_WR_Byte(0x21,Shape>>8);          //設(shè)置I通道幅度
  93.         AD9854_WR_Byte(0x22,(unsigned char)(Shape&0xff));
  94.        
  95.         AD9854_WR_Byte(0x23,Shape>>8);          //設(shè)置Q通道幅度
  96.         AD9854_WR_Byte(0x24,(unsigned char)(Shape&0xff));

  97.         AD9854_UDCLK=1;                    //更新AD9854輸出
  98.     AD9854_UDCLK=0;
  99. }
  100. void main()
  101. {
  102.         LCD_Init();
  103.         LCD_Clear();
  104.         /*LCD_Write_String(0,0,"BaseFerq 0.875 M");
  105.         LCD_Write_String(0,1,"Now Ferq 1.125 M");*/
  106.         UpDisplay();
  107.         AD9854_Init();
  108.         AD9854_SetSine(HFerq * 1000,4000);
  109. //        AD9854_SetSine(1000000,4000);
  110. //        while(1);
  111. //        AD9854_InitFSK();
  112. //       
  113. //        AD9854_SetFSK(HFerq * 1000, LFerq * 1000);
  114.        
  115. //        AD9854_SetFSK(1000000,1000000);
  116. //        AD9854_FDATA = 1;
  117. //        while(1);
  118.         while(1)
  119.         {   
  120.                 if(!KEY1)
  121.                 {
  122.                         if (flag == 1)
  123.                         {
  124.                                 AD9854_SetSine(0,0);
  125.                                 //AD9854_InitFSK();
  126.                                 flag = 0;
  127.                         }
  128.                         else
  129.                         {
  130. //                                AD9854_InitFSK();
  131. //                                AD9854_SetFSK(HFerq * 1000, LFerq * 1000);
  132.                                 AD9854_SetSine(HFerq * 1000,4000);
  133.                                 flag = 1;
  134.                         }
  135.                        
  136.                         while (!KEY1);
  137.                 }
  138.                 if (flag == 1)
  139.                 {
  140.                         if (!KEY2)
  141.                         {
  142.                                 AD9854_SetSine(0,0);
  143.                                 fc += 100;
  144.                                 if (fc == 7900)        fc = 7800;
  145.                                 LFerq = fc * 3 / 4;
  146.                                 HFerq = fc * 5 / 4;
  147.                                 UpDisplay();
  148.                                 AD9854_SetSine(HFerq * 1000,4000);
  149. //                                AD9854_InitFSK();
  150. //                                AD9854_SetFSK(HFerq * 1000, LFerq * 1000);
  151.                                
  152.                                 while (!KEY2);
  153.                         }
  154.                         if (!KEY3)
  155.                         {
  156.                                 AD9854_SetSine(0,0);
  157.                                 fc -= 100;
  158.                                 if (fc == 300)        fc = 400;
  159.                                 LFerq = fc * 3 / 4;
  160.                                 HFerq = fc * 5 / 4;
  161.                                 UpDisplay();
  162.                                 AD9854_SetSine(HFerq * 1000,4000);
  163. //                                AD9854_InitFSK();
  164. //                                AD9854_SetFSK(HFerq * 1000, LFerq * 1000);
  165.                                 while (!KEY3);
  166.                         }
  167.                         if (!KEY4)
  168.                         {
  169.                                 //AD9854_FDATA = 1;
  170.                                 AD9854_SetSine(LFerq * 1000,4000);
  171.                                 DownDisplay();
  172.                                 while (!KEY4);
  173.                                 AD9854_SetSine(HFerq * 1000,4000);
  174.                                 //AD9854_FDATA = 0;
  175.                                 UpDisplay();
  176.                         }
  177.                 }

  178.         }
  179. }

  180. //====================================================================================
  181. //函數(shù)名稱:void AD9854_WR_Byte(unsigned char addr,unsigned char dat)
  182. //函數(shù)功能:AD9854并行口寫入數(shù)據(jù)
  183. //入口參數(shù):addr     6位地址
  184. //         dat      寫入的數(shù)據(jù)
  185. //出口參數(shù):無
  186. //====================================================================================
  187. void AD9854_WR_Byte(unsigned char addr,unsigned char dat)
  188. {
  189.         AD9854_AdrBus  = (addr&0x3f) | (AD9854_AdrBus&0xc0);
  190.         AD9854_DataBus = dat;
  191.         AD9854_WR      = 0;
  192.         AD9854_WR      = 1;       
  193. }

  194. //====================================================================================
  195. //函數(shù)名稱:void AD9854_Init(void)
  196. //函數(shù)功能:AD9854初始化
  197. //入口參數(shù):無
  198. //出口參數(shù):無
  199. //====================================================================================
  200. void AD9854_Init(void)
  201. {
  202.         AD9854_WR=1;//將讀、寫控制端口設(shè)為無效
  203.     AD9854_RD=1;
  204.     AD9854_UDCLK=0;
  205.     AD9854_RST=1;                 //復(fù)位AD9854
  206.     AD9854_RST=0;

  207.         AD9854_WR_Byte(0x1d,0x10);                   //關(guān)閉比較器
  208.         AD9854_WR_Byte(0x1e,CLK_Set);           //設(shè)置系統(tǒng)時(shí)鐘倍頻            
  209.         AD9854_WR_Byte(0x1f,0x00);           //設(shè)置系統(tǒng)為模式0,由外部更新
  210.         AD9854_WR_Byte(0x20,0x60);           //設(shè)置為可調(diào)節(jié)幅度,取消插值補(bǔ)償

  211.         AD9854_UDCLK=1;               //更新AD9854輸出
  212.     AD9854_UDCLK=0;
  213. }

  214. //====================================================================================
  215. //函數(shù)名稱:void Freq_convert(long Freq)
  216. //函數(shù)功能:正弦信號(hào)頻率數(shù)據(jù)轉(zhuǎn)換
  217. //入口參數(shù):Freq   需要轉(zhuǎn)換的頻率,取值從0~SYSCLK/2
  218. //出口參數(shù):無   但是影響全局變量FreqWord[6]的值
  219. //說明:   該算法位多字節(jié)相乘算法,有公式FTW = (Desired Output Frequency × 2N)/SYSCLK
  220. //         得到該算法,其中N=48,Desired Output Frequency 為所需要的頻率,即Freq,SYSCLK
  221. //         為可編程的系統(tǒng)時(shí)鐘,F(xiàn)TW為48Bit的頻率控制字,即FreqWord[6]
  222. //====================================================================================
  223. void Freq_convert(long Freq)   
  224. {
  225.     unsigned long FreqBuf;
  226.     unsigned long Temp=Freq_mult_ulong;                  

  227.         unsigned char Array_Freq[4];                             //將輸入頻率因子分為四個(gè)字節(jié)
  228.         Array_Freq[0]=(unsigned char)Freq;
  229.         Array_Freq[1]=(unsigned char)(Freq>>8);
  230.         Array_Freq[2]=(unsigned char)(Freq>>16);
  231.         Array_Freq[3]=(unsigned char)(Freq>>24);

  232.         FreqBuf=Temp*Array_Freq[0];                  
  233.     FreqWord[0]=FreqBuf;   
  234.     FreqBuf>>=8;

  235.     FreqBuf+=(Temp*Array_Freq[1]);
  236.     FreqWord[1]=FreqBuf;
  237.     FreqBuf>>=8;

  238.     FreqBuf+=(Temp*Array_Freq[2]);
  239.     FreqWord[2]=FreqBuf;
  240.     FreqBuf>>=8;

  241.         FreqBuf+=(Temp*Array_Freq[3]);
  242.     FreqWord[3]=FreqBuf;
  243.     FreqBuf>>=8;

  244.     FreqWord[4]=FreqBuf;
  245.     FreqWord[5]=FreqBuf>>8;                       
  246. }  

  247. //====================================================================================
  248. //函數(shù)名稱:void AD9854_InitFSK(void)
  249. //函數(shù)功能:AD9854的FSK初始化
  250. //入口參數(shù):無
  251. //出口參數(shù):無
  252. //====================================================================================
  253. void AD9854_InitFSK(void)
  254. {
  255.         AD9854_WR=1;                        //將讀、寫控制端口設(shè)為無效
  256.     AD9854_RD=1;
  257.     AD9854_UDCLK=0;
  258.     AD9854_RST=1;                        //復(fù)位AD9854
  259.     AD9854_RST=0;       

  260.         AD9854_WR_Byte(0x1d,0x10);               //關(guān)閉比較器
  261.         AD9854_WR_Byte(0x1e,CLK_Set);           //設(shè)置系統(tǒng)時(shí)鐘倍頻
  262.         AD9854_WR_Byte(0x1f,0x02);               //設(shè)置系統(tǒng)為模式1,由外部更新
  263.         AD9854_WR_Byte(0x20,0x60);              //設(shè)置為可調(diào)節(jié)幅度,取消插值補(bǔ)償

  264.         AD9854_UDCLK=1;                  //更新AD9854輸出
  265.     AD9854_UDCLK=0;
  266. }

  267. //====================================================================================
  268. //函數(shù)名稱:void AD9854_SetFSK(unsigned long Freq1,unsigned long Freq2)
  269. //函數(shù)功能:AD9854的FSK設(shè)置
  270. //入口參數(shù):Freq1   FSK頻率1   
  271. //         Freq2   FSK頻率2
  272. //出口參數(shù):無
  273. //====================================================================================
  274. void AD9854_SetFSK(unsigned long Freq1,unsigned long Freq2)
  275. {
  276.     unsigned char count=6;
  277.         unsigned char Adress1,Adress2;

  278.         const unsigned int Shape=4000;              //幅度設(shè)置. 為12 Bit,取值范圍為(0~4095)
  279.        
  280.         Adress1=0x04;                                 //選擇頻率控制字1地址的初值
  281.         Adress2=0x0a;                                 //選擇頻率控制字2地址的初值
  282.        
  283. ……………………

  284. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
63535281AD9854-msk-for-stm32.zip (125.05 KB, 下載次數(shù): 125)


評(píng)分

參與人數(shù) 2黑幣 +9 收起 理由
1213866 + 5 贊一個(gè)!
soonc + 4 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:366880 發(fā)表于 2018-7-11 11:11 | 只看該作者
很有用
回復(fù)

使用道具 舉報(bào)

板凳
ID:462267 發(fā)表于 2019-1-9 13:57 | 只看該作者
垃圾東西,舍不得把原理圖源文件發(fā)出來,
回復(fù)

使用道具 舉報(bào)

地板
ID:480731 發(fā)表于 2019-3-5 08:39 | 只看該作者
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

5#
ID:505967 發(fā)表于 2019-4-6 21:41 | 只看該作者
很好用
回復(fù)

使用道具 舉報(bào)

6#
ID:586674 發(fā)表于 2019-7-21 08:54 | 只看該作者
感謝分享,收藏
回復(fù)

使用道具 舉報(bào)

7#
ID:882054 發(fā)表于 2021-3-18 10:15 | 只看該作者
很好啊,學(xué)習(xí)到了
回復(fù)

使用道具 舉報(bào)

8#
ID:189724 發(fā)表于 2022-9-13 10:04 | 只看該作者
有些不太清楚,需要下載附件看看,謝謝分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久久久国产越南 | 日韩av福利在线观看 | 国产一区不卡 | 国产精品久久久久一区二区三区 | 欧美精品一区二区三区在线播放 | 亚州精品天堂中文字幕 | 午夜精品一区 | 成人av电影在线 | 视频一二三区 | 国产精品久久久久久久久久免费看 | 欧美精品一区二区三区在线 | 国产一区二区三区网站 | 国产精品久久一区 | 男女羞羞免费视频 | 高清一区二区 | www国产亚洲精品久久网站 | 精品成人一区二区 | www狠狠爱com | 北条麻妃一区二区三区在线视频 | 久久婷婷av | 日本成人片在线观看 | 在线区 | 99久久精品一区二区毛片吞精 | 成年女人免费v片 | 伊人久久一区二区 | 国产精品美女一区二区三区 | 九七午夜剧场福利写真 | 人成在线 | 日韩亚洲视频 | 久久狼人天堂 | 亚洲乱码一区二区 | 国产在线高清 | 美女天天操 | 欧美日韩在线看 | 中文字幕高清 | 亚洲福利片 | 99久久精品免费 | 精品一区二区三区在线观看 | 中文字幕在线一区二区三区 | 日韩在线中文 | 亚洲国产精品99久久久久久久久 |