A. 求一個單片機紅外遙控器控制設計的源程序
程序太長,須仔細研究。
#definemain_GLOBALS
#include<reg51.h>
#include"main.h"
#include"SAA3010.h"
unsignedcharcounter;
unsignedchartemp;
sbitP2_0=0xA0;
sbitP2_1=0xA1;
sbitP2_2=0xA2;
sbitP2_3=0xA3;
voiddecode_init(void)
{
load_code_detected=0;
repeat_code_detected=0;
decode_error=0;
temp1=0;
temp2=0;
temp3=0;
temp4=0;
TH1=0;
TL1=0;
TR1=0;
}
voidmain(void)
{
EX0=1;
IT0=1;
TMOD=0x11;
ET0=1;
TH0=128;
TL0=0;
TR0=1;
P0=0;
TH1=0;
TL1=0;
decode_init();
EA=1;
counter=0;
data_available=0;
while(1)
{
if(data_available==1)
{
if(key_code==01)//display"1"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0xf9;
}
if(key_code==0x02)//display"2"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0xa4;
}
if(key_code==0x03)//display"3"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0xb0;
}
if(key_code==0x04)//display"4"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0x99;
}
if(key_code==0x05)//display"5"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0x92;
}
if(key_code==0x06)//display"6"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0x82;
}
if(key_code==0x07)//display"7"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0xf8;
}
if(key_code==0x08)//display"8"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0x80;
}
if(key_code==0x09)//display"9"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0x90;
}
if(key_code==0x00)//display"0"
{
P2_0=0;//選中四個數碼管
P2_1=0;
P2_2=0;
P2_3=0;
P0=0xc0;
}
data_available=0;
}
}
}
//**********************************************************************************************************************
voidkey_isr(void)interrupt0
{
EX0=0;//立即關閉外部中斷,轉為查詢方式解碼
led=0;//開LED表示收到紅外信號
temp=SAA3010_decode();//解碼
if(temp==1)gotokey_isr_exit;
counter=0;
key_isr_exit:
decode_init();
led=1;
EX0=1;
}
voidTimer0_isr(void)interrupt1
{
counter++;
if(counter>3)
{
if(led==0)led=1;
counter=0;
}
ET0=1;
}
#defineSAA3010_GLOBALS
#include<reg51.h>
#include"SAA3010.h"
#include"main.h"
//===========================================================================================================
//該函數的作用是每調用一次就在temp1-4組成的32bit長度的最低位上移入
//一個0或者1,數據由bitdata確定
voidSAA3010_cycle_data(unsignedcharbitdata)
{
temp4=temp4<<1;
if((temp3&0x80)==1)temp4=temp4|0x01;
elsetemp4=temp4&0xfe;
temp3=temp3<<1;
if((temp2&0x80)==1)temp3=temp3|0x01;
elsetemp3=temp3&0xfe;
temp2=temp2<<1;
if((temp1&0x80)==1)temp2=temp2|0x01;
elsetemp2=temp2&0xfe;
temp1=temp1<<1;
if(bitdata==1)temp1=temp1|0x01;
elsetemp1=temp1&0xfe;
}
//===========================================================================================================
//解碼出錯返回1,對則返回0
unsignedcharSAA3010_decode(void)
{
//-----------------------------------------------------------------------------------------------------------
unsignedcharcount=0;
TR1=1;//啟動計時
while(1)
{
while(ir_receive==0);//等待電平變高,不需要超時監測
TR1=0;//高電平(對發射電路而言)測試結束
high_level_time=TH1*256+TL1;//記錄高電平的數據
//-----------------------------------------------------------------------------------------------------------
TH1=0; TL1=0;TR1=1;//啟動對低電平的測試
//-----------------------------------------------------------------------------------------------------------
//處理低電平
if((high_level_time<750)||(high_level_time>1800))return1;//不是合格的電平
if((high_level_time>750)&&(high_level_time<1000)){SAA3010_cycle_data(0);count+=1;}//移入一個0
if((high_level_time>1500)&&(high_level_time<1800)){SAA3010_cycle_data(0);SAA3010_cycle_data(0);count+=2;}//移入兩個0
while(ir_receive==1)//等待電平變低
{
if(TH1>0x08)break;//高電平超時,正常情況下是測試結束,異常時則是出錯
}
TR1=0;//低電平(對發射電路而言)測試結束
if(TH1>0x08){break;}
low_level_time=TH1*256+TL1;//保存低電平的數據
TH1=0; TL1=0; TR1=1; //為增加計時的准確性,數據的處理都是在計時過程里
//-----------------------------------------------------------------------------------------------------------
//處理高電平
if((low_level_time<750)||(low_level_time>1800))return1;//不是合格的電平
if((low_level_time>750)&&(low_level_time<1000)){SAA3010_cycle_data(1);count+=1;}//移入一個0
if((low_level_time>1500)&&(low_level_time<1800)){SAA3010_cycle_data(1);SAA3010_cycle_data(1);count+=2;}//移入兩個0
}
if(count==26){SAA3010_cycle_data(1);count++;}
if(count!=27)return1;
led=0;
//提取按健信息
key_code=0;
if((temp1>>1)&0x01)key_code=key_code|0x01;
elsekey_code=key_code&0xfe;
if((temp1>>3)&0x01)key_code=key_code|0x02;
elsekey_code=key_code&0xfd;
if((temp1>>5)&0x01)key_code=key_code|0x04;
elsekey_code=key_code&0xfb;
if((temp1>>7)&0x01)key_code=key_code|0x08;
elsekey_code=key_code&0xf7;
if((temp2>>1)&0x01)key_code=key_code|0x10;
elsekey_code=key_code&0xef;
if((temp2>>3)&0x01)key_code=key_code|0x20;
elsekey_code=key_code&0xdf;
//提取系統信息
sys_code=0;
if((temp2>>5)&0x01)sys_code=sys_code|0x01;
elsesys_code=sys_code&0xfe;
if((temp2>>7)&0x01)sys_code=sys_code|0x02;
elsesys_code=sys_code&0xfd;
if((temp3>>1)&0x01)sys_code=sys_code|0x04;
elsesys_code=sys_code&0xfb;
if((temp3>>3)&0x01)sys_code=sys_code|0x08;
elsesys_code=sys_code&0xf7;
if((temp3>>5)&0x01)sys_code=sys_code|0x10;
elsesys_code=sys_code&0xef;
if((temp3>>7)&0x01)sys_code=sys_code|0x20;
elsesys_code=sys_code&0xdf;
data_available=1;
return0;
}
//===========================================================================================================
B. 基於單片機控制遙控器的設計 畢業論文
我可以幫你搞定。想要找我。
C. 急求基於51單片機的學習型多功能紅外遙控器設計方案(代碼和原理圖)要求有多個學習鍵
單片機紅外電視遙控器C51程序代碼單片機程序
//**************************************************************
//名稱:單片機紅外電視遙控器C51程序代碼()
/*--------------------------------------------------------------
描述:
一般紅外電視遙控器的輸出都是用編碼後串列數據對38~40kHz的方波進行
脈沖幅度調制而產生的.當發射器按鍵按下後,即有遙控碼發出,所按的鍵
不同遙控編碼也不同。這種遙控碼具有以下特徵:
採用脈寬調制的串列碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的
組合表示二進制的「0」;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms
的組合表示二進制的「1」。上述「0」和「1」組成的32位二進制碼經38kHz
的載頻進行二次調制,然後再通過紅外發射二極體產生紅外線向空間發射。
一般電視遙控器的遙控編碼是連續的32位二進制碼組,其中前16位為用戶識
別碼,能區別不同的紅外遙控設備,防止不同機種遙控碼互相干擾。後16位
為8位的操作碼和8位的操作反碼,用於核對數據是否接收准確。
根據紅外編碼的格式,發送數據前需要先發送9ms的起始碼和4.5ms的結果碼。
接收方一般使用TL0038一體化紅外線接收器進行接收解碼,當TL0038接收到
38kHz紅外信號時,輸出端輸出低電平,否則為高電平。
所以紅外遙控器發送紅外信號時,參考上面遙控串列數據編碼波形圖,在低
電平處發送38kHz紅外信號,高電平處則不發送紅外信號。
----------------------------------------------------------------*/
//編輯:
//日期:
//****************************************************************
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg51.h> //包括一個51標准內核的頭文件
static bit OP; //紅外發射管的亮滅
static unsigned int count; //延時計數器
static unsigned int endcount; //終止延時計數
static unsigned char flag; //紅外發送標志
char iraddr1; //十六位地址的第一個位元組
char iraddr2; //十六位地址的第二個位元組
void SendIRdata(char p_irdata);
void delay();
//**************************************************************
void main(void)
{
count=0;
flag=0;
OP=0;
P3_4=0;
EA = 1; //允許CPU中斷
TMOD = 0x11; //設定時器0和1為16位模式1
ET0 = 1; //定時器0中斷允許
TH0 = 0xFF;
TL0 = 0xE6; //設定時值0為38K 也就是每隔26us中斷一次
TR0 = 1; //開始計數
iraddr1=3;
iraddr2=252;
do{
delay();
SendIRdata(12);
}
while(1);
}
//**************************************************************
//定時器0中斷處理
void timeint(void) interrupt 1
{
TH0=0xFF;
TL0=0xE6; //設定時值為38K 也就是每隔26us中斷一次
count++;
if (flag==1)
{OP=~OP;}
else
{OP = 0;}
P3_4 = OP;
}
//**************************************************************
void SendIRdata(char p_irdata)
{
int i;
char irdata=p_irdata;
//發送9ms的起始碼
endcount=223;
flag=1;
count=0;
do{}while(count)
//發送4.5ms的結果碼
endcount=117;
flag=0;
count=0;
do{}while(count)
//----------------------發送十六位地址的前八位-------------------
irdata=iraddr1;
for(i=0;i<8;i++)
{
//先發送0.56ms的38KHZ紅外波
endcount=10; //(即編碼中0.56ms的低電平)
flag=1;
count=0;
do{}while(count)
//停止發送紅外信號(即編碼中的高電平)
if(irdata-(irdata/2)*2) //判斷二進制數個位為1還是0
{ endcount=41; //1為寬的高電平
}
else
{ endcount=15; //0為窄的高電平
}
flag=0;
count=0;
do{}while(count)
irdata=irdata>>1;
}
//-----------------------發送十六位地址的後八位-------------------
irdata=iraddr2;
for(i=0;i<8;i++)
{
endcount=10;
flag=1;
count=0;
do{}while(count)
if(irdata-(irdata/2)*2)
{endcount=41;}
else
{endcount=15;}
flag=0;
count=0;
do{}while(count)
irdata=irdata>>1;
}
//-----------------------發送八位數據------------------------------
irdata=p_irdata;
for(i=0;i<8;i++)
{
endcount=10;
flag=1;
count=0;
do{}while(count)
if(irdata-(irdata/2)*2)
{endcount=41;}
else
{ endcount=15;}
flag=0;
count=0;
do{}while(count)
irdata=irdata>>1;
}
//-------------------------發送八位數據的反碼----------------------
irdata=~p_irdata;
for(i=0;i<8;i++)
{
endcount=10;
flag=1;
count=0;
do{}while(count)
if(irdata-(irdata/2)*2)
{endcount=41;}
else
{endcount=15;}
flag=0;
count=0;
do{}while(count)
irdata=irdata>>1;
}
endcount=10;
flag=1;
count=0;
do{}while(count) flag=0;
}
//**************************************************************
void delay()
{
int i,j;
for(i=0;i<400;i++)
{
for(j=0;j<100;j++) { };
}
}
D. 急求《基於單片機控制的紅外線遙控器設計》畢業論文!! 要求含有方案論證。直接發到[email protected]郵
實例是:紅外搖控機器人設計!!
E. 基於單片機的紅外遙控收發系統的設計與實現
低頻信號發生器的設計
摘 要:
直接數字合成(DDS)是一種重要的頻率合成技術,具有解析度高、頻率變換快優點,在雷達及通信等領域有著廣泛的應用前景。文中介紹了一種高性能DDS晶元AD9850的基本原理和工作特點,闡述了如何利用此晶元設計一種頻率在0—50
kHz內變化、相位正交的信號源,給出了AD9850晶元和MCS51單片機的硬體介面和軟體流程。
關鍵詞:直接數字頻率合成 信號源 AD9850晶元
概述:
隨著數字技術的飛速發展,高精度大動態范圍數字/模擬(D,A)轉換器的出現和廣泛應用,用數字控制方法從一個標准參考頻率源產生多個頻率信號的技術,即直接數字合成(DDS)異軍突起。其主要優點有:(1)頻率轉換快:DDS頻率轉換時間短,一般在納秒級;(2)解析度高:大多數DDS可提供的頻率解析度在1 Hz數量級,許多可達0.001 Hz;(3)頻率合成范圍寬;(4)相位雜訊低,信號純度高;(5)可控制相位:DDS可方便地控制輸出信號的相位,在頻率變換時也能保持相位聯系;(6)生成的正弦/餘弦信號正交特性好等。因此,利用DDS技術特別容易產生頻率快速轉換、解析度高、相位可控的信號,這在電子測量、雷達系統、
調頻通信、電子對抗等領域具有十分廣泛的應用前景。
1. 低頻信號發生器的組成
圖2.7為低頻信號發生器組成框圖。它主要包括主振器、電壓放大器、輸出衰減器、功率放大器、阻抗變換器和指示電壓表等。
(1)主振器
RC文氏橋式振盪器具有輸出波形失真小、振幅穩定、頻率調節方便和頻率可調范圍寬等特點,故被普遍應用於低頻信號發生器主振器中。主振器產生與低頻信號發生器頻率一致的低頻正弦信號。
文氏橋式振盪器每個波段的頻率覆蓋系數(即最高頻率與最低頻率之比)為10,因此,要覆蓋1Hz~1MHz的頻率范圍,至少需要五個波段。為了在不分波段的情況下得到很寬的頻率覆蓋范圍,有時採用差頻式低頻振盪器,圖2.8為其組成框圖。假設f2=3.4MHz,f1可調范圍為3.3997MHz~5.1MHz,則振盪器輸出差頻信號頻率范圍為300Hz (3.4MHz-3.3997MHz)~1.7MHz(5.1 MHz-3.4 MHz)。
差頻式振盪器的缺點是對兩個振盪器的頻率穩定性要求很高,兩個振盪器應遠離整流管、功率管等發熱元件,彼此分開,並良好屏蔽。
(2)電壓放大器
電壓放大器兼有緩沖與電壓放大的作用。緩沖是為了使後級電路不影響主振器的工作,一般採用射極跟隨器或運放組成的電壓跟隨器。放大是為了使信號發生器的輸出電壓達到預定技術指標。為了使主振輸出調節電位器的阻值變化不影響電壓放大倍數,要求電壓放大器的輸入阻抗較高。為了在調節輸出衰減器時,不影響電壓放大器,要求電壓放大器的輸出阻抗低,有一定的帶負載能力。為了適應信號發生器寬頻帶等的要求,電壓放大器應具有寬的頻帶、小的諧波失真和穩定的工作性能。
(3)輸出衰減器
輸出衰減器用於改變信號發生器的輸出電壓或功率,分為連續調節和步進調節。連續調節由電位器實現,步進調節由步進衰減器實現。圖2.9為常用輸出衰減器原理圖,圖中電位器RP為連續調節器(細調),電阻R1~R8與開關S構成步進衰減器,開關S為步進調節器(粗調)。調節RP或變換開關S的擋
(4) 功率放大器及阻抗變換器功率放大器用來對衰減器輸出的電壓信號進行功率放大,使信號發生器達到額定功率輸出。為了能實現與不同負載匹配,功率放大器之後與阻抗變換器相接,這樣可以得到失真小的波形和最大的功率輸出。
阻抗變換器只有在要求功率輸出時才使用,電壓輸出時只需衰減器。阻抗變換器即匹配輸出變壓器,輸出頻率為5Hz~5kHz時使用低頻匹配變壓器,以減少低頻損耗,輸出頻率為5kHz~1MHz時使用高頻匹配變壓器。輸出阻抗利用波段開關改變輸出變壓器次級圈數來改變。
2. 工作原理及結構
函數信號發生器產生信號的方法有三種:一種是由施密特電路產生方波,然後經變換得到三角波和正弦波形;第二種是先產生正弦波再得到方波和三角波;第三種是先產生三角波再變換為方波和正弦波。在此主要介紹第一種方法,即脈沖式函數信號發生器
3. 低頻信號發生器的主要工作特性
目前,低頻信號發生器的主要工作特性如下:
①頻率范圍 一般為20Hz~1MHz,且連續可調。
②頻率准確度 ±(1~3)%。
③頻率穩定度 一般為(0.1~0.4)%/小時。
④輸出電壓 0~10V連續可調。
⑤輸出功率 0.5~5W連續可調。
⑥非線性失真范圍 (0.1~1)%。
⑦輸出阻抗 50Ω、75Ω、150Ω、600Ω、5kΩ等幾種。
⑧輸出形式 平衡輸出與不平衡輸出。
4. 低頻信號發生器的使用
低頻信號發生器型號很多,但它們的使用方法基本類似
(1)了解面板結構
使用儀器之前,應結合面板文字元號及技術說明書對各開關旋鈕的功能及使用方法進行耐心細致的分析了解,切忌盲目猜測。信號發生器面板上有關部分通常按其功能分區布置,一般包括:波形選擇開關、輸出頻率調諧部分(包括波段、粗調、微調等)、幅度調節旋鈕(包括粗調、細調)、阻抗變換開關、指示電壓表及其量程選擇、電源開關及電源指示、輸出接線柱等。
5. AD9850 晶元介紹
AD9850是AD公司生產的最高時鍾為125 MHz、採用先進的CMOS技術的直接頻率合成器,主要由可編程DDS系統、高性能模數變換器(DAC)和高速比較器3部分構成,能實現全數字編程式控制制的頻率合成,並具有時鍾產生功能。AD9850的DDS系統包括相位累加器和正弦查找表,其中相位累加器由一個加法器和一個32位相位寄存器組成,相位寄存器的輸出與外部相位控制字(5位)相加後作為正弦查找表的地址。正弦查找表實際上是一個相位/幅度轉換表,它包含一個正弦波周期的數字幅度信息,每一個地址對應正弦波中0。一360。范圍的一個相位點。查找表把輸入地址的相位信息映射成正弦波幅度信號,然後驅動10bit的DA變換器,輸出2個互補的電流,其幅度可通過外接電阻進行調節。AD9850還包括—個高速比較器,將DA變換器的輸出經外部低通濾波器後接到此比較器上即可產生一個抖動很小的方波,這使得AD9850可以方便地用作時鍾發生器。AD9850包含40位頻率/相位控制字,可通過並行或串列方式送人器件:並行方式指連續輸入5次,每次同時輸入8位(1個位元組);串列方式則是在—個管腳完成40位串列數據流的輸入。這40位控制字中有32位用於頻率控制,5位用於相位控制,1位用於掉電(powerdown)控制,2位用於選擇工作方式。在並行輸入方式下,通過8位匯流排D0一D7將外部控制字輸入到寄存器,在W—CLK(字輸入時鍾)的上升沿裝入第一個位元組,並把指針指向下一個輸入寄存器,連續5個W—CLK的上升沿讀入5個位元組數據到輸入寄存器後,W—CLK的邊沿就不再起作用。然後在rQ—UD(頻率更新時鍾)上升沿到來時將這40位數據從輸入寄存器裝入到頻率/相位寄存器,這時DDS輸出頻率和相位更新一次,同時把地址指針復位到第一個輸入寄存器以等待下一次的頻率/相位控制字輸入。
6 硬體設計
要產生兩路相位正交、頻率可由外部控制的正弦信號,必須通過單片機編程來完成外部輸入的頻率數據(3個位元組)與DDS38晶元(AD9850)內部頻率相位控制字(5個位元組)間的轉換。單片機8051與AD9850晶元的介面既可採用並行方式,也可採用串列方式,本設計採用的是8位並行介面方式。由於需要產生VQ兩路正弦信號,因此使用了2片AD9850晶元,這兩路的頻率相同,相位差90。。單片機8051的P1口(P1.0一P1.7腳)用作外部控制字輸入,通過中斷1和中斷0讀入外部頻率數據,連續讀3次,對應頻率值的二進制數;單片機的P0口(P0.0一P0.7腳)用作頻率/相位控制字輸出,通過8位緩沖器74LS244作數據緩沖後加到2片AD9850晶元的8位控制字輸入端(DO—D7腳),同時產生相應的DDS時序控制信號(一路復位reset1、二路復位reset2、一路字輸入時鍾W1、二路字輸入時鍾W2、一路頻率更新時鍾FU1、二路頻率更新時鍾FU2)加到AD9850晶元的對應管腳。AD9850的外部參考時鍾信號(dk4Om)頻率為40 MHz,由晶體振盪器產生。單片機8051的復位信號(reset)、中斷0和中斷1控制信號(intO、int1)由外部控制系統給出,從而實現兩路相位正交、頻率可控的正弦信號。該DDS信號源的硬體介面電路如圖1所
圖1 DDS信號源硬體介面電路
7. 軟體控制
此程序的功能就是要將外部輸入的頻率數據按照一定協議和演算法變換成DDS晶元(AD9850)所能接受的格式,並送出相應的頻率相位控制信號,從而使AD9850能產生兩路相位正交、頻率可控的正弦信號。下面給出程序設計輸入、輸出、變換演算法。
(1) 輸入
數據同步:上升沿時讀人1個位元組的頻率數據,作為intl中斷輸入;
數據寫入:上升沿時頻率更新1次,作為intO中斷輸入;
8位數據:輸入的頻率位元組。分3次輸入,如圖2所示。
(2)輸出
單片機控製程序將產生下述輸出信號加到DDS晶元(AD9850)的對應腳:
reset1:一路DDS復位(一路AD9850第22腳);
reset7.:二路DDS復位(-路AD9850第22腳);
w1:一路數據同步(一路AD9850第7腳);
w2:二路數據同步(二路AD9850第7腳);
ful:一路數據寫入(一路AD9850第8腳);
fu2:二路數據寫入(二路AD9850第8腳);
P0口(P0.0一P0.7):8位頻率/相位數據輸出(AD9850的DO—D7腳)。
(3)演算法:程序中單片機輸入頻率數據F(3個位元組)與輸出頻
率數據△P(4個位元組)間的變換演算法見式(2)
其中CLKIN為外部參考時鍾(40 M Hz)。
(4)程序流程:整個程序由主程序、中斷0子程序、中斷1子
程序三部分構成。流程圖略。
8 結論
對設計的信號源在不同頻率下的輸出波形進行了測試,結果完全能達到所要求的性能指標。而且AD9850工作可靠,對參考時鍾波形要求不高,輸出信號穩定且信噪比高,是一種性價比很高的晶元,正廣泛應用於電子測量、跳頻通信、雷達系統等領域。
9 致謝
通過對低頻信號發生器的設計,我深刻認識到了「理論聯系實際」的這句話的重要性與真實性。而且通過對此課程的設計,我不但知道了以前不知道的理論知識,而且也鞏固了以前知道的知識。最重要的是在實踐中理解了書本上的知識,明白了學以致用的真諦。也明白老師為什麼要求我們做好這個課程設計的原因。他是為了教會我們如何運用所學的知識去解決實際的問題,提高我們的動手能力。在整個設計到電路的焊接以及調試過程中,我個人感覺調試部分是最難的,因為你理論計算的值在實際當中並不一定是最佳參數,我們必須通過觀察效果來改變參數的數值以期達到最好。而參數的調試是一個經驗的積累過程,沒有經驗是不可能在短時間內將其完成的,而這個可能也是老師要求我們加以提高的一個重要方面吧
參考文獻:
【1】高衛東.等.AD9850 DDS晶元信號源的研製【J】.實驗室研究與探
索,2000,(5).
【2】石雄.等.DDS晶元AD9850的工作原理及其與單片機的介面【J】.國
外電子元器件,2001。(5).
(上