51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 课题设计文章 > 详细内容
基于51单片机的频率合成设计
发布时间:2009/6/2  阅读次数:2376  字体大小: 【】 【】【

作者:山东轻工业学院2006本科毕业生论文   来源:网络   转载请注明

摘   要
  
       本系统以51单片机为控制核心,由正弦信号发生模块、功率放大模块、调幅(AM)、调频(FM)模块、数字键控(ASK,PSK)模块以及测试信号发生模块组成。采用数控的方法控制DDS芯片AD9850产生0Hz-30MHz正弦信号,经滤波、放大和功放模块放大至6v并具有一定的驱动能力。测试信号发生模块产生的1kHz正弦信号经过调幅(AM)模块、调频(FM)模块,对高频载波进行调幅或调频。二进制基带序列信号送入数字键控模块,产生二进制PSK或ASK信号,同时对ASK信号进行解调,恢复出原始数字序列。
       另外,本系统从简单、调整方便、功能完备为出发点,基本实现了设计中的要求,波形输出较稳定,且精度较高。本设计还配备有LED显示屏、键盘,提供了友好的人机交互界面。
  关键词:直接数字频率合成(DDS)  AD9850  锁相环  VCO   调幅   调频   数字键控

ABSTRACT
  
This system is in the core of Micro-Processor , consist of sine signal generating module, Power amplifier, Amplitude Modulator, Frequency Modulator, ASK/PSK module and test signal generating module. The AD9850 controlled by Micro-Process in digital way to generate sine signal with the bandwidth 0Hz to 30MHz adjustable per 1Hz. After processing by LPF & power amplifier, the output signal has a peak value of move than 6V. The sine signal at 1 KHz was send to AM and FM module to modulate the high frequency carrier waveform. The binary sequential was send to the relative module to generate ASK and PSK signal. At last demodulate module demodulate the ASK signal and got the same binary sequential as set before.
In addition,the design of this system is basically satisfy the requirements of the symplification ,easy-modification and full-function..the output square wave is very stable and its precision is also very high. In order to provide a friendly user interface, the LED and remote infrared control keyboard was introduced in this system.
  
Key wordsDDS ; AD9850; PLL; VOC; AM; FM; ASK; PSK
  
第一章  绪 论
1.1课题研究的意义与作用
       1971年,美国学者j.Tierney等人撰写的" A Digital Frequency Synthesizer"-文首次提出了以全数字技术,从相位概念出发直接合成所需波形的一种新的频率合成原理。限于当时的技术和器件水平,它的性能指标尚不能与已有的技术相比,故未受到重视。近10年间,随着微电子技术的迅速发展,直接数字频率合成器(Direct Digital Frequency Synthesis简称DDS或DDFS)得到了飞速的发展,它以有别于其它频率合成方法的优越性能和特点成为现代频率合成技术中的姣姣者。具体体现在相对带宽宽、频率转换时间短、频率分辨率高、输出相位连续、可产生宽带正交信号及其他多种调制信号、可编程和全数字化、控制灵活方便等方面,并具有极高的性价比。
1.2 DDS的研究现状及发展趋势
       在频率合成(FS, Frequency Synthesis)领域中,常用的频率合成技术有模拟锁相环、数字锁相环、小数分频锁相环(fractional-N PLL Synthesis)等,直接数字合成(Direct Digital Synthesis-DDS)是近年来新的FS技术。单片集成的DDS产品是一种可代替锁相环的快速频率合成器件。DDS是产生高精度、快速变换频率、输出波形失真小的优先选用技术。DDS以稳定度高的参考时钟为参考源,通过精密的相位累加器和数字信号处理,通过高速D/A变换器产生所需的数字波形(通常是正弦波形),这个数字波经过一个模拟滤波器后,得到最终的模拟信号波形。如图1-1所示,通过高速DAC产生数字正弦数字波形,通过带通滤波器后得到一个对应的模拟正弦波信号,最后该模拟正弦波与一门限进行比较得到方波时钟信号。
       DDS系统一个显著的特点就是在数字处理器的控制下能够精确而快速地处理频率和相位。除此之外,DDS的固有特性还包括:相当好的频率和相位分辨率(频率的可控范围达μHz级,相位控制小于0.09°),能够进行快速的信号变换(输出DAC的转换速率300百万次/秒)。这些特性使DDS在军事雷达和通信系统中应用日益广泛。
其实,以前DDS价格昂贵、功耗大(以前的功耗达Watt级)、DAC器件转换速率不高,应用受到限制,因此只用于高端设备和军事上。随着数字技术和半导体工业的发展,DDS芯片能集成包括高速DAC器件在内的部件,其功耗降低到mW级(AD9851在3.3v时功耗为650mW),功能增加了,价格便宜。因此,DDS也获得广泛的应用:现代电子器件、通信技术、医学成像、无线、PCS/PCN系统、雷达、卫星通信。
1.3                 DDS的系统简介
1.3.1DDS的基本原理 
  DDS的基本原理是利用采样定理,通过查表法产生波形。DDS的结构有很多种,其基本的电路原理可用图1-2来表示。
       相位累加器由N位加法器与N位累加寄存器级联构成。每来一个时钟脉冲fs,加法器将频率控制字k与累加寄存器输出的累加相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上一个时钟脉冲作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器在每一个时钟脉冲输入时,把频率控制字累加一次,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。 用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值转换。波形存储器的输出送到D/A转换器,D/A转换器将数字量形式的波形幅值转换成所要求合成频率的模拟量形式信号。低通滤波器用于滤除不需要的取样分量,以便输出频谱纯净的正弦波信号。 DDS在相对带宽、频率转换时间、高分辨力、相位连续性、正交输出以及集成化等一系列性能指标方面远远超过了传统频率合成技术所能达到的水平,为系统提供了优于模拟信号源的性能。
1.3.2 DDS的性能特点
(1)输出频率相对带宽较宽
  输出频率带宽为50%fs(理论值)。但考虑到低通滤波器的特性和设计难度以及对输出信号杂散的抑制,实际的输出频率带宽仍能达到40%fs。 
(2)频率转换时间短
  DDS是一个开环系统,无任何反馈环节,这种结构使得DDS的频率转换时间极短。事实上,在DDS的频率控制字改变之后,需经过一个时钟周期之后按照新的相位增量累加,才能实现频率的转换。因此,频率转换的时间等于频率控制字的传输时间,也就是一个时钟周期的时间。时钟频率越高,转换时间越短。DDS的频率转换时间可达纳秒数量级,比使用其它的频率合成方法都要短数个数量级。 
(3)频率分辨率极高
  若时钟fs的频率不变,DDS的频率分辨率就由相位累加器的位数N决定。只要增加相位累加器的位数N即可获得任意小的频率分辨率。目前,大多数DDS的分辨率在1Hz数量级,许多小于1MHz甚至更小。 
(4)相位变化连续
  改变DDS输出频率,实际上改变的每一个时钟周期的相位增量,相位函数的曲线是连续的,只是在改变频率的瞬间其频率发生了突变,因而保持了信号相位的连续性。
(5)输出波形的灵活性
  只要在DDS内部加上相应控制如调频控制FM、调相控制PM和调幅控制AM,即可以方便灵活地实现调频、调相和调幅功能,产生FSK、PSK、ASK和MSK等信号。另外,只要在DDS的波形存储器存放不同波形数据,就可以实现各种波形输出,如三角波、锯齿波和矩形波甚至是任意的波形。当DDS的波形存储器分别存放正弦和余弦函数表时,既可得到正交的两路输出。
(6)其他优点
  由于DDS中几乎所有部件都属于数字电路,易于集成,功耗低、体积小、重量轻、可靠性高,且易于程控,使用相当灵活,因此性价比极高。
  
第二章   单片机80C51的简介
2.1   主芯片80C51的硬件资源
2.1.1单片机的概念
       单片机(microcontroller,又称微控制器)是在一块硅片上集成了各种部件的微型计算机。这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。图2-1是80C51单片机的基本结构图
  

1.80C51单片机的结构特点有以下几点:

               8CPU

               片内振荡器及时钟电路;

               32I/O线;

               外部存储器ROMRAM,寻址范围各64KB

               两个16位的定时器/计数器;

               5个中断源,2个中断优先级

               全双工串行口

               布尔处理器

2.定时器/计数器

80C51内部有两个16位可编程定时器/计数器,记为T0T116位是指它们都是由16个触发器构成,故最大计数模值为2 -1。可编程是指他们的工作方式由指令来设定,或者当计数器来用,或者当定时器来用,并且计数(定时)的范围也可以由指令来设置。这种控制功能是通过定时器方式控制寄存器TMOD来完成的.

如果需要,定时器在计到规定的定时值时可以向CPU发出中断申请,从而完成某种定时的控制功能。在计数状态下同样也可以申请中断。定时器控制寄存器TCON用来负责定时器的启动、停止以及中断管理

在定时工作时,时钟由单片机内部提供,即系统时钟经过12分频后作为定时器的时钟。技术工作时,时钟脉冲由TOT1输入

3.中断系统

80C51的中断系统允许接受五个独立的中断源,即两个外部中断申请,两个定时器/计数器中断以及一个串行口中断。

外部中断申请通过INTOINT1(即P3.2P3.3)输入,输入方式可以是电平触发(低电平有效),也可以是边沿触发(下降沿有效)。两个定时器中断请求是当定时器溢出时向CPU提出的,即当定时器由状态1转为全零时提出的。第五个中断请求是由串行口发出的,串行口每发送完一个数据或接收完一个数据,就可提出一次中断请求

2.1.2 80C51的芯片引脚
如图2-2所示
VCC:供电电压。
GND:接地。

P0口:
       P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作   图2-2 80C51引脚图
为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。                                                                  
P1口:
       P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
       P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。因此作为输入时,P2口的管脚被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
       P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 /INT0(外部中断0)
P3.3 /INT1(外部中断1)
P3.4 T0(记时器0外部输入)
P3.5 T1(记时器1外部输入)
P3.6 /WR(外部数据存储器写选通)
P3.7 /RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
       复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
       当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
       外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
       当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
       反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
       来自反向振荡器的输出。
2.1.3 使用I/O口的注意事项
(1) P1,P2,P3口的输出缓冲器可驱动4个LSTTL电路。对于HCMOS芯片单片机的I/O口,在正常情况下,可任意由TTL或NMOS电路驱动。HMOS及CMOS性的单片机I/O口有集电极开路或漏极开路的输出来驱动时,不必外加上拉电阻
(2)对于74LS系列,CD4000系列以及一些大规模集成电路芯片(如8155,8253,8279等),都可以和MCS-51系列单片机直接接口。具体使用时,可以查阅有关器件手册或参考典型电路
(3)对一些线性组件,特别是应用键盘、码盘、LED显示器等输入/输出设备时,应当尽量增加驱动部分的容量,否则,单片机将提供不出足够的驱动电流供给负载使用
2.2   80C51中断系统
       所谓中断,是指当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊情求,CPU暂停执行现行程序,转去对随机发生地更紧迫事件进行处理;处理完毕后,CPU自动返回原来的程序继续执行。
中断允许软件设计不需要关心系统其他部分定时要求,算术程序不需要考虑隔几个指令检查I/O设备是否需要服务。相反,算术程序编写时好像有无限的时间作算术运算而无其他工作在进行。若其它事件需要服务时,则通过中断告诉系统。
       80C51单片机有5个中断源,有两个中断优先级,每个中断源的优先级可以编程控制。中断允许受到CPU开中断和中断源开中断的两级控制。
2.2.1 中断源
       中断源是指任何引起计算机中断的事件,一般一台机器允许有许多个中断源。80C51系列单片机至少有5个中断源。增加很少的硬件就可把各种硬件中断源“线或”成为一个外部中断输入,然后再顺序检索一起中断的特定源。
80C51单片机的5个中断源是:
①       外部中断请求0,由 (P3.2)输入;
②       外部中断请求1,由 (P3.3)输入;
③       片内定时器/计数器0益处中断请求;
④       片内定时器/计数器1 溢出中断请求;
⑤       片内串行口发送/接收中断请求;
       为了了解每个中断源是否产生了中断请求,中断系统应设置许多个中断请
求触发器(标志位)实现记忆。这些中断源请求标志位分别有特殊功能寄存器TCON和SCON的相应位锁存
定时器/计数器控制寄存器TCON,它是一个八位的寄存器,各位如下表所示
TF1
  
TF0
  
IE1
IT1
IE0
IT0
●               IT0,IT1:外部中断0、1触发方式选择位,由软件设置。1是下降沿触发,0是电平触发。
●               IE0,IE1:外部终端0、1请求标志位。
●               TF0,TF1:定时器/计数器0、1溢出中断请求标志。
2.2.2 中断的控制
       中断的控制主要实现中断的开关管理和中断优先级的管理。这个管理主要通过对特殊功能寄存器IE和IP的编程实现。
(1)中断允许寄存器IE
EA
  
ET2
ES
ET1
EX1
ET0
EX0
●               EX0,EX1:外部终端0,1的中断允许位。1是中断开,0是中断关
●               ET0,ET1:定时器/计数器0、1溢出中断允许位。1是开中断,0是关中断
●               ES:串行口中断允许位。1是中断开,0是中断关
●               ET2:定时器/计数器2溢出中断位
●               EA:CPU开/关中断控制位。1是开中断,0是关中断
(2)中断优先级寄存器IP
  
  
  
PS
PT1
PX1
PT0
PX0
       若系统中多个中断源同时请求中断,则CPU按中断源的优先级别,由高到低分别响应。
80C51单片机有两个中断优先级:高优先级和低优先级。每个中断源都可以编程为高优先级。这可以实现两级中断嵌套。嵌套的原则:一个正在执行的中断服务程序可以被高级的中断请求中断,而不能被同级或较低级的中断请求中断。两级中断通过使用IP寄存器设置,相应的位置1,则优先级高,0则优先级低。
PX0、PX1:终端0、1中断优先级控制;
PT0、PT1:定时器/计数器0、1中断优先级控制。
PS:串行口中断优先级控制。
80C51复位时,IP被清零,5个中断源都在同一个优先级。这时若其中几个中断源同时产生中断请求,则CPU按照片内硬件优先级链路的顺序相应中断,硬件优先级由高到低的顺序是:外部终端0       定时器/计数器0       外部中断1       定时器/计数器1     串行口中断。
2.2.3 中断响应
       80C51的CPU在每个机器周期采样中断源的中断请求标志位,如果没有上述阻止条件,则将在下一个机器周期响应被激活的最高级中断请求。阻止条件如下:
①       CPU正在处理同级或更高级的中断;
②       现行机器周期不是所执行指令的最后一个机器周期;
③       正在执行的是RETI或者是访问IE或IP的指令;
CPU在中断响应之后完成如下操作:
①       硬件清除相应的中断标志位;
②       执行一条硬件子程序,保护断点,并转向中断服务程序入口。
③       结束中断时执行RETI指令,恢复断点,返回主程序。
80C51的CPU在相应中断请求时,由硬件电路自动形成转向与该中断源对应的中断的服务程序入口地址。这种方法为硬件向量中断法。
各中断源的中断服务程序入口地址如下:
编号
中断源
入口地址
0
外部终端0
0003H
1
定时器/计数器0
000BH
2
外部终端1
0013H
3
定时器/计数器1
001BH
4
串行口中断
0023H
       各中断服务程序入口地址仅隔8个字节,编译器在这些地址放入无条件转移指令,跳到服务程序的实际地址。
向量中断包括把先前的程序计数指针推入堆栈,中断服务程序很像其他子程序。当向量中断发生时,硬件禁止所有中断。此时表明外部中断或定时器溢出的标志位由硬件清除。中断服务程序的不同分支取决于中断源。在重新允许全局CPU中断EA之前,必须仔细清除各种标志。标志会引起立即地重复中断。80C51对终端实际上有特殊的返回指令----RETI。不是RET。RETI重新允许系统识别其他中断。因而,没必要在正常使用中断时复位EA,只要在程序初始化时开中断一次就可以了。
2.3   单片机定时/计数器的使用
       80C51系列单片机至少有两个16位内部定时器/计数器。8052有三个定时器/计数器,其中连个基本定时器/计数器是定时器/计数器0和定时器/计数器1。他们既可以编程为定时器使用,也可以编程为计数器使用。若是计数内部晶振驱动时钟,则它是定时器;若是计数80C51的输入引脚的脉冲信号,则它是计数器。
80C51的T/C时加一计数的。定时器实际上也是工作在技术方式下的,只不过对固定频率的脉冲计数;由于脉冲周期固定,由计数值可以计算出时间,有定时功能。
当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加一,频率加=fosc/12。晶振为6MHz,计数频率=500KHz,每2uS计数加一。
当T/C工作在计数器时,计数脉冲来自外部脉冲输入引脚T0或T1。当T0或T1脚上负跳变需2个机器周期,即24个振荡周期。所以T0或T1脚输入的计数外部脉冲的最高频率为fosc/12。当晶振为12MHz时,最高技术频率为500KHz,高于此频率将计数出错。
2.3.1与T/C有关的特殊功能寄存器
(1)计数寄存器TH和TL
T/C是16位的,计数寄存器有TH高8位TL低8位构成。在特殊功能寄存器中,对应T/C0为TH0和TL0;对应T/C1为TH1和TL1。定时器/计数器的初始值通过TH1/TL1和TH0/TL0设置
(2)定时器/计数器控制寄存器TCON
  
TR1
  
TR0
  
  
  
  
TR0、TR1:定时器/计数器0、1启动控制位。1是启动,0是停止
TCON复位后清零,T/C需要受到软件控制才能启动计数;当计数计满时,产生向高位的进位TF,即溢出中断请求标志
T/C的方式控制寄存器TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
●               C/T:计数器或定时器选择位。1位计数器,0位定时器
●               GATE:门控信号。1时T/C的启动控制受到双重控制,即要求TR0/TR1和INT0/INT1同时为高;0时T/C的启动仅受TR0/TR1控制
●               M1和M0:工作方式选择位,具体见下表
M1       M0
方式
功能
0           0
0
为13位定时器/计数器,TL存低5位,TH存高8位
0           1
1
为16定时器/计数器,TL存低8,TH存高8位
1           0
2
常数自动装入的8位定时器/计数器
1           1
3
仅适用于T/C0,两个8为定时器/计数器
2.3.2 定时器/计数器的初始化
(1)初始化步骤
       在使用80C51的定时器/计数器前,应对它进行编程初始化,主要是对TCON和TMOD编程,还需要计算和装载T/C的计数初值。一般完成以下几个步骤:
①       确定T/C的工作方式----编程TMOD寄存器。
②       计算T/C中的计数初值,并装载到TH和TL。
③       T/C在中断方式工作时,须开CPU中断和源中断----编程IE寄存器。
④       启动定时器/计数器----编程TCON中TR1和TR0位
(2)计数初值的计算
       在定时器方式下,T/C是对机器周期脉冲计数的,如果fosc=6MHz,一个机器周期为2us,则
方式0   13位定时器最大时间间隔=(2 -1)*2us=16.384ms;
方式1   16位定时器最大时间间隔=(2 -1)*2us=131.072ms;
方式2   8位时器最大时间间隔=(2 -1)*2us=512us
若使T/C工作在定时器方式1,要求定时1ms,求计数初值。如设计数初值为x,则有(2 -1)*2us=1000us
  x=2 -500
因此,TH,TL可置65536-500。
  
第三章   AD9850简介
3.1 AD9850功能概述
       AD9850是高稳定度的直接数字频率合成器件,内部包含有输入寄存器、数据寄存器、数字合成器(DDS)、10位高速D/A转换器和高速比较器。AD9850高速的直接数字合成器(DDS)核心根据设定的32位频率控制字和5位相移控制字,可产生0.029Hz到62.5MHz的正弦波信号和标准的方波信号。该器件提供了并行和串行控制字输入,可通过并行接口或串行接口实现控制字的定入,以改变其输出频率和相位。其主要特性如下:
(1)单电源供电,+5V或+3.3V;
(2)功耗低,380mW(=5V),
155mW(3.3V);
(3)具有电源关断功能;
(4)工作温度:-40℃-+85℃。
  1.2 AD9850的引脚功能
  AD9850是28脚SOP表面封装,
体积小,易用于便携仪器。其AD9850
排列如图1所示,功能如下:                                       
(1)D0-D7,控制字并行输入
端,其中D7可作为串行输入;         图3-1 AD9850引脚图
(2)DGND,数字地;
  (3)DVDD,为内部数字电路提供电源;
  (4)WCLK,控制字装入时钟;
  (5)FQUD,频率更新控制;
  (6)CLK,输入时钟;
  (7)AGND,模拟地;
  (8)AVDD,为内部模拟电路提供电源,可与数字电源共用;
  (9)RSET,DAC外接电阻;
  (10)QOUT,QB,内部比较器输出端;

11VINNVINP,内部比较器输入端;
12DACBL,内部DAC外接参考电压端,可空;
13IBIOUTDAC输出端;
14RES,复位端。

3.2 AD9850工作原理                          
3.2.1 控制字格式及写入时序
   AD9850包含一个40位输入寄存器,
其中低32位为频率控制字,高5位
为相位控制字,还有一位电源使能位
和两位测试位。
       AD9850的控制字有并行和串行两种写入方式,时序如图5-2所示。并行装入模式下,    WCLK第一个时钟上升沿到来时,装入高8位控制字,依次下去,当第5个WCLK时钟到来时装入低8位控制字,这样,连续5个WCLK时钟即可将40位控制字装入输入寄存器。第5个WCLK时钟后,WCLK时钟将不再起作用,直到FQUD时钟上升沿以来或重新复位。FQUD时钟上升沿将40位控制字写入数据寄存器,AD9850输出新的频率波。对于串行模式,每一个WCLK时钟上升沿,由控制字输入口的第8位(管脚25)移入1位控制位(低位先移入),40个WCLK时钟后,FQUD脉冲的上升沿更新输出频率。值得注意的是两位测试位仅是为了生产测试用,必须是00。
3.2.2频率输出原理
  AD9850的直接数字合成技术是基于数字分频原理实现频率合成的。器件内部有一个增量可调的累加器,每接收到一个输入脉冲,累加器就增加所设定的增量(由写入的32位频率控制字决定),当累加器溢出时,就输出一临界值,AD9850用一种算法逻辑把累加器输出值转换为接近正弦的量化值,这种算法逻辑实际上就是由高度集成化的存储器查表技术和数字信号处理(DSP)技术来完成的。随后AD9850将量化值送内部的D/A转换器输出正弦波形,若再辅以外部电路(低通滤波)送内部比较器,即可输出标准的方波信号。其输出频率ƒout由输入参考时钟和32位频率控制字决定,即 =WD*CLK/ ,其中WD是32位频率控制字,CLK为输入时钟。
  由于AD9850是由10位D/A转换器输出正弦波信号,因此其输出频率最大值不能超过参考输入频率的1/2。当作为时钟源时,考虑到衰减问题,其输出频率的最佳值限制在参考输入频率的33%以下。器件内部设有最小时钟门限,当输入频率低于1MHz时,芯片将自动实现电源判断。
3.3 AD9850应用与设计
       AD9850主要应用于频率合成以及数字通信领域,但由于其具有分频特性且易于控制,这里,我们把它应用于信号发生器。
3.3.1 AD9850的应用
    由于AD9851是贴片式的体积非常小,引脚排列比较密,焊接时必须小心,还要防静电,焊接不好就很容易把芯片给烧坏。还有在使用中数据线、电源等接反或接错都很容易损坏芯片。所以在AD9851外围采用了电源、输入、输出、数据线的保护电路。为了不受外界干扰,还应添加了滤波电路,显得整个电路完美。
3.3.2   AD9850的硬件设计  
       采用AT89C51作为CPU与AD9850并行接口方式对时钟频率进行分频控制,其中先用一片锁存器来锁存控制字,用P3.2、P3.4模拟控制字写入时钟来控制数据的定入。控制字写入后,AD9850即由内部D/A转换器输出正弦波。电路设计时,对时钟信号的质量要求比较高,即时钟信号的上升沿和下降沿应无大的尖峰和凹坑,时钟信号必须用地线屏蔽。另外,给AD9850的时钟信号不能低于1 MHz,低于这个数值时,芯片将自动进入休眠状态;当高于此频率时,系统则恢复正常。最后还要考虑设计良好的去耦电路,去耦电容尽可能靠近器件,并注意良好接地,模拟地和数字地一定要分开等。

第四章               DDS信号源系统设计
4.1     方案论证与比较
4.1.1   正弦波生成方案
方案一:采用自激振荡。
1.产生正弦波自激振荡的平衡条件为:
幅度平衡条件           AF=1
相位平衡条件           jAF = jA+j F = 2np ,   n为整数
    实质上,只要电路中的反馈是正反馈,相位平衡条件就一定满足,这是由电路结构决定的,而幅度平衡条件则由电路参数决定,当环路增益 AF=1时,电路产生等幅振荡;AF<1时电路产生减幅振荡;AF>1时,电路产生增幅振荡。
2.选频特性
     在振荡电路中,当放大电路或正反馈网络具有选频特性时,电路才能输出所需频率f0的正弦信号。也就是说,在电路的选频特性作用下,只有频率为f0的正弦信号才能满足振荡条件。
3.稳幅措施
       如果振荡电路满足起振条件,在接通直流电源后,它的输出信号将随时间的推移逐渐增大。当输出信号幅值达到一定程度后,放大环节的非线性器件接近甚至进入饱和或截止区,这时放大电路的增益A 将会逐渐下降,直到满足幅度平衡条件AF = 1,输出信号将不会再增大,从而形成等幅振荡。这就是利用放大电路中的非线性器件稳幅的原理。由于放大电路进入非线性区后,信号幅度才能稳定,所以输出信号必然会产生非线性失真(削波)。为了改善输出信号的非线性失真,常常在放大电路中设置非线性负反馈网络(如,热敏电阻、半导体二极管、钨丝灯泡等),使放大电路未进入非线性区时,电路满足幅度平衡条件(AF=1),维持等幅振荡输出。这是一种比较好的稳幅措施。
由基本放大器A和正反馈网络F组成的闭合正反馈环路,如图4-1所示。由闭合环路组成的自激振荡器,其振荡产生的起始信号来自于电路中的各种起伏和外来扰动这些电信号中含丰富的频率成分,经选频网络选出某频率的信号输送至放大器A放大后,经F网络反馈后再放大,……,反复循环直至电路的输出由小至大。最后建立和形成稳定的波形输出。但此电路易受外界的干扰,波形不易于稳定,而且难以达到题目中所要求的波形频率,操作麻烦。
图4-1 闭合正反馈环路图
方案二:采用单片机最小系统与AD9850并行接口方式对时钟频率进行分频控制,再连接锁相环,是输出波形的频率更加稳定。如图4-2所示,AD9850内含可编程DDS系统和高速比较器,能实现全数字编程控制的频率合成。AD9850是以高速的直接数字合成器(DDS)为核心根据设定的32位频率控制字和5位相移控制字,可产生0.029Hz到62.5MHz的正弦波信号和标准的方波信号,而且DDS芯片转换速度快、性能价格比高、体积小、输出波形稳定度,精度高、分辨率高,而且输出波形的频率、相位可控,能达到题目预期的效果,操作方便,易于实现。
经比较,在本设计中采用方案二。
4.1.2   输出电压幅度控制方案
方案一:采用多级放大电路。由两个晶体管构成共射——共集放大电路如图4-3,第一级起到电压放大作用,达到正弦信号峰-峰值输出,第二级为跟随器,主要为了能够带50欧的负载,使其负载上的正弦信号的输出电压的峰-峰值达到题目的要求。此电路只是在调试选定具体参数中比较麻烦,但工作比较稳定,比较易于实现。

图4-3 共射-共基放大电路的交流通路
方案二:采用可变增益放大器。增益放大器直接与AD9850相接,用来实现电压的放大并且控制波形的失真,精确度高,且较稳定,实现简单。可以采用AD603,它正是这样一种具有程控增益调整功能的芯片。它是美国ADI公司的专利产品,是一个低噪、90MHz带宽增益可调的集成运放,如增益用分贝表示,则增益与控制电压成线性关系,压摆率为275V/μs。管脚间的连接方式决定了可编程的增益范围,增益在-11~+30dB时的带宽为90Mhz,增益在+9~+41dB时具有9MHz带宽,改变管脚间的连接电阻,可使增益处在所需范围内。
本设计采用方案二。
4.1.3   模拟幅度调制
方案一:采用DDS芯片与0832分别产生正弦波,再经乘法器进行波形幅度调制,如图4-4所示。DDS产生调制正弦波信号,范围在1兆赫兹到10兆赫兹。0832产生正弦波载波,频率为1kHz。单片机可以控制调制信号的步进量,但由于在本设计中所采用的51单片机不具备达到设计中所需正弦波载波的频率,因而此方案不能采用。
  
方案二:采用两片DDS芯片分别产生正弦波调制信号与载波信号,如图4-5所示。产生的信号再由模拟乘法器进行调幅,用数字电位器来控制调制信号的步进量,此方案产生的波形稳定,且易于实现,能够基本实现设计中的要求。
4.1.4   数字PSK/ASK载波调制
方案一:采用两片DDS芯片分别产生正弦波和方波,如图4-6所示,在ASK的载波调制中,正弦波和方波通过模拟乘法器进行调制;在PSK的调制中,正弦波和方波通过高频继电器进行调制。但DDS芯片产生方波外界电路较为复杂,不易于调试。
方案二:采用555芯片来产生方波,DDS芯片来产生正弦波,如图4-6所示。在ASK的载波调制中,正弦波和方波通过模拟乘法器进行调制;在PSK的调制中,正弦波和方波通过高频继电器进行调制。此方案中所实现的方波较为稳定,易于调试。
       经比较,本设计采用方案一。      
根据题目的具体要求,以及各方案的讨论及研究得出了最终的整体方案,下图既为本设计的主体系统设计图4-7。
4.2       单元电路设计
4.2.1   正弦波的生成
     本设计中单片机最小系统中的8155与AD9850芯片的接口采用的是8位并行接口方式。AD9850的频率/相位控制字—共有40位,并行加载时,要连续加载5次,D7位最高位,D0位最低位。频率相位控制字的第一个8位中的5位用来控制相位的调制,1位用来低功耗,2位用于装载格式。第2个字节到第5个字节组成32位的频率控制字,其输出信号的频率f= ,其中 为32位频率控制字的值, 为工作时钟。8155的PB口(PB0脚~PB7脚)与AD9850的数据口(D0脚~D7脚)相接,AD9850的第7脚WCLK是加载时钟,与引脚FQUD配合,完成数据加载,FQUD为频率/相位更新控制。用单片机的P3.2与P3.4分别与AD9850的WCLK和FQUD相连接,模拟控制字写入时钟来控制数据的定入。本设计中AD9850选用的时钟为66MHz。AD9850波形的输出频率可以达到几十MHz。连接如图4-8所示。
4.2.2   输出电压幅度控制
       最初我对输出电压的幅度控制由模拟电路(晶体管等)来实现。正弦波从AD9850输出后进入到模拟电路中,晶体管基极上的10微法电容和100皮法电容分别控制高频信号和部分低频信号的通过,第一级为放大电路,实现电压的放大,使其输出电压的峰-峰值达到5伏到7伏之间,晶体管采用9018,测得它的电流放大倍数 ,集极的电压控制为所加电压源的一半,本设计中晶体管所加电源为12伏,因此集极的电压为6伏,初始先定集极的电阻为3千欧,根据公式由 得出从而得出集极的电流 ,进而由 求得基极的电阻,发射极直接接地,从而构成了共射放大电路,实现输出电压的峰-峰值要求(5伏~7伏)。第二级为跟随器,从而能够带动50欧的负载。基极与发射极由0.1微法的电容所构成的回路为自举电路。基极接电阻后直接接到电源,发射极直接接负载从而构成了跟随器。根据调试再对相应的参数进行调整,来实现整个电路的运行,最终实现在频率范围内50欧负载电阻上正弦信号输出电压的峰-峰值(5伏~7伏)。
       但在设计过程中,我发现模拟电路部分难以实现,于是我们采用了添加自动增益放大器芯片的方法来实现设计的要求。采用的是美国ADI公司的AD603芯片如图4-9,经它放大后,可以实现设计的要求,达到输出波形的幅度标准。
4.2.3   模拟信号的产生
       为了能够产生模拟幅度调制信号,设计要求在1MHZ-10MHZ范围内调制度可在10%-100%之间可调,所以由DDS芯片产生的正弦波调制信号能够进行调节,为了实现调节的步进,应该使用数字电位器,利用单片机进行程控,不过因为时间紧,未能找到合适的数字电位器,故只好采用普通电位器。虽能实现幅度调节,但是不能实行步进,只能做到线性调节。
4.2.4   数字PSK/ASK载波调制
       对数字信号进行二进制调制振幅键控,主要有两种方法:乘法器实现法和键控法。在这里我们采用乘法器实现法,我们采用的乘法器是美国ADI公司的乘法器AD835,如图4-10
图4-10 AD835引脚图
       它具它有工作频率高,运算速度快等优点,十分适合进行ASK载波调制。对于PSK调制,采用了键控法,采用了开关式三极管和高频继电器来实现,通过调制信号来控制高频继电器通断来实现调制。
4.2.5   键盘与显示控制的设计
       利用芯片8279来进行键盘控制显示管LED的显示以及波形的频率和波形频率的步进。初始化时,有芯片8279控制的显示管LED显示HELLO,当按下A建时,键盘清屏;键盘的0~9设置频率,当设置完毕后,按B键表示设置完毕,此时显示管LED的值即为输出正弦波的频率;C键为频率步进正100赫兹,D键为步进负100赫兹。
  
第五章 软件设计
5.1   软件功能的实现
程序全部由单片机的C语言编写,由正弦信号发生模块、功率放大模块、调幅(AM)、调频(FM)模块、数字键控(ASK,PSK)模块以及测试信号发生模块组成。采用数控的方法控制DDS芯片AD9850产生0Hz-30MHz正弦信号,经滤波、放大和功放模块放大至6V并具有一定的驱动能力。测试信号发生模块产生的1kHz正弦信号经过调幅(AM)模块、调频(FM)模块,对高频载波进行调幅或调频。二进制基带序列信号送入数字键控模块,产生二进制PSK或ASK信号,同时对ASK信号进行解调,恢复出原始数字序列。
5.2 软件流程图
5.2.1 总设计流程图
  在对系统初始化后,LED显示HELLO,同时两片AD9850都产生1KHz的正弦波。产生正弦波测试信号的AD9850将保持1KHz不变,而作为信号发生器的AD9850将在键盘的控制下产生预定的正弦波。同时还可以通过电路的改变进行模拟调制和数字调制。从而实现各种功能。设计流程图如图5-1所示。
                       
5.2.2 外设流程图
       作为人机界面的键盘和LED通过8279来控制。8279是专用键盘/显示器控制芯片,能对显示器自动扫描,能识别键盘上按下键的键号;可充分提高CPU的工作效率。8279与MCS-51接口方便,由它构成的标准键盘/显示器接口在微机应用系统中使用越来越广泛。键盘和LED的软件流程图如图5-2所示。
5.2.3 AD9850流程图
     由于用一片AT89C51来控制两片AD9850,所以利用8155扩展I/O口。这样可以使得I/O口更加充足。如图5.3。
总   结
       本设计是我第一次比较系统完成的一次设计。在本次设计中我从选题,搜集资料,电路设计到硬件电路的调试以及程序的调试,比较系统的接触到了一次设计整个过程的具体环节,从中受益匪浅。本设计基本上实现了设计任务所要求的功能,但由于时间的紧迫,有许多本可以做的更好的地方,但没能做到。例如:对于数字信号发生器,起初是设想通过从机与主机之间通信数据完成,而实际设计过程仅仅选用了键盘直接控制没有实现通讯控制。尽管如此,这次设计是对大学四年来所学知识的一次综合运用,增强了我理论结合实践能力。
通过本次设计我进一步加深了对51系列单片机、DDS、信号发生器系统设计的了解,增强了我对电路分析能力,并且对AT89C51、AD9850、8279、8155等所用芯片有了更深的了解,这为我以后的学习打下了良好的基础。
  
参考文献
[1]   张肃文   陆兆熊   高频电子线路(第三版)[M]   北京   高等教育出版社   1992:102-134.
[2]   谢自美   电子线路设计•实验•测试[M]   武汉   华中理工大学出版社   1994:89-117.
[3]   周立功   夏宇闻   单片机与CPLD综合应用技术[M]   北京   北京航空航天大学出版社     2004:189-218.
[4]   童诗白   化成英   模拟电子技术基础[M]   北京   高等教育出版社   2000:271-295.
[5]   樊昌信   詹道庸   通信原理[M]   北京   国防工业出版社   1995:71-83.
[6]   李友平   直接数字频率合成器(DDS)的原理与设计[J]   电声技术 1992,(11).
[7]   马忠梅   籍顺心   单片机的C语言应用程序设计[M] 北京    北京航空航天大学出版社   
2003:102-109
[8]   靳达编   单片机应用系统开发实例导航[M]   北京   人民邮电出版社   2000:24-31.
[9]   求是科技   单片机典型模块设计实例导航[M]    北京   人民邮电出版社 2003:61-69.
[10]   李光飞   单片机课程设计实例指导[M]   北京  北京航空航天大学出版社2004:45-51.
[11]   胡汉才   单片原理及其接口技术[M]   北京    清华大学出版社   2005:157-164.
[12]   胡宴如   高频电子线路[M]   北京   高等教育出版社   2000:186-203.
[13]   白驹珩   雷晓平   单片计算机及其应用[M]   成都   电子科技大学出版社1997:74-82..
[14]   李广弟   单片机基础[M]   北京   北京航空航天大学出版社   1994:72-84.
[15]   肖汉波   一种基于DDS芯片AD9850的信号源[J]   北京   中国工程物理研究院电子工程研究所 2002,(9).
[16]   陈永泰   刘雪燕   AD9850与AT89C51在信号源中的应用[J]     武汉理工大学   2002,(8).
[17]   Analog Devices Inc.   CMOS 180MHz Complete DDS Synthesizer AD9851   [M]1997:45-59.
[18]   Nicholas HT The optimisation ofdirect digitalfrequency synthesizer performance in thepresence of finite word length effects[J].Proc.42nd Annu.Frequency Cont Symp USER-ACOM,1988,(5)5:357.
  
附   录
  
设计程序源代码:
#include <reg51.h>
#include <absacc.h>
#define COM8155 XBYTE[0x2100]     //8155
#define PB8155   XBYTE[0x2102]
#define COM8279 XBYTE[0x7fff]     //8279
#define DAT8279 XBYTE[0x7ffe]
#define uchar unsigned char
#define uint   unsigned int
#define ulong unsigned long
uchar code keytab[]={0xc1,0xc8,0xc9,0xd0,0xd8,0xe0,0xc2,0xca,0xd1,0xd9,0xda,0xc3,0xcb,0xd2,0xd3,0xdb};
uchar code dispcode[]={0x0c,0x9f,0x4a,0x0b,0x99,0x29,0x28,0x8f,0x08,0x09,0x88,0x38,0x6c,0x1a,0x68,0xe8};
uchar code hello[]={0x98,0x68,0x7c,0x7c,0x0c};
uchar k=0,a[8],add=0,dec=0;
sbit clearflag=ACC^7;
sbit W_CLK=P1^6;
sbit FQ_UD=P1^4;
sbit reset=P1^2;  
              
ulong x0=0xfd72,frequency=0xfd72,pa=1,seem;
  
void reset1()                                   //9850复位                             (1)
{uchar i,j;
  for(i=0;i<125;i++)
  for(j=0;j<125;j++)
P1=0xff;
P1=0;
  }
  void again(ulong x0)    &am, p;am, p;am, p;am, p;nb, sp;  &nb, sp;    &a, mp;a, mp;a, mp;a, mp;a, mp;n, bsp;   //写9850控制字
{
uchar i;
for(i=0;i<32;i++)
{
W_CLK=0;
FQ_UD=0;
PB8155=0x00;
W_CLK=1;
, , , W_CLK=0;
PB8155=(x0/65535)/255;
W_CLK=1;
W_CLK=0;
PB8155=(x0/65535)%255;
W_CLK=1;
W_CLK=0;
PB8155=(x0%65535)/255;
W_CLK=1;
W_CLK=0;
PB8155=(x0%65535)%255;
W_CLK=1;
W_CLK=0;
}
FQ_UD=1;
}
void intial()                                 //系统初始化                                   (3)
{
  reset1();                                       //复位
  COM8279=0xdf;                                       //初始化8279              
  do{ACC=COM8279;}
  while(clearflag==1);
  COM8279=0x10;                                                      
  COM8279=0x2a;
  COM8279=0x80;
  COM8155=0x03;                               //初始化8155 a b输出 c输入
  again(x0);                               //9850初始化     产生1kHZ正弦波
  }
  uchar keyboard()                         //键盘检测                                                       (4)
{
   uchar i,j;
   i= COM8279;
   if((i&07)!=0)
   {
       j= DAT8279;
       for(i=0;i<16;i++)
       if(j==keytab[i])
       return i;
   }
     return 0;
}
  
void hellome()                               //0键显示
  {
   uchar i;
   for(i=0;i<5;i++)
       { COM8279=0x82+i;
         DAT8279=hello[i];
         }
  }
void caution()
{   uchar i,j,m,n;
       COM8279=0xdf;                                                  
  do{ACC=COM8279;}
  while(clearflag==1);
  
         while(1)
         {
         j=COM8279;
         if((j&07)!=0)
             {
             n=DAT8279;
             for(m=0;m<10;m++)
                       if(n==keytab[m])
                       {
                         { COM8279=0x80+k;
                         DAT8279=dispcode[m];
                           a[k]=m;
                           k++;
                           if(k>8)
                           {
                           k=0;
                           COM8279=0xdf;                                                    
  do{ACC=COM8279;}
  while(clearflag==1);
                           }
                           }
                    
                       }
                   }
           if(n==0xc3)
             break;
}
}
void dispfre(ulong x )                 //频率显示                                                                         (5)
{
  uchar i;
  COM8279=0x80;
  i=x/10000000;
  DAT8279=dispcode[i];
  COM8279=0x81;
  i=(x%10000000)/1000000;
  DAT8279=dispcode[i];
  COM8279=0x82;
  i=(x%1000000)/100000;
  DAT8279=dispcode[i];
  COM8279=0x83;
  i=(x%100000)/10000;
  DAT8279=dispcode[i];
  COM8279=0x84;
  i=(x%10000)/1000;
  DAT8279=dispcode[i];
  COM8279=0x85;
  i=(x%1000)/100;
  DAT8279=dispcode[i];
  COM8279=0x86;
  i=(x%100)/10;
  DAT8279=dispcode[i];
  COM8279=0x87;
  i=x%10;
  DAT8279=dispcode[i];
}
void disp()
{
  switch(k=k-1)
  {
  case 7:
         frequency=a[0]*10000000+a[1]*1000000+a[2]*100000+a[3]*10000+a[4]*1000+a[5]*100+a[6]*10+a[7];break;
  case 6:
         frequency=a[0]*1000000+a[1]*100000+a[2]*10000+a[3]*1000+a[4]*100+a[6]*10+a[6];break;      
  case 5:
         frequency=a[0]*100000+a[1]*10000+a[2]*1000+a[3]*100+a[4]*10+a[5];break;
  case 4:
         frequency=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];break;
  case 3:
         frequency=a[0]*1000+a[1]*100+a[2]*10+a[3];break;    
  case 2:
         frequency=a[0]*100+a[1]*10+a[2];break;    
  case 1:
         frequency=a[0]*10+a[1];break;        
  case 0:
         frequency=a[0];break;                  
  }
  k=0;
  seem=frequency*65;
again(seem);
}
void addtion()
{
if(seem<0x27000000)
  seem+=0x19ca;
   else
add=1;
   dispfre(seem/65);
   again(seem);
  
}
void decrease()
{
if(seem>0x19ca)
  , seem-=0x19ca;
&, nbsp; else
,
  dec=1;
   dispfre(seem/65);
   again(seem);
  
}
  main()
{ uchar i;
  reset1();
  intial();
  hellome();
  while(1)
  {
  i=keyboard();
if(i==0x0a)
       {
         caution();
         disp();
   }
  if(i==0x0c)
  {
   add++;
   addtion();
  }
  if(i==0x0d)
  {
  dec++;
  decrease();
  }
}
}
  
       经过几个月的努力,毕业设计顺利地完成了!这一过程让我学得了很多平时没有学到的知识。毕业设计是大学四年所学知识的一次综合运用,也是由理论结合实践的第一步,为我以后的学习奠定了良好的基础。经过这次毕业设计,我对信号发生器系统有了更加清楚地认识,知道了所学知识的重要性,对设计的过程与步骤以及应注意的细节都有了更为深刻的理解和领会。设计中遇到了许多平时想象不到问题,但是,在指导老师的指点,以及其他同学的帮助下,基本上得到了解决。设计中我得到了李庆华老师的悉心指导。他渊博的知识,诚恳的为人,使我受益匪浅,在此对李老师表示衷心的感谢,另外,还要谢谢其他给予我帮助的同学。
       鉴于作者的水平有限,难免存在一些错误和漏洞。望各位专家、学者不吝赐教,在此向大家表示衷心的感谢。
  
  
敬告:本站论文载自网络,本站不予评论或纠错!所有内容读者自行论证!更多设计论文陆续添加中...
                       >>发表评论
上一篇:没有了! 下一篇:基于51单片机的数字钟设计与实现
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号