基于单片机的智能信号发生器设计
开始 A=00H A送到0832输出 延时 A=FFH A送到0832输出 延时
图4-5 方波程序流程图
方波产生是当A中的内容为0时,输出对应模拟量,然后延时,当A中的内容为0FFH时,同样输出对应模拟量,再延时,从而得到方波。
方波产生子程序如下:
uchar code juxing[64]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
255,255,255,255,255,255,255,255,
255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0
};
22
基于单片机的智能信号发生器设计
延时子程序流程图如图4-6所示
开始 R6赋初值 R7赋初值 R7减1,R7是否 为0? Y N N R6减1,R6是否 为0? Y 返回 图4-6 延时子程序流程图
延时程序如下:
void delay(uint xms) //延时函数 {
int a,b;
for(a=xms;a>0;a--) for(b=110;b>0;b--);
}方波的上限和下限的延时时间为:3ms S=1+(1+1+2×256+2)×7=3612μS
23
基于单片机的智能信号发生器设计
5 测试结果
在确定编程思路并将各部分的程序及各子程序编好,就可以对本文所设计的硬件电路和系统软件进行总体测试了。本文调试软件采用的是Keil51,它是众多单片机应用开发软件中优秀软件之一,界面友好,易写易操作。程序在Keil51软件中调试完毕后,会自动生成.hex文件,再通过编程器下载到STC89C51中,然后直接加载到protues软件电路中进行仿真,即可得到测试结果。
当按键1拨下时,波形为锯齿波,同时指示灯1发光。仿真图如图5-1所示:
图5-1 锯齿波仿真图
当按键2拨下时,波形为三角波,同时指示灯2发光。仿真图如图5-2所示:
图5-2 三角波仿真图
24
基于单片机的智能信号发生器设计
当按键3拨下时,波形为正弦波,同时指示灯3发光。仿真图如图5-3所示:
图5-3 正弦波仿真图
当按键4拨下时,波行为方波,同时指示灯4发光。仿真图如图5-4所示:
图5-4 方波仿真图
在对系统进行波形仿真时可以在protues软件的虚拟示波器上观察到锯齿波、三角波、正弦波和方波的波形,仿真得到的波形较为理想。从而可得到以下结论:本文设计的硬件电路和系统软件均能满足此次设计的要求。
25
基于单片机的智能信号发生器设计
6 结论
基于单片机的智能信号发生器的设计这个课题的设计目的是充分运用大学期间所学的专业知识,考察现在正在使用的信号发生器的基本功能,完成一个基本的实际系统的设计全过程。关键是这个实际系统设计的过程,在整个过程中我可以充分发挥单片机知识,特别是这个信号发生器的设计中涉及到一个典型的控制过程,即通过单片机STC89C51控制一个模数转换器DAC0832产生所需要的电流,然后使用两个运算放大器LM358将其电流输出线性地转换成电压输出,通过程序的控制,可以产生一系列有规律的波形。这样的一个信号发生装置在控制领域中有相当广泛的应用范围。
此设计方案硬件较为简单,主要是由单片机STC89C51跟DAC0832两个芯片构成,连线也较简便。键盘电路使用的是独立未编码结构,一个键控制一个波形。显示电路主要是由发光二极管构成,利用发光二极管的导通即发光的特性来显示是哪个波形的输出,简单易懂。软件程序方面较为复杂一点,此方案主要是靠程序的控制,由四个波形产生的子程序加上有承上启下作用的主程序构成,外加能够改变各波形频率的延时子程序的调用,程序设计思路还是比较清晰的。其中正弦波的程序最为繁琐,因为是通过查表指令产生的,所以要列出一个含有较多字符的表格。但总体设计结果还是相当令人满意的,硬件电路和软件程序都能满足本设计的各方面要求,且具有电路简单、易控制、性价比较高等优点。
当然本设计还是存在一些不足之处,比如在程序设计中如何实现程序结构的最优化以达到较高的质量,显示电路以及键盘电路都有待进一步改进。
26