周亚飞波形发生器 (3)
江西工业工程职业技术学院
电气091
周亚飞
目 录
1. 系统设计 .................................................................................................................................... 2
1.2 总体设计
............................................................................................................... 3
1.2.1 功能分解及设计思路 ......................................................................................... 3
1.2.2 方案论证与比较 ................................................................................................. 3
1.2.3 系统各模块的最终选择方案 ............................................................................. 4
1.3 系统功能说明书(用户使用说明书) ........................................................................... 4
1.3.2 按键操作说明 ....................................................................................................... 5 2. 单元电路设计 ........................................................................................................................... 5
2.1 每部分模块的电路设计 ................................................................................................. 5
2.1.1 电源供电电路 ....................................................................................................... 5
2.1.2 单片机最小系统 ................................................................................................... 5
2.1.3 输入与输出 ........................................................................................................... 6
2.1.4 DDS9850模块电路 ................................................................................................ 7 3. 软件设计 .................................................................................................................................... 7
3.1 -----子程序 ........................................................................................................... 8
3.2 系统主程序流程图 ................................................................................................... 9
3.3 按键扫描流程图 ................................................................................................... 10
3.4 LCD液晶显示流程图 ............................................................................................ 10 4. 系统测试 ................................................................................................................................. 11
4.1 测试仪器 ........................................................................................................................ 11
4.2 指标测试 ....................................................................................................................... 11
4.2.1 各部分测试的指标 ......................................................................................... 11
4.2.2 系统实现的功能 ................................................................................................. 11 5. 结论 ......................................................................................................................................... 13
附录 ................................................................................................................................................. 14
附录 1 程序代码 ................................................................................................................. 14
附录 2 硬件原理图 ............................................................................................................... 25
附录 3 PCB图(部分) ...................................................................................................... 25
附录 4 测试效果 ................................................................................................................. 27
1
摘要:本文介绍了一个波形发生器控制系统的解决方案。本方案以ATMEL公司的MCU芯片AT89S52为核心,加以简单的外围电路,即可实现2011年全省大学生电子设计竞赛试题所要求的大部分计数参数。S52单片机在工业上的应用比较广泛,其可靠性、抗干扰能力和温度稳定性都比较强,性价比高。这是一个低成本的波形发生器控制解决方案,除了选用廉价的单片机芯片,还采用了DDS芯片,大大降低了系统设计难度。整个系统的电路简单,结构紧凑。经过检测,该系统能长时间稳定工作,满足设计指标要求。
关键词:DDS、单片机、LCD1602
1. 系统设计
1(1 设计要求
1、任务(来自原题)
设计并制作一台信号发生器,使之能产生正弦波、方波。
2、基本要求
1) 信号发生器能产生正弦波、方波。
2) 输出信号频率在100Hz,100kHz范围内可调。
3) 在1k,负载条件下,输出正弦波信号的电压峰-峰值V在0,5V范围opp
内可调。
-44) 输出信号波形无明显失真;频率稳定度:10
5) 可实时显示输出信号的类型、幅度、频率和频率步进值。 3、发挥部分
(1)将输出信号频率范围扩展为1Hz,1MHz,输出信号频率步进间隔最小
为1Hz;输出信号频率值可通过键盘进行设置。
(2)能产生双路信号,双路信号间相位可调。
(3)在50,负载条件下,输出正弦波信号的电压峰-峰值V在0,5V范围opp
内可调,调节步进间隔为0.1V,输出信号的电压值可通过键盘进行设
置。
(4)其他。
2
1.2 总体设计方案
1.2.1 功能分解及设计思路
本波形发生器系统的设计方案要实现的主要功能主要分解为以下几个方面:
一是能产生正弦波和方波输出。
的放大:在1k,负载条件下,输出正弦波信号的电压峰-峰值Vopp在二是实现波形幅值
0,5V范围内可调;
三是液晶显示模块:可实时显示输出信号的类型、幅度、频率和频率步进值;
四是将输出信号频率范围扩展为1Hz,10MHz,输出信号频率步进间隔最小为1Hz;输出信号频率值可通过键盘进行设置;
五是本方案还可通过通过键盘设置,使AD9850进入睡眠状态或从睡眠状态唤醒。
以上功能的实现,都是以S52为核心,在单片机系统实现的输入输出和显示功能的基础上,通过单片机给AD8950发送命令,使之产生波形,加上一定的外围电路得以实现。针对以上的五个功能,以下分别叙述之。
1.2.2 方案论证与比较
1.2.2.1 正弦波和方波的产生
方案一:用分立元件组成函数发生器:通常是单信号发生器且频率不高,其工作不很稳定,不易调试。
方案二:用集成芯片的信号发生器:可达到较高的频率和产生多种波形信号,但电路较为复杂且不易调试。
方案三:利用专用直接数字合成,,,芯片的信号发生器:能产生正弦和方波波形并达到很高的频率,且易于改变输出。
基于上述
,拟选择方案三。
1.2.2.2 波形幅值的放大
方案一:采用分立元件构成高频放大电路。
优点是成本较小。
缺点是不方便进行数码控制和调试。
方案二:采用宽频高速集成运放。
本系统采用方案二。
1.2.2.3三是液晶显示模块:
3
实时显示输出信号的类型、频率和频率步进值。
方案一:采用数码管显示,缺点:显示信息有限,硬件电路较复杂。
方案二:采用液晶显示模块,液晶显示的内容丰富,编程方便,硬件电路简单。
本系统采用方案二。
1.2.2.4四是将输出信号频率范围扩展为1Hz,10MHz。
题目要求输出信号频率范围扩展为1Hz,1MHz,本系统输出信号频率范围为1Hz,10MHz,远远超过题目要求,并且可以有七种步进模式可供选择,方便设置频率。
是可以通过键盘设置频率 1.2.2.5五
方案一:可以通过单键设置每位数字,缺点是按键次数较多。
方案二:采用矩阵键盘,每位数字按键一次就可以设置完成,按键次数较少。
本系统采用方案二。
在未设置频率状态下,按下0~9任意键,可使AD9850进入睡眠状态,再次按下0~9任意键并可唤醒AD9850。
1.2.3 系统各模块的最终选择方案
1.3 系统功能说明书(用户使用说明书)
4
1.3.2 按键操作说明
, 0~9键用于设置频率与AD9850进入休眠和唤醒之间切换。 , 步进模式键:按模式选择键#时,可以循环设置七种步进模式,分别为
1HZ,10HZ,100HZ,1KHZ,10KHZ,100KHZ,1MHZ。
, 步进加按键:按步进加键C时,输出频率以步进模式加。
键:按步进加键D时,输出频率以步进模式减。 , 步进减按
, 相位加调整按键:按相位加调整键A时,输出频率以11.25HZ的步进加
0调整相位,最大调整相位为360。
, 相位加调整按键:按相位加调整键B时,输出频率以11.25HZ的步进减
调整相位。
, 频率设置按键:按频率设置键*时,液晶显示频率闪烁时,可以通过按
0~9键设置频率,再次按*,频率设置完成。
2. 单元电路设计
2.1 每部分模块的电路设计
2.1.1 电源供电电路
BRIDGE1F1T11250V/3AD1-D4U1U2L7812+12VDCL7805+5VDC421313VinVoutVinVout250VAC/1000mAC1C2C3C4++GNDGND104/50VC522220uF/16V104/50V104/50V470uF/25V3
采用变压器与三端稳压器相结合
2.1.2 单片机最小系统
5
VCC
J8
2U1J21P00391P10P10P00P10/T1插座P01382P11P11+5VP01P11/T2P02373P12P12P02P123P03364P13P13P03P134P04355P14P14P04P145P05346P15P15P05P156P06337P16P16P06P167P07328P17P17VCCP07P178P20P20219ReSetP1P20RESETP21P2122P21P22P222310P30P30P22RXD1P23P232411P31P31P23TXD2P24P242512P32P32复位按钮P24INT03P25P252613P33P33S1P25INT14C1P26P262714P34P34P26T054.7uP27P272815P35P35P27T1616P36P36ReSetWR7R14017P37P37VCCRD8晶振10K3119X1J4VCCEA/VPX1
ALE3018X211.0592MHzALE/PX2
2920PSENGNDC3C220p20pAT89S51
其核心芯片是AT89S52。
2.1.3 输入与输出
键盘:
key23S1S5S9S13J1key101key22key112S2S6S10S14key123key134key21key205S3S7S11S15key216key227key20key238S4S8S12S16
键盘接口插座key10key11key12key13
采用4*4键盘输入口,节省了IO口资源。
LCD显示:
6
J2液晶1602
123456VCCVCCP207P218P229R1P0010P01111KP0212P0313P0414P05 15P0616P072.1.4 DDS9850模块电路
3. 软件设计
软件采用C语言编写,可移植性和可读性强。
软件编写体现了模块化的任务驱动方式。代码尽量符合变量定义
。
7
3.1 -----子程序
本系统包含以下子程序
//键盘处理------------------------------ void KeyboardScan(void);//键盘扫描函数
void KeyboardOperate(uchar KeyNum);//按键处理函数
//ad9850控制命令--------------------------- Calculate_Control_Word(long uint Frequency_Out)//获取9850控制字
Send_Control_Word(long uint ConTrol_Word)//向AD9850送入频率控制字; /**************************************************
LCD控制子程序
****************************************************/
void WriteDataLcd(unsigned char wdata)//向1602液晶写入数据;
void WriteCommandLcd(unsigned char wdata)//向1602液晶写入命令;
//LCD初始化
void lcd_init(void)
8
3.2 系统主程序流程图
开始
变量初始化设置
N
有键按下
键盘处理
发送命令至DDS
更新显示
9
3.3 按键扫描流程图
开始
N 有键按下
Y
读取键值
返回
3.4 LCD液晶显示流程图
开始
更新频率
显示频率
返回
10
4. 系统测试
4.1 测试仪器
数字示波器
功率计
万用
直流电源等
4.2 指标测试
4.2.1 各部分测试的指标
4.2.2 系统实现的功能
1(基本要求
序号 功能
1 信号发生器能产生正弦波、方波。
2 输出信号频率在100Hz,10MHz范围内可调。
在1k,负载条件下,输出正弦波信号的电压峰-峰值Vopp
3
在0,5V范围内可调。
-44 输出信号波形无明显失真;频率稳定度:10。
5 可实时显示输出信号的类型、幅度、频率和频率步进值。
2(发挥部分
序号 功能
将输出信号频率范围扩展为1Hz,1MHz,输出信号频率
1 步进间隔最小为1Hz;输出信号频率值可通过键盘进行
设置(本方案频率可调范围为1,10MHz。
11
2 能产生双路信号,双路信号间相位可调。
在50,负载条件下,输出正弦波信号的电压峰-峰值Vopp
3
在0,5V范围内可调,调节步进间隔为0.1V。
3(特色功能
序号 功能
1 输出信号频率在1Hz,10MHz范围内任意可调。
2 输出的频率值可通过键盘0~9键输入。
3 通过键盘0~9任意键可设置AD9850休眠或唤醒。
12
5. 结论
本方案的系统设计符合江西省2011年大学生电子设计自选试题(第四题)的要求,经过团队合作和三天四夜的苦战,本系统再经过改良以后,可以作为实际波形发生器使用,是一个低成本,高可靠性的解决方案。经过检测,该系统能长时间稳定工作,基本满足设计指标要求。
参考文献
[1] 阎石. 数字电子技术基础(第四版). 北京: 高等教育出版社,1997年. [2] 廖世海,单片机原理与应用. 机械工业出版社,2010年.
[3] DDS9850数据手册
[4] 1602液晶数据手册
[5] AT89S52数据手册
13
附录
附录 1 程序代码
/**************************************************************
* 程序主要功能:波形发生器控制系统 * * 完成时间:2011.5.30 * * 作者: * **************************************************************/
/***************头文件包含***********************************/ /*
1 、可通过按键实现频率输出步进加减;步进频率范围1~10MHz;
2、步进值有七种选择:1Hz、10Hz、100Hz、1000Hz、10KHz、100KHz、1000KHz
3、采用1602液晶显示屏,可以实时显示输出频率值,显示当前步进值,显示频率的单位都为Hz。
*/
//基本功能全部实现;
#include
//调用头文件(单片机内部的寄存器定义)
#include
#include "AD9850.h"
#include "LCD1602.h"
#include "key.h"
/******本段为硬件I/O口定义********/
sbit LCD_E = P3^2;//定义1602液晶的使能管脚;
sbit LCD_RW = P3^1;//定义1602液晶的读写管脚;
sbit LCD_RS = P3^0;//定义1602液晶的选通管脚;
sbit reset = P3^4; //ad9850的复位引脚;
14
sbit w_clk = P3^7; //ad9850的时钟引脚;
sbit fqud = P3^6; //ad9850的输出更新引脚;
double Con_Word_1 = 0x00;//定义了一个浮点变量,用于计算控制字; double Con_Word_2 = 0x00;//定义了一个浮点变量,用于计算控制字; long uint ConTrol_Word = 0x00;//用来存储控制字的数值; long uint Frequency_Out=2000;//设置的频率值;
extern uchar key;//键盘子程序处理过程中使用的中间变量; //显示字符子程序;x、y是坐标;x:从左边数起第几个字符:y:是第一行还是第二行;
void Calculate_Control_Word(long uint Frequency_Out);
void Send_Control_Word(long uint ConTrol_Word);//向AD9850送入频率控制字;
unsigned char code LcdBuf2[]= {"Step:"};
unsigned char code LcdBuf3[]= {"Phase: "};
extern uchar DISP_BUF[8];//键盘子程序处理过程中使用的中间变量;
scan_KEY(void) //键值处理子程序
{
uchar key = 0;
key = P1;
key = key & 0xff;
switch(key)
{
case 0xb0:
keyzhi = 1 ;break;
case 0xa8:
keyzhi = 2 ;break;
case 0x98:
keyzhi = 3 ;break;
case 0x70:
keyzhi = 4 ;break;
case 0x68:
keyzhi = 5 ;break;
case 0x58:
keyzhi = 6 ;break;
case 0x07:
keyzhi = 6 ;break;
case 0x58;
keyzhi = 0x08 ;break;
case 0x77:
keyzhi = 0x09 ;break;
case 0x0x7c:
15
keyzhi = 0x0a;break;
case 0x5e:
keyzhi = 0x0b ;break;
case 0x79:
keyzhi = 0x0c ;break;
case 0x68:
keyzhi = 0x0d ;break;
case 0x71:
keyzhi =0x0e ;break;
case 0x40:
keyzhi =0x0f ;break;
default:
keyzhi=0;
}
return(keyzhi);
}
*/
/*keychuli()//键盘扫描子程序
{
P1_2 = 0x01;P1_0 = 0x01;
P1_1 = 0x01;P1_4 = 0x00;P1_5 = 0x00;
delay(100);
if((P1_2&P1_1&P1_0) == 0x00)
{
if((P1_2&P1_1&P1_0) == 0x00)
{
P1_4 = 0x00;P1_5 = 0x01;
dat = scan_KEY();
if(dat == 0x00)
{
P1_4 = 0x01;P1_5 = 0x00;
dat = scan_KEY();
}
}
else
{
dat = 0x00;
goto down;//无键按下
16
}
}
down:return(dat);
}
*/
/*void Calculate_Control_Word(long uint Frequency_Out)
{
Con_Word_1 = Frequency_Out * 85;
Con_Word_2 = Frequency_Out *0.88423027547;//50MHz计算
//首先有源晶体是50MHz的,然后用2的32次方减1,再除以50MHz得到的;
Con_Word_2 = Con_Word_2 + 0.5;//小数部分四舍五入;
Con_Word_1 = Con_Word_1 + Con_Word_2;
//根据设定的频率以浮点形式计算控制字
ConTrol_Word = Con_Word_1 / 1;//将控制字换算成整数形式
}*/
/*void Send_Control_Word(long uint ConTrol_Word)//向AD9850送入频率控制字;
{
long uint ConTrol_Word_Temporary ;
uchar data_word ;
w_clk = 0x00; //根据时序图
fqud = 0x00; //根据时序图
//data_word = 0x00; //设置AD9851相位、掉电等相关控制字
data_word = 0x00; //设置AD9850相位、掉电等相关控制字
//P2 = data_word;
delay(200);
w_clk=1;
delay(200);
w_clk=0;
ConTrol_Word_Temporary = ConTrol_Word;
ConTrol_Word = ConTrol_Word >> 24;
data_word = ConTrol_Word % 256;//取出W1,频率控制字中的最高字节;
//P2 = data_word;
delay(200);
17
w_clk=1;
delay(200);
w_clk=0;
ConTrol_Word = ConTrol_Word_Temporary;
ConTrol_Word = ConTrol_Word >> 16;
data_word = ConTrol_Word % 256;//取出W2,频率控制字中的次高字节;
//P2 = data_word;
delay(200);
w_clk=1;
delay(200);
w_clk=0;
ConTrol_Word = ConTrol_Word_Temporary;
ConTrol_Word = ConTrol_Word >> 8;
data_word = ConTrol_Word % 256;//取出W3,频率控制字中的第三字节;
//P2 = data_word;
delay(200);
w_clk=1;
delay(200);
w_clk=0;
ConTrol_Word = ConTrol_Word_Temporary;
data_word = ConTrol_Word % 256;//取出W4,频率控制字中的最后一个字节;
//P2 = data_word;
delay(200);
w_clk=1;
delay(200);
w_clk=0; //根据时序图
fqud=1; //根据时序图
}
*/
/************主程序**************/
main()
{ char Phase_temp = 0x00,Phase=0;
unsigned char i = 0x00;
uint Step_Bian_Liang = 0x00;//步进变量;
unsigned char Fre_Set_Flag = 0x00,Cursor_Position=0x85;
unsigned char Power_Down_Flag = 0x00;
uchar Disp_Data_Postion=0;
long uint Step_Data = 1;//默认为1Hz;
18
long unsigned int Step_Data_Xian_Shi = 0x00;
lcd_init(); //初始化子程序;
//P2_6=1;
//reset = 1; //复位AD9850;
ad9850_rest = 1;
delay(1000);
// reset = 0; //使AD9850进入正常的工作状态;
ad9850_rest = 0;
ad9850_wr_serial_flash(0x00,Frequency_Out);
Frequency_Out = 2000;//开机默认的频率输出值为0;
Calculate_Control_Word(Frequency_Out);//根据设置的频率换算成将要送入AD9850中的整
数值;
Send_Control_Word(ConTrol_Word); //向AD9850送出频率控制字;
display_data(); //显示数据;
display_string(0,1,LcdBuf2); //显示第二行,从第0个位置开始;
display_string(9,1,"Hz ");//显示Hz;
while(1)
{
keychuli();//键处理子程序
if(key==0x0A)
{
key = DEFAULT;
Phase++;
if(Phase>PhaseMax)
Phase=0;
display_string(0,1,LcdBuf3);//显示Phase;
WriteCommandLcd(0xc6);//从第二行第六个开始显示数据;
WriteDataLcd(0x30+(Phase/10));//送出显示数据;
WriteDataLcd(0x30+(Phase%10));//送出显示数据;
Cursor_Position=0x85;//取消闪烁
Disp_Data_Postion=0; //显示位置复位
Phase_temp=Phase<<3;
ad9850_wr_serial_flash(Phase_temp,Frequency_Out);
}
if(key==0x0B)
{
Cursor_Position=0x85;//取消闪烁
Disp_Data_Postion=0; //显示位置复位
19
key = DEFAULT;
Phase--;
if(Phase 40000000)
{
Frequency_Out = Frequency_Out - Step_Data;
}
// Light =~Light;
display_data();
/**/
/ Calculate_Control_Word(Frequency_Out);//根据设置的频率换算成将要送入AD9850中的整数值;
// Send_Control_Word(ConTrol_Word); //向AD9850送出频率控制字;
}
if(key == 0X0D)//步进减
{
key = DEFAULT;delay(5000);
WriteCommandLcd(0x0c);//取消闪烁
20
Cursor_Position=0x85;
Disp_Data_Postion=0; //显示位置复位
if(Frequency_Out >= Step_Data)
{
Frequency_Out = Frequency_Out - Step_Data;
}
//Light =~Light;
display_data();
Calculate_Control_Word(Frequency_Out);//根据设置的频率换算成将要送入AD9850中的整数值;
Send_Control_Word(ConTrol_Word); //向AD9850送出频率控制字;
}
if(key == 0x0E)//步进选择;这里有七种选择
{
WriteCommandLcd(0x0c);
Cursor_Position=0x85; //取消闪烁
Disp_Data_Postion=0; //显示位置复位
key = DEFAULT;delay(5000);//Light =~Light;
Step_Bian_Liang++;
Step_Bian_Liang = Step_Bian_Liang%7;
if(Step_Bian_Liang == 0x00)
{
Step_Data = 1;//步进10;改成1
}
if(Step_Bian_Liang == 0x01)
{
Step_Data = 10;
}
if(Step_Bian_Liang == 0x02)
{
Step_Data = 100;
}
if(Step_Bian_Liang == 0x03)
{
Step_Data = 1000;
}
if(Step_Bian_Liang == 0x04)
{
21
Step_Data = 10000;
}
if(Step_Bian_Liang == 0x05)
{
Step_Data = 100000;
}
if(Step_Bian_Liang == 0x06)
{
Step_Data = 1000000;
}
display_string(0,1,LcdBuf2); //显示第二行,从第0个位置开始;
if(Step_Data<=1000)
{
WriteCommandLcd(0xc5);//参考上面类似的部分
WriteDataLcd(0x30+(Step_Data/1000));
WriteDataLcd(0x30+(Step_Data/100)%10);
WriteDataLcd(0x30+(Step_Data/10)%10);
WriteDataLcd(0x30+(Step_Data%10));
display_string(9,1,"Hz ");
// WriteDataLcd(0x30+(Phase/10));//送出显示数据;
// WriteDataLcd(0x30+(Phase%10));//送出显示数据;
}
else
{
Step_Data_Xian_Shi = Step_Data/1000;
WriteCommandLcd(0xc5);//参考上面类似的部分
WriteDataLcd(0x30+(Step_Data_Xian_Shi/1000));
WriteDataLcd(0x30+(Step_Data_Xian_Shi/100)%10);
WriteDataLcd(0x30+(Step_Data_Xian_Shi/10)%10);
WriteDataLcd(0x30+(Step_Data_Xian_Shi%10));
display_string(9,1,"kHz");
// WriteDataLcd(0x30+(Phase/10));//送出显示数据;
// WriteDataLcd(0x30+(Phase%10));//送出显示数据;
}
}
if(key < 0x0A)//设置频率
{
if(Fre_Set_Flag)
{
if(Disp_Data_Postion>7)
{
Disp_Data_Postion=0;
22
}
else
{
DISP_BUF[7-Disp_Data_Postion]=key;
WriteCommandLcd(Cursor_Position);//显示数值的话,用其真实的地址,如0x83等,
Cursor_Position++;
Disp_Data_Postion++;
}
WriteDataLcd(0x30+key); //如果要显示字符的话,暂时用x、y坐标的方式
if(Cursor_Position==0x8D)
{
Fre_Set_Flag=0;
WriteCommandLcd(0x0c);//取消闪烁
Cursor_Position=0x85;
Disp_Data_Postion=0;
Calculate_Control_Word(Frequency_Out);//根据设置的频率换算成将要送入AD9850中的整数值;
Send_Control_Word(ConTrol_Word); //向AD9850送出频率控制字;
}
}
else
{ Power_Down_Flag=~Power_Down_Flag;
if(Power_Down_Flag!=0)
ad9850_wr_serial_flash(0x04,Frequency_Out);//进入休眠状态
else
ad9850_wr_serial_flash(Phase<<3,Frequency_Out);
}
key=DEFAULT;
}
if(key == 0x0F)//设置频率开始\结束
{
key = DEFAULT;
Fre_Set_Flag=~Fre_Set_Flag;
if(Fre_Set_Flag)
{
WriteCommandLcd(Cursor_Position);//显示数值的话,用其真实的地址,如0x83等,
WriteCommandLcd(0x0f); //光标闪烁
//Cursor_Position++;
23
if(Cursor_Position==0x8D)
{
Cursor_Position=0x85;
WriteCommandLcd(0x0c);//取消闪烁
ad9850_rest= 1; //复位AD9850;
delay(100);
Calculate_Control_Word(Frequency_Out);//根据设置的频率换算成将要送入AD9850中的整数值;
Send_Control_Word(ConTrol_Word); //向AD9850送出频率控制字;
}
}
else
{
float temp=0;
WriteCommandLcd(0x0c);//取消闪烁
Cursor_Position=0x85;
Frequency_Out=0;
Disp_Data_Postion=0;
for(Disp_Data_Postion=0;Disp_Data_Postion<8;Disp_Data_Postion++)
{
if(DISP_BUF[Disp_Data_Postion]==0)
temp=pow(10,Disp_Data_Postion);
else
temp=((unsigned long)DISP_BUF[Disp_Data_Postion])*pow(10,Disp_Data_Postion);
temp=ceil(temp);
Frequency_Out=Frequency_Out+temp;
if(Frequency_Out>100000000)
Frequency_Out=100000000;
}
Disp_Data_Postion=0;
Calculate_Control_Word(Frequency_Out);//根据设置的频率换算成将要送入AD9850中的整数值;
Send_Control_Word(ConTrol_Word); //向AD9850送出频率控制字;
}
}
}
}
24
附录 2 硬件原理图
J5液晶
12345VCCJ2J16P10P10P00VCCVCC139P2071P10/TP001J8P11P11238P01P2182P11/TP012P12P12337P02P22923P12P023P13P13436P03R2P001014P13P034P14P14535P04P01115P14P045+5V插座P15P15634P051KP02126P15P056P16P16733P06P03137P16P067P0VCCP17P17832P07P04148P17P078U1P0515P1ReSet921P20P20P0616RESETP201AT89S5222P21P21J6P072P21P30P301023P22P22J31RXDP22312P31P311124P23P23P342TXDP23434P32P321225P24P24P37复位按钮563INT0P245C1S1P33P331326P25P25P364INT1P256784.7uP34P341427P26P26P3557910T0P26P35P351528P27P276T1P278VCC1112ReSetP36P36167WR1314P37P3717408RDVCCP2晶振IN10KR1J4X11931X1EA/VPVCC11.0592MHzX21830ALEX2ALE/PJ72029OUTGNDPSENC2C320p20p1234567
附录 3 PCB图(部分)
25
26
附录 4 测试效果
27