资源描述
高精度数控低频正弦信号发生器
任 务 书
一、 任务
设计一款基于AT89C51单片机和锁相技术的高精度数控低频正弦信号发生器。
二、设计要求
1、 基本要求
⑴ 采用DDFS(直接数字频率合成)和锁相技术, 实现1Hz~1KHz变化的正弦信号。
⑵ 通过面板键盘控制输出频率,频率最小步进1Hz。
⑶ 输出双极性。
⑷ 用LED数码管实时显示波形的相关参数。
⑸ 写出详细的设计报告,给出全部电路和源程序。
2、 发挥部分
⑴ 不改变硬件设计,将上限频率扩展到10KHz。
⑵ 不改变硬件设计,扩展实现三角波和方波信号。
⑶ 可通过PC机上的“虚拟键盘”,实现频率等参数的控制。
⑷ 实现对幅度的控制。
高精度数控低频正弦信号发生器
函数信号发生器作为一种常用的信号源,广泛应用于电子电路、自动控制和科学研究等领域[7]。它是一种为电子测量和计量工作提供符合严格技术要求的电信号设备,因此是电子测试系统的重要部件,是决定电子测试系统性能的关键设备。它与示波器、电压表、频率计等仪器一样是最普通、最基本的,也是得到最广泛应用的电子仪器之一。
1 总体方案论证与设计
数字式函数信号发生器的实现方案很多,主要有如下几种:
方案一:采用微处理器和数模转换器直接合成的数字式函数信号发生器。这种信号发生器具有价格低,在低频范围内可靠性好,体积小,功耗低,使用方便等特点,它输出的频率是由微处理器向数模转换输出数据的频率和信号在一个周期内的采样点数(N)来决定的,因此受单片机的时钟频率的限制很大,如果单片机的晶振取12MHz,则单片机的工作频率为1MHz,若在一个周期内输出360个数据,则输出信号的频率理论上最高只能达到2777Hz。实际上单片机完成一次数据访问并输出到D/A电路,至少要5个机器周期,因此实际输出信号的频率只有500Hz左右。即使增大晶振频率,减小一个周期内输出数据个数,在稍高的频率下输出的波形频率误差也是很大的,而且计算烦琐,软件编程麻烦,控制不方便。
方案二:利用单片机与精密函数发生器构成的程控信号发生器。这种信号发生器能够克服常规信号发生器的缺陷,保证在某个信号的频带内正弦波的失真度小于0.5%。它的输出信号频率调整和幅值调整都由单片机完成。但是,由于数模转换器的非线性误差和函数发生器本身的非线性误差,这种信号发生器输出信号的频率与理论值会有一定的偏差。
方案三:利用DSP处理器,根据幅值,频率参数,计算产生高精度的信号所需数据表,经数模转换后输出,形成需要的信号波形。这种信号发生器可实现程控调幅,调频。但这种信号发生器输出频率不能连续可调,计算烦琐,控制也不便。
方案四:基于单片机,锁相环,可编程分频、相位累加、存储器波形存储以及D/A转换器等组成的数字式函数信号发生器。输出的频率的大小由锁相环和可编程计数器来控制,最终由地址发生器对存储器中的波形数据硬件扫描,单片机提供要输出的波形数据给存储器。这种方案电路简洁,不受单片机的时钟频率的限制,输出信号精度高,频率“连续”,稳定性好,可靠性高,功耗低,调频,调幅都很方便,而且可简化软件设计,实现模块化设计的要求。
综合考虑,方案四各项性能和指标都优于其他几种方案,能使输出频率有较好的稳定性,充分体现了模块化设计的要求,而且这些芯片及器件均为通用器件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。其系统组成原理框图如图1所示。
图1 系统组成原理结构图
图1中主要有2大块,即波形发生部分(上半部)和键盘/显示部分。波形发生部分是本设计的核心,主要由可编程基准信号、锁相倍频电路、相位累加地址发生、EPROM存储器、数/模转换和滤波驱动等组成,如图2所示。
图2 系统波形发生模块
键盘输入和显示部分在控制仪器中起着人机交互的作用,这两部分的设计是仪器和操作者进行联系并得到实际应用的关键之一,并关系到用户使用的满意度。键盘/显示模块设计的常用方法有: ①采用8279可编程接口芯片来实现系统的键盘/显示器扩展功能,该芯片40引脚,体积较大,成本不低,编程也不方便。②由单片机AT89C2051控制共阳数码管、按键构成动态显示模块。该方案最多只能扩展16个按键,且数码管需8只三极管驱动。③LCD液晶显示加键盘等,该方案成本不低,接口复杂。考虑到成本及电路的复杂度,本设计采用一款新颖的HD7279专用键盘/显示芯片。HD7279芯片价格低廉,内部含有译码器,并具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。在设计时,外围电路简单,只需一个电阻和一个电容即可解决键盘/显示电路的外围设计,且有成熟的现成程序可借鉴。
2 频率控制机理及其硬件设计
我们把锁相+直接数字频率合成称为PDDFS技术,频率控制是本设计的关键。频率控制模块的主要硬件支持是锁相环CD4046和可编程分频器INTEL8254,锁相环CD4046是本系统工作的关键所在,可编程分频器INTEL8254和其相互配合,为相位累加器CD4518提供时钟脉冲,从而最终实现对输出波形函数信号频率的改变。
2.1 锁相环介绍
锁相环PLL(Phase Lock Loop)是一个能完成两个电信号相位同步的自动控制闭环系统。它是比较输入信号和压控振荡器输出信号之间的相位差, 比较结果产生的误差输出电压正比于输入信号和压控振荡器输出信号两个信号的相位差,原理如图3所示。
图3 锁相环原理框图
在环路开始工作时,通常输入信号的频率与压控振荡器末加控制电压时的振荡频率是不同的,由于两信号之间存在固有的频率差,它们之间的相位差势必不断地变化,在这种误差电压控制之下,压控振荡器的频率也就在相应的范围之内变化。若压控振荡器的频率能够变化到与输入信号相等,便有可能在这个频率上稳定下来(当然只有在一定的条件下才可能这样)。达到稳定之后,输入信号和压控振荡器输出信号之间的频差为零,相位差不再随时间变化,误差控制电压为一固定值,这时环路就进入“锁定”状态。当锁相环入锁时,它还具有“捕捉”信号的能力,VCO可在某一范围内自动跟踪输入信号的变化,如果输入信号频率在锁相环的捕捉范围内发生变化,锁相环能捕捉到输人信号频率,并强迫VCO锁定在这个频率上。
本系统选用的是 CD4046锁相环,其特点是电源电压范围宽(为3V~18V),输入阻抗高(约100MΩ),动态功耗小,在中心频率f0为10kHz下功耗仅为600μW,属微功耗器件。它采用 16 脚双列直插式,各引脚功能如下:
· 1脚相位输出端,环路人锁时为高电平,环路失锁时为低电平。
· 2脚相位比较器Ⅰ的输出端。
· 3脚比较信号输入端。
· 4脚压控振荡器输出端。
· 5脚禁止端,高电平时禁止,低电平时允许压控振荡器工作。
· 6、7脚外接振荡电容。
· 8、16脚电源的负端和正端。
· 9脚压控振荡器的控制端。
· 10脚解调输出端,用于FM解调。
· 11、12脚外接振荡电阻。
· 13脚相位比较器Ⅱ的输出端。
· 14脚信号输入端。
· 15脚内部独立的齐纳稳压管负极。
图4是CD4046功能图,主要由相位比较Ⅰ、Ⅱ、压控振荡器(VCO)、线性放大器、源跟随器、整形电路等部分构成。
图4 CD4046锁相环的功能图
时,锁相环的振荡频率可表示为:
(1)
当,VCOin=Vcc/2时,锁相环的振荡频率(中心频率)可表示为:
(2)
当锁相环锁定时,压控振荡器能在某一范围内自动跟踪输入信号的变化,这个范围称作锁定范围。通常锁定范围大于捕捉范围,锁相环能搜寻和捕捉的输入信号的频带定义为捕捉范围。对于CD4046内部有两个比较器,用相位比较器Ⅰ的情况下它的捕捉范围和锁定范围的关系为:
(3)
其中 RC组成一个低通滤波器,即图4中的R3,R4,C2部分。对RC时间常数的选择有一定的要求,既要避免环路自激,又要保证对输入频率的变化有合理快的响应速度,一般R用两个电阻,分别取R3=,R4=100(这个电阻也可以不要接), C=C2=1,因此捕捉范围,就会比较低,并且对相位比较器Ⅰ,它要求Ui、Uo的占空比均为50%(即方波),这样才能使锁定范围为最大。对于频率输入的变化不大的场合,用相位比较器Ⅱ时其捕捉范围和锁定范围一样,与低通滤波器的RC无关. 而且最大锁定范围与输入信号波形的占空比无关,并且压控振荡器的输出脉冲占空比为50%,与输入信号的占空比没有关系。图5为系统进入锁相状态时各引脚的典型波形。
其输出频率最大最小分别为:
(4)
(5)
在VDD=5V条件下,为了使输出频率最大,可取R1=10K,C1=50PF,R2=∞,此时。
图5 锁定时各引脚波形图
2.2 可编程分频器及其频率控制的原理
(1)可编程分频器
本系统的分频器是由INTEL8254可编程计数器完成的,INTEL8254可编程计数器内部有三个相互独立的16位的计数器,其计数速率可达到8MHz(INTEL8253的计数速率只有2MHz)。一个具有三态双向的8位数据总线缓冲器为8254芯片提供与系统总线相接口的能力,它在读/写逻辑的控制下接收来自系统总线的命令和数据,并将8254的状态字送上系统总线。控制寄存器接收来自数据总线缓冲器中关于命令的数据,并暂存这些数据。命令的数据经内译码后产生整个器件的控制信号,并设置每个计数器的工作方式。每一个计数器是完全独立的,并有各自独立的工作方式。
8254的内部功能通过系统软件的编程来确定。系统通过接口传送所要求的工作方式和数值来初始化计数器。每一个计数器都是独立地通过一个命令数据来编程。每个计数器有6种工作模式,本系统计数器0、计数器1均采用工作方式3,即方波发生器。当进入工作方式3,GATE为高电平并装入计数值n后,若n为偶数,则OUTi端输出的周期为n×CLKi周期,占空比为1:1的方波序列;若n为奇数,则OUTi端输出的周期为n×CLKi周期,占空比为的近似方波序列。
(2)INTEL8254初始输入基准时钟
INTEL8254的初始输入时钟信号,直接取自单片机AT89S52的ALE引脚信号,其频率为单片机晶振频率的六分之一,本系统的单片机用6MHz的晶振,所以输入到INTEL8254的基准时钟频率为1MHz。
(3)频率控制原理
输出信号的频率控制主要通过对地址发生器扫描频率的改变来实现,其控制模块主要由计数器INTEL8254、锁相环CD4046组成。其频率控制原理如图2所示。
设计时,图2中的分频器M由INTEL8254第0个计数器与第1个计数器级联组成,因此可将计数器看作32位计数器。初始时钟信号从第0个计数器输入,通过8254计数器0、计数器1进行M分频后,其输出信号作为CD4046的信号输入AIN;图2中的分频器N由INTEL8254第2个计数器完成,而CD4046的压控振荡器的输出端,接入INTEL8254第2个计数器的时钟输入端,经过分频后接到锁相环比较器输入端BIN。当相位锁定时,CD4046的压控振荡器的输出频率也即相位累加器的输入频率等于计数器1的输出频率与计数器2的分频值的乘积,即
(6)
INTEL8254计数器2的分频值,受AT89S52单片机控制。相位累加地址发生器CD4518对2764扫描速度随的值改变而改变,从而可以控制最终输出波形的频率值。假定相位累加地址发生器相位字长为,如图2所示。则输出波形的频率可表示为:
(7)
由上式可知,要改变输出频率,则可通过改变分频值、和相位累加字长。为了在软件设计宜实现,设计时将计数器0、1都进行100分频,即M取10000。因系统采用的晶振为6MHz,所以为1MHz,则经过计数器0 、1分频后的输出频率为100HZ,式(6)、(7)可分别表示为:
(7)
(9)
根据式(7),取值为100时,最终输出频率为:
(10)
分频值可取2~65536之间的任意自然数,因此输出频率最小频率步进1HZ。但从式(10)可知,输出频率最小只能到达2Hz,这是因为8254不能实现1分频,也即不能输出频率为1Hz的波形。为了能实现1Hz的频率输出,可重新设置 、的值,如取、、值仍为100,则最终输出频率仍满足式(10)。
2.3 相位累加地址扫描电路设计
相位累加地址扫描由CD4518及27C64组成。CD4518是二、十进制(8421编码)同步加计数器,内含两个单元的加计数器,其功能表如表1所示。每单个单元有两个时钟输入端CLK和EN,可用时钟脉冲的上升沿或下降沿触发。由表可知,若用ENABLE信号下降沿触发,触发信号由EN端输入,CLK端置“0”;若用CLOCK信号上升沿触发,触发信号由CLOCK端输入,ENABLE端置“1”。RESET端是清零端,RESET端置“1”时,计数器各端输出端Q1~Q4均为“0”,只有RESET端置“0”时,CD4518才开始计数。
CD4518采用并行进位方式,只要输入一个时钟脉冲,计数单元Q1翻转一次;当Q1为1,Q4为0时,每输入一个时钟脉冲,计数单元Q2翻转一次;当Q1=Q2=1时,每输入一个时钟脉冲Q3翻转一次;当Q1=Q2=Q3=1或Q1=Q4=1时,每输入一个时钟脉冲Q4翻转一次。这样从初始状态(“0”态)开始计数,每输入10个时钟脉冲,计数单元便自动恢复到“0”态。若将第一个加计数器的输出端Q4A作为第二个加计数器的输入端ENB的时钟脉冲信号,便可组成两位8421编码计数器,依次下去可以进行多位串行计数。
因CD4518每输入10个脉冲便会自动归零,所以在对27C64完成一次地址扫描后进行复位时,避免了用其它硬件电路进行复位所出现的“延时”所造成的“毛刺”现象。其相位累加、地址扫描电路如5所示。
CLOCK
ENABLE
RESET
ACTION
上升沿
1
0
加计数
0
下降沿
0
加计数
下降沿
X
0
不变
X
上升沿
0
不变
上升沿
0
0
不变
1
下降沿
0
不变
X
X
1
Q0~Q4=0
表1 CD4518功能表
之所以采用十进制计数器,是因为考虑到人们的习惯。但此时要求存储器地址必须按BCD码的编码规律,即每16个存储单元中,只有前十个单元存放波形数据,后6个存储单元不用。
自动归零和按BCD码的规律存放数据,是本设计的巧妙之处。
图6 相位累加地址扫描电路
2.4 双极性输出实现
本函数信号发生器信号输出要求为双极性,输出电路原理图如图7所示。在此采用DAC0832模数转换芯片。图中运算放大器为具有双极性工作电压的TL082。
图7 模数转换及双极性输出原理图
由图可得: (11)
(12)
为DAC0832提供的参考电压,输入的波形数据。由上两式可得:
(13)
取,当时,;时,;时,。由上述分析可看出,取不同数据时(0~255),可得对称的双极性波形输出。再取,则式(11)可表示为:
(14)
由上式可知,输出信号的幅度受的改变而改变。
2.5 滤波器设计
输入DAC0832的波形数据是经量化的离散数据,而DAC0832分辨率为1/255,因此输出的波形具有非连续性,是阶梯状的。假设DAC0832的基准电压为+5V,则每个阶梯幅度为0.0195V。阶梯宽度为采样频率的倒数。这相当于给输出波形叠加了高频干扰,为确保产生波形的质量,减少波形失真度,使输出波形光滑,须用低通滤波器把高频分量滤掉。在此采用自动线性跟踪Butterworth有源滤波器。图8为一常见的二阶有源低通滤波器,
图8 有源二阶低通滤波器原理图
其传递函数为:
(15)
式中为电路直流增益,为电路阻尼率,为电路固有频率,分别为:
(16)
(17)
(18)
以代入(15)式,求得其幅频特性:
(19)
式中为频率比,时的频率称为截止频率。
由式(19)可得,当时,其幅频特性最为平坦。当各种信号频率小于滤波器截止频率时,才能“无失真”地传输,也即幅度不会放大或衰减。当,,即时,由式14、15、16有:
(20)
(21)
令(18)式,得,则有:
(22)
由上式可知,当为定值时,电路截止频率与成反比。因此只要电阻按的比例关系线性改变,还可实现滤波器截止频率的线性跟踪滤波。
2.6 人机对话模块
系统的人机对话模块使用了键盘/显示采用HD7279A,它是一种管理键盘和LED显示器的专用智能控制芯片。它能对8位共阴极LED显示器或64个LED发光管进行管理和驱动,同时能对多达8×8的键盘矩阵的按键情况进行监视,其内部含有译码器,有两种译码方式,可直接接受16进制码, 具有消隐、闪烁、左移、右移、段寻址等多种控制指令,并具有自动消除键抖动并识别按键代码的功能,从而可以提高CPU工作的效率。HD7279A片内具有驱动电路,它可以直接驱动1英吋及以下的LED数码管,与微处理器之间采用串行接口,其接口电路和外围电路简单可靠,占用口线少,加之它具有较高的性能价格比,因此,在微型控制器、智能仪表、控制面板和家用电器等领域中日益获得广泛的应用。
HD7279采用同步串行外设接口SPI(Serial Peripheral Interface)总线与单片机相连。SPI总线是Motorola公司提出的一个同步串行外设接口,用于CPU与各种外围器件进行全双工、同步串行通讯。SPI可以同时发出和接收串行数据。它只需四条线就可以完成MCU与各种外围器件的通讯。当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。主SPI的时钟信号(SCK)使传输同步。
HD7279与微处理器连接的4线分别为CS、CLK、DATA、KEY。其中CS为片选信号(低电平有效)。当微处理器访问HD7279A(读键号或写指令)时,应将片选端置为低电平。DATA为串行数据端,当向HD7279A发送数据时,DATA为输入端;当HD7279A输出键盘代码时,DATA为输出端。CLK为数据串行传送的同步时钟输入端,时钟的上升沿表示数据有效。KEY为按键信号输出端,在无键按下时为高电平;而有键按下时此引脚变为低电平并且一直保持到键释放为止。
HD7279A指令系统由6条纯指令、7条带数据指令和1条读键盘指令组成。这里对编程中用到的一些指令作介绍。
1. 纯指令
(1) 复位指令。指令代码为A4H,其功能为清除所有显示,包括字符消隐属性和闪烁属性。
(2) 测试指令。指令代码为BFH,其功能为将所有的LED点亮并闪烁,可用于自检。
2. 带数据的指令(由双字节组成)
(1) 按方式0译码下载指令
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
0
a2
a1
a0
DP
X
X
X
d3
d2
d1
d0
X X:无影响 第1字节为指令,其中a2,a1,a0代表显示位地址:
a2,a1,a0
7
6
5
4
3
2
1
0
显 示 位
8
7
6
5
4
3
2
1
显示位8为最高位。 第2字节为显示内容,其中DP为小数点控制位,DP=1,小数点显示;DP=0,小数点熄灭。 d3 d2 d1 d0为数据,按方式0译码时数据和显示的关系如下:
d3d2d1d0
00H 01H 02H 03H 04H 05H 06HH 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH
显示内容
0 1 2 3 4 5 6 7 8 9 - E H L P 空
(2) 按方式1译码下载指令
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
0
1
a2
a1
a0
DP
X
X
X
d3
d2
d1
d0
该指令和按方式0译码下载指令的含义基本相同。按方式1译码时数据和显示的关系如下:
d3d2d1d0
00H 01H 02H 03H 04H 05H 06HH 07H 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH
显示内容
0 1 2 3 4 5 6 7 8 9 A B C D E F
(3) 不译码下载指令
1
0
0
2
0
a2
a1
a0
DP
A
B
C
D
E
F
G
a2 a1 a0仍为位地址,第2字节仍为显示内容,其中DP和A~G分别代表小数点和LED显示器的7段,相应位为1时,该段点亮;为0时,该段熄灭。
(4) 闪烁控制指令
1
0
0
0
1
0
0
0
d8
d7
d6
d5
d4
d3
d2
d1
该指令规定了每个数码管的闪烁属性。d1~d8分别对应第1到第8个数码管,该位为1不闪烁;该位为0闪烁。缺省状态为所有数码管均不闪烁。
(5) 消隐控制指令
1
0
0
1
1
0
0
0
d8
d7
d6
d5
d4
d3
d2
d1
该指令规定了每个数码管的消隐属性。d1~d8分别对应第1到第8个数码管,该位为1显示;该位为0消隐。应该注意的是至少要有1位保持显示状态,如果全部消隐则该命令无效。
(6)读键盘数据指令15H
0
0
0
1
0
1
0
1
d8
d7
d6
d5
d4
d3
d2
d1
该指令从HD7279A读出当前的按键代码。与其它指令不同,此命令的前一个字节00010101B为微控制器传送到HD7279A的指令,而后一个字节d0—d7则为HD7279A返回的按键代码,其范围是0—3F(无键按下时为oxFF),各键键盘代码的定义,参阅附图,图中的键号即键盘代码。
当HD7279A检测到有效的按键时,KEY引脚从高电平变为低电平,并一直保持到按键结束。在此期间,如果HD7279A接收到“读键盘数据指令”,则输出当前按键的键盘代码;如果在收到“读键盘指令”时没有有效按键,HD7279A将输出FFH。
3 系统的软件设计
3.1 波形数据获取
按双极性输出的要求,经推导得出输出波形量化数据的数学公式:
正弦波:
(23)
锯齿波:
(24)
方波:
(25)
根据上述公式,将的取值离散化,即取,即可得到波形量化数据。
3.2主程序设计
本系统主程序模块主要完成的工作是对系统的初始化,包括对HD7279的初始化、发送显示数据、输出波形。初始时默认输出波形为正弦波,输出波形幅度为5V,频率为100Hz;在初始化的同时,对键盘进行扫描,判断是否有相应功能键按下,如有相应功能键按下,则根据所需要的功能进行相应的操作。其流程图如图9所示。
图9 主程序流程图
需说明的是将单片机的P1.7、P1.6置成01或10,就得到三角波或方波。
4 结束语
本文阐述了高精度数字式函数信号发生器的软、硬件设计。利用单片机以及可编程分频器、数字锁相环、地址发生器、波形数据存储器、D/A转换等部件,采用了直接数字频率合成技术(DDS),以及锁相环(PLL)倍频技术相结合的方法。此函数信号发生器调节灵活方便,输出波形精度高且波形较为稳定。本设计以多功能、低功耗、操作方便、结构合理、易于调试为主要设计原则。在系统设计过程中,我们力求硬件线路简单,充分发挥软件编程方便灵活的特点,并最大限度挖掘单片机片内资源,来满足系统设计要求。本系统所采用的器件大都属于最常用、最普通的集成器件,但所得到的结果已基本达到预期的效果。
正弦信号发生器基本部分参考电路器件清单
名称
数量
备注
AT89C51
1
配插座(DIP40)
74LS373
1
配插座(DIP20)
27C64
1
配插座(DIP28)
CD4046
1
配插座(DIP16)
CD4518
1
配插座(DIP16)
8254
1
配插座(DIP24)
DAC0832
1
配插座(DIP20)
HD7279
1
配插座(DIP28)
TL084
1
配插座(DIP14)
按扭
21
4插脚
晶振
1
6MHZ
LED数码管
8
共阴(超高亮)(配DIP40插座两个)
电容
2
30pf(瓷片)
1
1UF(105)独石
1
15P(瓷片)
1
50P(瓷片)
3
103(独石)
4
104(独石)
电阻
1
1K5(1/4W)
1
1M(1/4W)
3
4K7(1/4W)
5
10K(1/4W)
2
20K(1/4W)
8
100K(1/4W)
8
200(1/4W)
接插件
1
四芯(间距:3mil,2mil)
导线
若干
四色(红、黑、黄、绿)
焊锡丝
若干
双面线路板
1
150×110mm
主要设备:
① 单片机仿真器(带仿真头)
② 焊接实验工具箱一套
③ 5V、±15V电源
④ 示波器
高精度数控低频正弦信号发生器参考电路原理图
附图1 系统波形发生信号模块原理图
附图2 系统键盘/显示模块原理图
低频正弦信号发生器PCB实物图
附图4 系统实物图
HD7279A基本部分源程序清单
(HD7279A Test Program)
;*********************************
; RAM定义
;*********************************
BIT_COUNT DATA 07FH
TIMER DATA 07EH
TIMER1 DATA 07DH
TEN DATA 07CH
DATA_IN DATA 020H
DATA_OUT DATA 021H
;*******************************************
; I/O口定义
;*******************************************
DAT BIT P1.2 ;HD7279A的DATA连接于P1.2
KEY BIT P3.2 ;HD7279A的KEY连接于P3.2
CS BIT P1.0 ;HD7279A的CS连接于P1.0
CLK BIT P1.1 ;HD7279A的CLK连接于P1.1
ORG 000H
LJMP START
ORG 100H
START: MOV SP,#2FH
MOV P1,#11011011B ;I/O口初始化
MOV TIMER,#50 ;延时约25MS
START_DELAY: MOV TIMER1,#255
START_DELAY1: DJNZ TIMER1,START_DELAY1
DJNZ TIMER,START_DELAY
MOV DATA_OUT,#10100100B ; 发复位(清除)指令
LCALL SEND
SETB CS ; 恢复CS为高电平
MAIN: JB KEY,MAIN ;检测是否有键按下
MOV DATA_OUT,#00010101B ;有键按下,发送读键盘指令
LCALL SEND
LCALL RECEIVE
SETB CS ;设CS为高电平
MOV B,#10 ;16 进制--BCD转换
MOV A,DATA_IN
DIV AB
MOV TEN,A
MOV DATA_OUT,#10100001B ;发2次左移指令,使当前显示
;内容左移,留出空位供显示新
;数据
LCALL SEND ; 发送指令到HD7279A
MOV DATA_OUT,#10100001B
LCALL SEND
MOV DATA_OUT,#10000001B ;下载数据且译码指令(第2位)
LCALL SEND
MOV DATA_OUT,TEN ; 发送十位数字到HD7279A
LCALL SEND
MOV DATA_OUT,#10000000B ; 下载数据且译码指令(第1
;位)
LCALL SEND
MOV DATA_OUT,B ;发送个位数字到HD7279A
LCALL SEND
SETB CS
WAIT: JNB KEY,WAIT ;等待按键放开
LJMP MAIN
;*******************************************
; 发送1个字节到 HD7279,高位在前
;*******************************************
SEND: MOV BIT_COUNT,#8 ;设定位记数器 =8
CLR CS ; 设CS为低电平
LCALL LONG_DELAY ;长延时
SEND_LOOP: MOV C,DATA_OUT.7 ;输出1位
MOV DAT,C
SETB CLK ;设CLK为高电平
MOV A,DATA_OUT ;待发送数据左移
RL A
MOV DATA_OUT,A
LCALL SHORT_DELAY ;短延时
CLR CLK ;设CLK为低电平
LCALL SHORT_DELAY ;短延时
DJNZ BIT_COUNT,SEND_LOOP ;检查是否8位均发送完毕
展开阅读全文