函数信号发生器的设计与实现 (1)资料 下载本文

{ for(t=0;t<(pow(2,(f-1))-1);t++) { drawPoint((x+t*128/pow(2,f)),47-(x-128/pow(2,f))*(pow(2,(f-3)))*(A1-9),1);

drawPoint((1.5*256/pow(2,f)+t*128/pow(2,f)-1-x),47-(x-128/pow(2,f))*(pow(2,(f-3)))*(A1-9),1); } } } Am[0]=(char)(A1/10)+0x30; Am[2]=(char)(A1)+0x30; LcmPrint(4,0,\幅度:\ LcmPrint(4,1,Am); Fr[0]=(char)(f/100)+0x30; Fr[1]=(char)(f0)/10+0x30; Fr[3]=(char)(f)+0x30; LcmPrint(4,2,\频率:\ LcmPrint(4,3,Fr); }

绘制正弦波函数:

void drawSin(unsigned int A1,f) //绘制 A*sin(2*Pi*f)图像。参数A幅度,格为 几点几伏,参数f频率,格式为几十几点几赫兹 { unsigned char x,y; char Am[]=\ char Fr[]=\ for(x=0;x<32;x++) //在液晶屏左半屏绘出Sin函 数图像(不会随频率f改变) { y=(unsigned char)(A1*sin(((double)(x*f))/10)); drawPoint(x,31-y,1); drawPoint(63-x,31+y,1); }

Am[0]=(char)(A1/10)+0x30; Am[2]=(char)(A1)+0x30; LcmPrint(4,0,\幅度:\ LcmPrint(4,1,Am); Fr[0]=(char)(f/100)+0x30;

Fr[1]=(char)(f0)/10+0x30; Fr[3]=(char)(f)+0x30; LcmPrint(4,2,\频率:\ LcmPrint(4,3,Fr); }

绘制方波函数:

void drawSquare(float A2,unsigned int f) //绘制方波图像。参数A幅度,格式为几 点几伏,参数f频率,格式为1--1000赫兹 { unsigned int x,y; unsigned int t; char Am[]=\ char Fr[]=\ if(f==1) { for(x=0;x<64;x++) { drawPoint(x,31,1); drawPoint(64,31-A2/5*31,1); } for(y=31-A2/5*31;y<32;y++) drawPoint(64,y,1); }

else if(f==2) { for(x=0;x<64;x++) { drawPoint(x/f,31,1); drawPoint((127-x)/f,31-A2/5*31,1); } for(y=31-A2/5*31;y<32;y++) drawPoint(64/f,y,1); for(y=31-A2/5*31;y<32;y++) drawPoint(128/f,y,1); } else { for(x=0;x<128/(pow(2,f));x++) {

//在液晶屏左半屏绘出 方波图像(不会随频率f改变) //在液晶屏左半屏绘出 方波图像(不会随频率f改变)

drawPoint(x,31,1); drawPoint(256/(pow(2,f))-x,31-A2/5*31,1); } for(y=31-A2/5*31;y<32;y++) drawPoint((128/(pow(2,f))),y,1); for(y=31-A2/5*31;y<32;y++) drawPoint((256/(pow(2,f))),y,1); for(x=256/(pow(2,f));x<384/(pow(2,f));x++) //在液晶屏左半屏绘出 方波图像(不会随频率f改变) { for(t=0;t<(pow(2,(f-2))-1);t++) { drawPoint((x+t*(256/(pow(2,f)))),31,1); drawPoint((x+128/(pow(2,f))+t*(256/(pow(2,f)))),31-A2/5*31,1); } } for(y=31-A2/5*31;y<32;y++) { for(t=0;t<(pow(2,(f-2))-1);t++) { for(y=31-A2/5*31;y<32;y++) drawPoint(((t+1.5)*(256/(pow(2,f)))),y,1); for(y=31-A2/5*31;y<32;y++) drawPoint(((t+2)*(256/(pow(2,f)))),y,1); } } } Am[0]=(char)A2+0x30; Am[2]=((char)(A2*10))+0x30; LcmPrint(4,0,\幅度:\ LcmPrint(4,1,Am); Fr[0]=(char)(f/1000)+0x30; Fr[1]=(char)((f00)/100)+0x30; Fr[2]=(char)((f0)/10)+0x30; Fr[3]=(char)(f)+0x30; LcmPrint(4,2,\频率:\ LcmPrint(4,3,Fr); }

五.测试及分析

(1).测试说明:正弦波、矩形波、三角波信号的输出,通过对独立按键来实现其不同波形的输出以及其幅度和频率的改变。

(2).测试过程

当程序下进去时经过初始化,数码管显示的是0,液晶屏的上不显示波形,当KEY1按一下时,此时数码管显示1,输出波形为三角波,液晶屏的上显示波形以及波形的幅度之和频率值,按两下时数码管显示2,输出为正弦波,按三下时数码管显示3,输出为方波波。另外两个开关可以调节幅度和频率,范围分别如下:

正弦波、三角波频率调节范围:0.1-50HZ 输出幅值:1.0-1.5V 方波频率调节范围:1Hz-1KHz 输出幅值:5V

当按KEY2按一下时输出波形的频率增加,按KEY3按一下时输出波形的频率减小。当按KEY4按一下时输出波形的幅度增加,按KEY5按一下时输出波形的幅度减小。

12864液晶屏显示的波形图如下:

图(8)三角波图行