基于51单片机的信号发生器设计

本设计采用AT89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键和LCD液晶显示电路。电路采用单片机和一片DAC0832数模转换器组成数字式低频信号发生器,可产生正弦波、矩形波、锯齿波和三角波四种波形。系统通过单片机产生数字信号,通过DAC0832转换为模拟信号,再通过放大器LM324就可以得到双极性的各种波形,最终由示波器显示出来。通过键盘来控制四种波形的类型选择、频率变化,并通过液晶1602显示其各自的波形类型以及频率数值。

系统软件主要是用来控制信号发生器系统按照设计的逻辑进行运行。在软件设计上,根据功能分成了多个模块编程,主要包括:主程序模块、四种不同的波形产生模块、按键处理模块、外部中断模块、液晶显示模块等。
3.1 系统主程序流程框图
系统主程序流程图如图16所示,源程序见附件。

图16 系统主程序流程图
3.2 信号产生子程序
本系统采用编程的方法,来输出四种不同的波形即正弦波、矩形波、三角波、锯齿波。各种波形的产生方法如下。
3.2.1 正弦波发生子程序
正弦波的产生比较特殊,它不能由单片机直接产生,只能由如图17所示的阶梯波来向正弦波逼近。很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就越接近正弦波。

图17 正弦波信号的产生
先假定正弦波的振幅是2.56 V,则波谷对应的数字量为最小值00H,波峰对应的数字量为最大值FFH。将正弦波的第一个周期的波形按角度均分为若干等份,并计算出各点对应的电压值,电压值计算方法:Vx=2.5·(1+sinθ),因为00H~FFH对应的数字量为0~255,所以根据算出的电压就可直接写出各点所对应的数字量。单片机将一个周期的数字量存入一定的存储区域中,然后依次循环取出这些数字量,并送D/A电路转换成阶梯波,即近似的正弦波输出。图18为正弦波产生的流程图。

图18 正弦波产生的流程图
3.2.2 矩形波发生子程序
如图19所示,矩形波的实现比较简单。首先定义一个无符号字符型变量i=0,使自变量i不断的自动加1,若i的值小于squa_num,将P0口赋值为0xFF;若i的值大于squa_num,则将P0口赋值为0x00。当i自加到256后又自动变为0,以此循环,即可得到矩形波。当squa_num=128时,此时输出的为方波。调节squa_num的大小,即可实现矩形波占空比的调节;调节延时时间的大小,即可实现矩形波频率的改变。

图19 矩形波产生流程图
3.2.3 三角波发生子程序
三角波中的斜线用一个个小台阶来逼近,当台阶间隔很小时,波形基本上近似一直线。首先定义一个无符号字符型变量i=0,使自变量i不断的自动加1,若i的值小于128,将P0口赋值为i;若i的值大于128,则将P0口赋值为256-i。当i自加到256后又自动变为0,以此循环,从而P0口实现了周期性的数字量变换,在经过数模转换后转变成模拟信号,经运算放大电路后就得到了周期性的三角波。三角波产生流程图如图20所示。

图20 三角波发生流程图
3.2.4 锯齿波发生子程序
锯齿波的实现过程与三角波类似,也是定义一个变量i=0,并使P0=i,自变量i不断的自动加1,直到加到255,然后i又可以自动归为0,再不断的重复上过程。在此过程中,P0口的值也随着i一样变化,经数模转换DAC0832后,周期性逐一变化的数字量就转换为锯齿波输出了。通过调节P0口每相邻两个值之间的延迟时间,就可以改变锯齿波的频率。图21为锯齿波发生流程图。

图21 锯齿波发生流程图
3.3按键处理子程序
在本设计中,主要是通过按键来调节输出波形的类型、频率的大小及矩形波的占空比,采用程序控制扫描方式,时刻监视着有无按键按下。为了能够更准确的判断按键的情况,一旦有按键按下时,先延时去除按键的抖动,再判断是哪个按键按下,从而单片机对应的执行相应的程序。图22为按键处理流程图。

图22 按键处理流程图
3.4液晶显示子程序
LCD LM016L的显示函数很简单,只要严格按照其时序图操作,并结合其相关指令集,写好LCD的初始化程序,清屏程序,写指令程序,写数据程序,读数据程序等一系列驱动程序,即可完成LCD的所有显示需要。在本设计中,由于需要显示的内容比较多,且有些需要重复显示,有些只要显示一次,故只画出液晶显示的基本流程,如图23所示。

图23 液晶显示流程图
3.5 INT0中断子程序
中断子程序是用来控制输出波形的选择及将输出波形的类型在LCD液晶显示屏上显示出来。当波形选择按键K1按下时,进入中断程序中,此时波形选择标识WaveChoice加1,LCD液晶显示屏上显示出相应的波形类型。中断结束后,主程序中根据WaveChoice的值输出相应的波形。图24为INT0中断流程图。

图24 INT0中断流程图

你可能感兴趣的:(基于51单片机的信号发生器设计)