笔者制作了一个简易的信号等发生器,可产生正弦波、三角波、方波等。如果电路及源程序经过适当改动,还能产生任意的波形。该信号发生器利用单片机的定时器0进行定时,使单片机往其数据端(P0口)定时发送数据来控制DAC0832,实现由数字量向模拟量的变换,从而产生各种需要的波形。其电路硬件结构简单,适合电子爱好者制作,且源程序用C语言编写,容易理解。该电路实现的功能是,当按一下SB1产生正弦波,按两下产生三角波,按三下产生方波。另外该电路还可以加大、缩小和显示产生信号的频率。
一、硬件电路(参照原理图1)

1.电源:
AT89C52单片机需要5V直流稳压电源。为了使电路性能更好,可以在74LS138和DAC0832的V\(_{CC}\)和GND上跨接一个0.1μF的瓷片电容,进行滤波消噪。
2.晶振时钟电路:
12MHz的晶振、C1、C2构成了简单的晶振振荡电路,为CPU提供12MHz的时钟。
3.操作控制电路:
利用键SB1控制发出正弦波、三角波、方波; SB2键加大发波频率;SB3键减小发波频率; SB4键控制数码管DS1、DS2、DS3分别显示频率的百位、十位、个位。C3、R1、R2和 SB键构成了简单的上电复位电路。
4.地址译码及数据锁存电路:
地址译码电路用一片三-八译码器U6即可,而U3~U5组成数据锁存电路。
5.D/A转换电路:
采用芯片U2(DAC0832),将单片机输出的数字信号转变为模拟信号,经U4A(LM342)放大输出,将示波器的一个通道接到OUT端即可看到发出的相应波形。
二 、软件系统
软件系统分为两个部分:主程序部分,中断服务程序产生信号部分。
主程序主要功能是判断键是否按下,另外还有设置定时器,设置中断,循环往复检查是否有键按下等功能。
中断服务程序的主要功能是当定时器定时一到,就关闭定时器,并且判断是哪个键按下的,然后根据按下的键来发不同类型的波形。
用C语言编写的源程序见本期配刊光盘。
文/杜丽芳