主函数调用了各个子程序的初始化,通过对按键次数的判断来实现不同的功能,输入波形。数值为0、1、2、3时分别输出方波、正弦波、阶梯波、锯齿波。
4
f开始
调用i
it函数,开中断
输出方波
输出正弦波Nkey0Y输出方波输出正弦波key1YNkey2Y输出阶梯波Nkey3YN继续判断
输出锯齿波
图8主函数流程图
(2)按键计数函数流程图在按键计数函数中,对key进行循环加1的操作,每按一次,数值加1。数值加到3时,再按动按键,数值跳回1。
开始
key0输出波形
KeyYKey4?N
图9按键计数函数流程图
(3)波形子程序调用函数在设计中,对正弦信号进行采样,通过查表来实现输出不同的幅度值。对于方波,
5
f赋予初值FFH,延时一段时间后,赋值00H,再延时一段时间后,输出FFH,以此循环。在实现阶梯波时,通过查表和延时来实现。锯齿波则是通过256个采样点赋值依次减1得以实现。为满足设计要求中输入频率为200hz这一要求,在程序中在对波形各个采样点赋值之外,还设计了相应的延时。波形子程序的调用就是对这两项进行调用。四种波形的流程图如下。
开始
赋最高值0xFF
调用方波延时单元
赋最低值0x00
调用方波延时单元
输出方波
返回
图10方波子程序调用流程图
开始
调用si
函数的数据表
调用正弦波的延时单元
输出正弦波
返回
图11正弦波子函数调用流程图
6
f开始
i0
调用阶梯波数据表ii8
Y调用阶梯波延时单元
N
输出阶梯波
返回图12阶梯波子程序调用
7
f开始
i0
DAiii256
Y调用阶梯波延时单元
N
输出阶梯波
返回
图13锯齿波子函数调用流程图
仿真说明:四、Proteus仿真说明:
连接好原理图后,双击AT89C51芯片,将后缀为hex的文件添加到单片机中,点击运行。
8
f图14添加程序
正确运行后,示波器中显示正弦波。频率约为200hz。波形如下
图15方波波形
按动按键一下,波形转变成正弦波。皮率约为200hz。波形如下
图16正弦波波形
再按动一次按键,波形转换成阶梯波。频率约为200hz。波形如下
9
f图17阶梯波波形
再按动一次按键,波形转变成锯齿波。频率为200hz。波形如下
图18锯齿波波形
再按动一次按键,波形回到最初显示的方波。
五、体会及合理化建议
10
f通过这次的课设,我熟悉了基于AT89C51单片机的数字式简易低频信号发生器的设计,学会了如何利用数模转换器DAC0832来实现波形,和通过按键控制切换波形。在这次课程设计的过程中遇到了一些难题,比如键控部分。起初的构想是用P1口来控制按键,给P1口赋初值01H,输入第一r