设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。

二、要求
1.基本要求
(1)具有产生正弦波、方波、三角波三种周期性波形的功能。
(2)用键盘输入编辑生成上述三种波形(同周期)的线性组合波形,以及由基波及其谐波(5次以下)线性组合的波形。
(3)具有波形存储功能。
(4)输出波形的频率范围为100Hz~20kHz(非正弦波频率按10次谐波计算);重复频率可调,频率步进间隔≤100Hz。
(5)输出波形幅度范围0~5V(峰-峰值),可按步进0.1V(峰-峰值)调整。
(6)具有显示输出波形的类型、重复频率(周期)和幅度的功能。
2.发挥部分
(1)输出波形频率范围扩展至100Hz~200kHz。
(2)用键盘或其他输入装置产生任意波形。
(3)增加稳幅输出功能,当负载变化时,输出电压幅度变化不大于±3%(负载电阻变化范围:100Ω~∞)。
(4)具有掉电存储功能,可存储掉电前用户编辑的波形和设置。
(5)可产生单次或多次(1000次以下)特定波形(如产生1个半周期三角波输出)。
(6)其它(如增加频谱分析、失真度分析、频率扩展>200kHz、扫频输出等功能)。

谁有电路图和论文报告啊?急!

第1个回答  2008-03-28
/////P2口接4*4键盘的行线和列线;红灯亮时进行频率输入;绿灯亮时进行占空比输入;频率值暂定在100到60KHZ之间;输入频率和占空比时要输够六位整数,不够的在前面补0;占空比以百比数(0-100)形式存在。///////////
/////////方波发生器资料。空军工程大学导院501明明,2007.10.10初稿/////////
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
sbit coma=P1^0;
sbit comb=P1^1;
sbit comc=P1^2;
sbit comd=P1^3;
sbit come=P1^4;
sbit red=P1^5;
sbit green=P1^6;
sbit new=P1^7;
sbit Q=P3^7;
int i,x,y;

/* 延时函数 */
void delay(void)
{
uchar j;
for (j=300;j>0;j--);
}

/*数字对应的共阳极段码*/
uchar getcode(uchar i)
{
uchar p;
switch (i)
{
case 0: p=0xC0; break; /* 0 */
case 1: p=0xF9; break; /* 1 */
case 2: p=0xA4; break; /* 2 */
case 3: p=0xB0; break; /* 3 */
case 4: p=0x99; break; /* 4 */
case 5: p=0x92; break; /* 5 */
case 6: p=0x82; break; /* 6 */
case 7: p=0xF8; break; /* 7 */
case 8: p=0x80; break; /* 8 */
case 9: p=0x90; break; /* 9 */
default: break;
}
return(p);
}
/////////显示函数/////////
void display(int t)
{int a=t/10000,b=t/1000%10,c=t/100%10,d=t/10%10,e=t%10;
P1=0x00;
P0=getcode(a);coma=1;comb=0;delay();
P0=getcode(b);coma=0;comb=1;delay();
P0=getcode(c);comb=0;comc=1;delay();
P0=getcode(d);comc=0;comd=1;delay();
P0=getcode(e);comd=0;come=1;delay();
}

/* 键扫描函数 */
uchar keyscan(void)
{
uchar scancode,tmpcode;
P2 = 0xf0; // 发全0行扫描码
if ((P2&0xf0)!=0xf0) // 若有键按下
{
delay(); // 延时去抖动
if ((P2&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行扫描
{
P2 = scancode; // 输出行扫描码
if ((P2&0xf0)!=0xf0) // 本行有键按下
{
tmpcode = (P2&0xf0)|0x0f;

/* 返回特征字节码,为1的位即对应于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
}
}
}
return(0); // 无键按下,返回值为0
}
/////////////T0中断/////////
timer0 () interrupt 1
{
Q=~Q;
i=~i;
if(i)
{TL0=65536-(1000000/y*(1-x/100))%256; ////输出低电平状态计数器所需溢出次数///
TH0=65536-(1000000/y*(1-x/100))/256;}

else
{TL0=65536-(1000000/y*(x/100))%256; ////输出高电平状态计数器所需溢出次数///
TH0=65536-(1000000/y*(x/100))/256;}
}
///////////主函数///////////
main( )
{
int key,count,confirm;
Q=1;
TMOD=0x01;
EA=1;ET0=1;
while(1)
{TR0=1;red=1;
while(confirm<2)
{
key = keyscan(); // 调用键盘扫描函数
switch(key)
{case 0x11: if (count<=5) {x=10*x;count++;} break; // 1行1列,数字0
case 0x21: if (count<=5) {x=10*x+1;count++;} break;// 1行2列,数字1
case 0x41: if (count<=5) {x=10*x+2;count++;} break;// 1行3列,数字2
case 0x81: if (count<=5) {x=10*x+3;count++;} break;// 1行4列,数字3
case 0x12: if (count<=5) {x=10*x+4;count++;} break;// 2行1列,数字4
case 0x22: if (count<=5) {x=10*x+5;count++;}break; // 2行2列,数字5
case 0x42: if (count<=5) {x=10*x+6;count++;} break;// 2行3列,数字6
case 0x82: if (count<=5) {x=10*x+7;count++;} break;// 2行4列,数字7
case 0x14: if (count<=5) {x=10*x+8;count++;} break;// 3行1列,数字8
case 0x24: if (count<=5) {x=10*x+9;count++;} break;// 3行2列,数字9
case 0x44: if (count==5) {if(confirm==0)
{y=x;x=0;count=0;red=0;green=1;}confirm++;} break;// 3行3列,确认键
//输入完频率,按下确认键,再输入占空比
case 0x84: x=0;count=0; break; // 3行4列,取消键
default: break;
}
display(x);
}
TR0=1;
if(new==0)
{ delay();if(new==0){confirm=0;y=0;x=0;count=0;} }
}}
第2个回答  2008-03-28
这种东西买一个就可以了。

很成熟的产品,自己做反而更贵。
第3个回答  2008-03-29
呵呵!~楼上的楼上 这么长程序 没有一个电路图 什么管脚干什么用都很难弄清楚 也真是辛苦了
第4个回答  2008-03-28
百度一下

寻求一篇数学专业关于点集拓扑的大学毕业论文,题目“连续映射的等价条件...
按其不同性能和用途还可细分为低频(20赫至10兆赫)信号发生器、高频(100千赫至300兆赫)信号发生器、微波信号发生器、扫频和程控信号发生器、频率合成式信号发生器等。②函数(波形)信号发生器。能产生某些特定的周期性时间函数波形(正弦波、方波、三角波、锯齿波和脉冲波等)信号,频率范围可从几个微赫到几十兆赫。除...

...简易波形发生器,要求能产生正弦波,方波,三角波,通过键盘可改变输出...
unsigned char cho=0; \/\/0:正弦波。1:方波。2:三角波。3:锯齿波。unsigned char num=0;unsigned char TIME0_H=0xff,TIME0_L=0xdc; \/\/定时器0的初值设置;全局变量.对应正弦波,锯齿波50HZ sbit chg= P1^0;sbit freq_u=P1^1;sbit freq_d=P1^2;sbit duty_u=P1^3;sbit ...

...简易波形发生器,要求能产生正弦波,方波,三角波,通过键盘可改变输出...
你这个项目工作量好大,这里只能简单说,需要用到 DAC,即数模转换功能与电路;看看所选择的单片机包不包含有DAC功能模块,没有的话就需要外加一个,如下图示;DAC0808控制起来相对简单;为了提高输出信号频率,最好预先制表,采用查表方式,尽量避免过程中的运算,这样很费时,本身单片机的运算能力就不足...

基于单片机设计一个波形发生器,可产生方波、三角波、正弦波,且波形幅度...
波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。在本设计的基础上,加上按钮控制和LED显示...

...信号发生器~要求输出波形为正弦波,方波,三角波,频率1KHZ,幅值1v...
建议采用多波形发生器专用集成电路ICL8038,它可以同时输出你要的各种波形。该IC可以双电源工作。并且调频方便。电路见图。

手把手教你构建基于LM324的波形发生器,设计方案+设计步骤+原理
波形发生器是一种产生特定参数电测试信号的设备,其电路可以采用运放和分立元件,或是单片机集成。以LM324为核心,我们可以通过RC桥振荡电路产生正弦波,利用过零比较器转换为方波,再通过集成的函数电路得到三角波。生成和转换波形设计过程包括正弦波-方波-三角波的转换。正弦波通过RC桥振荡电路,方波则由过零...

波形发生器简介
本文介绍了一种可数字调频调幅的数字信号发生器,使用AT89S51微控制器实现。此设计能够生成多种波形,包括方波、三角波、锯齿波和正弦波。其核心优势在于能够通过数字信号调节频率和幅度,实现波形的灵活变换。在设计中,电路还具备动态输入和显示功能,便于用户直观观察信号的生成过程。此外,该系统还设有人机...

用ICL8038设计函数波形发生器
本系统以ICL8038集成块为核心器件,制作一种函数信号发生器,制作成本较低。适合学生学习电子技术测量使用。ICL8038是一种具有多种波形输出的精密振荡集成电路,只需要个别的外部元件就能产生从0.001Hz~30KHz的低失真正弦波、三角波、矩形波等脉冲信号。输出波形的频率和占空比还可以由电流或电阻控制。另外由于该芯片具有调制...

设计能产生方波、三角波及正弦波等多种波形信号的信号发生器(急)
你用运放设计电路复杂,还不如采用多波形发生器专用集成电路ICL8038设计,它可以同时输出三角波、正弦波、方波。见图。

求个函数信号发生器设计电路图。要标有详细的原件参数,最近在做这个...
函数波形发生器设计 函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。 本课题采用由集成运算放大器与晶体管差分放...

相似回答