电子科学综合设计
DAC0832与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的极性与参考电压的极性相反,数字量与模拟量的转换关系为VOUT1??VREF????数字量??? 256??若D/A转换器输出为双极性,如图3-6所示。运算放大器B的作用是把运算放大器A的单向输出电压转换成双向输出电压。其原理是将B的反向输入端通过电阻R2与参考电压VREF相连,VREF经R2向B提供一个偏流I1,其电流方向与I2相反,因此运算放大器B的输入电流为I1、I2的代数和。则D/A转换器的总输出电压为:
VOUT2?R3R3??-??VOUT1?VOUT1?VREF?。 ??VREF。 因R5= R6=2 R7,所以VOUT2?-?2RR2??1(2)显示模块 1602液晶器件
3.2软件流程图 (1)主程序流程图
主程序开始 开转换器的DAC 寄存器 关闭输入输入寄存器 初始显示子程序 21
电子科学综合设计
初始waveform=0 设置定时器0和外 部中断
While(1)循环等待 主程序主要设置了D/A转换器件DAC0832的工作模式,定义了DAC0832数据端口。调用了显示初始子程序,设置了定时器工作模式及定时中断和外部中断。 (2)定时中断程序流程图
是
定时中断的作用是用来改变相应波形的频率,通过改变TH,TL的值就可以改变定时时间,从而改变相应波形的频率。Waveform的值代表不同的波形,Waveform=0代表正弦波,Waveform=1代表锯齿波,Waveform=2代表方波,根据Waveform值调用对应的波形输出子程序。
22
定时器中断程序开始 设置TH,TL寄存器 Waveform=0 是 正弦波输出子程序 否 Waveform=1 否
Waveform=2 锯齿波输出子程序 方波输出子程序 返回 电子科学综合设计
(3)外部中断按键子程序流程图
外部中断是由按键引起的P3.2引脚下降沿触发的,波形切换、频率增减都是通过外部中断和定时中断相结合完成的,外部中断程序中只是改变了相应的参数或中间值(如波形形式waveform及相应波形频率wavefreq[waveform]和定时器0的定时初值寄存器的中间值T_temp)另外外部中断程序还对波形的频率做了数据处理并送到液晶屏显示。
(4)正弦波子程序流程图
23
外部中断程序开始 关总中断 获取P3口高四位 否 P3.4=0 是 是 Waveform++ P3.5=0 是 wavefreq[waveform]++ 设定T_temp取值方式 否 P3.6=0 wavefreq[waveform]-- 求得当前频率值 显示当前率值及对应的波形开总中断与定时器中断 返回
电子科学综合设计
正弦波子程序 DAdate=sine_tab[Wavecount] Wavecount++ Wavecount>255 否 是 Wavecount=0 开DAC0832输入寄存器 关DAC0832输入寄存器 返回 正弦波主要是通过单片机向D/A转换器DAC0832输送8位二进制数产生的,本方案选取的256个8位二进制数存放在数组sine_tab[],中wavecount的作用就是抽点计数范围是0~255,本方案中DAC0832工作在单缓冲状态,DAC寄存器处于直通状态,只要在相应的时间打开和关闭输入寄存器就能完成数据输送。 (5)三角波子主程序流程图
Wavecount=0 Wavecount>63 是 开DAC0832输入寄存器 否 Wavecount++ DAdate=sawtooth_tab[Wavecount] 三角波子程序 24
电子科学综合设计
关DAC0832输入寄存返回 三角波的产生方法以正弦波类似都是通过取点来产生的,本方案取了64个点,全部存
放在sawtooth_tab[Wavecount]中。 (6)方波子程序流程图
是
(7)初始显示子程序流程图
返回 在第二行显示press No.1 key! 在第一行显示select wave 初始化LCD
初始显示子程序 返回 关DAC0832输入寄存器 开DAC0832输入寄存器 DAdate=0x00 DAdate=0xff judge=1 否 Judge=~judge 方波子程序
25