原标题:单片机信号发生器程序
囿了 D/A 这个武器我们就不仅仅可以输出了,可以输出任意波形了比如、三角波、等等。以正弦波为例首先我们要建立一个正弦波的波表。这些不需要大家去逐一计算可以通过搜索找到正弦波数据表,然后可以根据时间参数自己选取其中一定量数据作为我们程序的正弦波表我们的程序代码选取了 32 个点。
(此处省略可参考之前章节的代码)
(此处省略,可参考之前章节的代码)
/* 按键动作函数根据键碼执行相应的操作,keycode-按键键码 */
//在 3 种波形间循环切换
/* 设置输出波形的频率freq-设定频率 */
/* T0 中断服务函数,执行按键扫描 */
/* T1 中断服务函数执行波形輸出 */
//循环输出波表中的数据
这个程序可以通过“向上”按键来实现波形输出切换,波形输出的定时刷新由定时器 T1定时来完成改变 T1 的定时周期即可改变波形的输出频率。D/A 输出没有办法接到显示界面所以我们用抓出来波形给大家看一下,如图 17-11、图 17-12、图 17-13 所示
这几张图可以直觀的看到我们程序输出的波形。细心的同学会发现我们波形上有很多小锯齿没有平滑的连起来。这是因为我们 DA 最多只能输出 0~Vref 之间的 256 个離散的电压值而不是连续的任意值,所以每个离散值都会持续一定的时间然后跳变到下一个离散值,于是就呈现出了波形上的这种锯齒在实际开发中,我们只需要在 DA 后级加一级就可以让带锯齿的波形变得平滑起来。