波形发生器.docx

上传人:b****2 文档编号:2053353 上传时间:2023-05-02 格式:DOCX 页数:19 大小:713.67KB
下载 相关 举报
波形发生器.docx_第1页
第1页 / 共19页
波形发生器.docx_第2页
第2页 / 共19页
波形发生器.docx_第3页
第3页 / 共19页
波形发生器.docx_第4页
第4页 / 共19页
波形发生器.docx_第5页
第5页 / 共19页
波形发生器.docx_第6页
第6页 / 共19页
波形发生器.docx_第7页
第7页 / 共19页
波形发生器.docx_第8页
第8页 / 共19页
波形发生器.docx_第9页
第9页 / 共19页
波形发生器.docx_第10页
第10页 / 共19页
波形发生器.docx_第11页
第11页 / 共19页
波形发生器.docx_第12页
第12页 / 共19页
波形发生器.docx_第13页
第13页 / 共19页
波形发生器.docx_第14页
第14页 / 共19页
波形发生器.docx_第15页
第15页 / 共19页
波形发生器.docx_第16页
第16页 / 共19页
波形发生器.docx_第17页
第17页 / 共19页
波形发生器.docx_第18页
第18页 / 共19页
波形发生器.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

波形发生器.docx

《波形发生器.docx》由会员分享,可在线阅读,更多相关《波形发生器.docx(19页珍藏版)》请在冰点文库上搜索。

波形发生器.docx

波形发生器

波形发生器

姓名:

CC

1.设计要求

1)设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器并用proteus仿真实现之。

2)指定波形通过DAC来实现。

按键K1-方波,利用定时器中断产生的;按键K2-三角波,将输出的二进制数字信号依次加1,达到0xff时依次减1,并实时将数字信号经D/A转换得到;按键K3-锯齿波,是将输出的二进制数字信号依次加1,达到0xff时置为0x00,并实时将数字信号经D/A转换得到的;按键K4-梯形波,是将输出的二进制数字信号依次加1,达到0xff时保持一段时间,然后依次减1直至0x00,并实时将数字信号经D/A转换得到的;按键K5-正弦波,是利用MATLAB将正弦曲线均匀取样后,得到等间隔时刻的y方向上的二进制数值,然后依次输出后经D/A转换得到。

2.设计方案

本方案是基于AT89C51单片机和DAC0832芯片的单缓冲方式接口电路来设计,用独立式键盘来实现简单控制,其主要模块如下图所示:

 

(1)硬件设计

2.1硬件连接

2.1.1主控电路

AT89C51的P1口连接独立键盘,P0口连接DAC0832输出波形以及锁存器。

开关K1-K5相连接来控制各个波形的输出,根据K1-K5键状态进行波形切换,当某一按键按下时,输出相对应的波形。

主控电路图如下:

2.1.2独立式键盘

独立式键盘中,各按键相互独立,每个按键各接一根输入线,每根输入线上的按键工作状态不会影响其他输入线上的工作状态。

因此,通过检测输入线的电平状态可以很容易判断按键是否被按下。

按键与AT89C51的P1口相连,K1是检测是否输出方波按键,K2是检测是否输出三角波按键,K3是检测是否输出锯齿波按键,K4是检测是否输出梯形波按键,K5是检测是否输出正弦波按键。

键盘连接如下图所示:

2.1.3数模转换电路

由于AT89C51所产生的是数字信号,所以通过DAC0832把数字信号转换成模拟信号。

DAC0832输出的模拟量是电流,为了转换成电压,所以在它后面接入运放,如下图所示:

 

2.1.4驱动电路

74SL373S数据锁存器,主要用于按键、数码管的控制等。

2.2系统原理图

(2)软件设计

2.3主程序的设计

利用中断,当5个开关中有任意一个闭合时,跳转至中断程序,在中断程序中判断是哪一个按键闭合,跳转至相应的子程序,执行输出波形的操作,每输出一个点之后,判断按键是否断开,如果依旧闭合,则继续输出,如果已经断开,则结束中断程序。

流程图如下:

 

 

主程序:

ORG0000H

LJMPMAIN

ORG0003H;外部中断0

LJMPINT00

ORG0040H

MAIN:

MOVSP,#60H;堆栈初始化

SETBIT0

SETBEA;开中断

SETBEX0

INT00:

CLREA;关中断

PUSHPSW

PUSHACC

SETBEA;开中断

JNBP1.0,IR0;如果K1键闭合,则跳转至IR0输出方波

JNBP1.1,IR1;如果K2键闭合,则跳转至IR1输出三角波

JNBP1.2,IR2;如果K3键闭合,则跳转至IR2输出锯齿波

JNBP1.3,IR3;如果K4键闭合,则跳转至IR3输出梯形波

JNBP1.4,IR4;如果K5键闭合,则跳转至IR4输出正弦波

INTIR:

CLREA;关中断

POPACC;现场恢复

POPPSW

SETBEA;开中断

RETI

2.4子程序的设计

2.4.1方波的产生

方波的实现是在开始的时候设置一个初值然后直接输出这个值,输出一段时间后,然后再重新置一个数据,再输出这个数据与输出初值相等的时间。

子程序如下:

IR0:

MOVR0,#0FEH;设置端口地址

POSI:

MOVA,#00H

MOVX@R0,A

LCALLDELAY

JBP1.0,INTIR;如果K1键已经断开,则返回

NEGA:

MOVA,#0FFH

MOVX@R0,A

LCALLDELAY

JBP1.0,INTIR;如果K1键已经断开,则返回

SJMPPOSI;跳转至POSI,继续下一个波形的输出

LJMPINTIR;返回

2.4.2三角波的产生

三角波的产生过程是先加后减,实现方法是先是从00H开始加1直到溢出后就执行减1操作,就这样不断调用这个循环。

子程序如下:

IR1:

MOVR0,#0FEH;设置端口地址

MOVA,#00H

UP1:

MOVX@R0,A

JBP1.1,INTIR;如果K2键已经断开,则返回

INCA

JNZUP1;循环

DOWN1:

DECA

MOVX@R0,A

JBP1.1,INTIR;如果K2键已经断开,则返回

JNZDOWN1;循环

SJMPUP1

LJMPINTIR;返回

2.4.3锯齿波的产生

锯齿波实现是一开始定义一个初值,然后不断的加1,当溢出后又重初值开始加起,就这样循环下去。

子程序如下:

IR2:

MOVR0,#0FEH;设置端口地址

MOVA,#00H

LOOP:

MOVX@R0,A

JBP1.2,INTIR;如果K3键已经断开,则返回

INCA

SJMPLOOP

LJMPINTIR

2.4.4梯形波的产生

梯形波的实现是设置一个初值,然后进行加一,当加到某个数时延时,之后减一,减到初值时在返回到之前的操作,继续加一、延时、减一。

子程序如下:

IR3:

MOVR0,#0FEH;设置端口地址

MOVA,#00H

UP3:

MOVX@R0,A

JBP1.3,INTIR;如果K4键已经断开,则返回

INCA

JNZUP3;循环

LCALLDELAY;延时

DECA;如果已经溢出,则减一,减一之后A的值为255

DOWN3:

DECA

MOVX@R0,A

JBP1.3,INTIR;如果K4键已经断开,则返回

JNZDOWN3;循环

SJMPUP3

LJMPINTIR;返回

DELAY:

MOVR7,#100;延时子程序

DELAY1:

MOVR6,#10

DELAY2:

DJNZR6,DELAY2

NOP

DJNZR7,DELAY1

RET

2.4.5正弦波的产生

正弦波的实现需要查表,每查一次表,输出一个数值,之后查下一个数值继续输出,当一个波形的256个数值全部输出之后,从头开始继续输出。

子程序如下:

IR4:

MOVR0,#0FEH;设置端口地址

MOVR1,#00H

SER:

MOVA,R1

LCALLHANSHU;调用查表函数

MOVX@R0,A

JBP1.4,INTIR;如果K5键已经断开,则返回

INCR1

SJMPSER;继续查表

LJMPINTIR;返回

HANSHU:

MOVDPTR,#TAB1

MOVCA,@A+DPTR

RET

TAB1:

db080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh

db0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h

db0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h,0f4h

db0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh

db0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h

db0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch

db0dah,0d8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h

db0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h

db080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h

db04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h,02fh,02dh,02bh,028h

db026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch

db00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h

db000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah

db00bh,00ch,00dh,00fh,010h,011h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h

db026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh

db04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh

3.仿真结果演示

1.没有按键按下时:

 

2.按键K1按下时,输出为方波:

3.按键K2按下时,输出为三角波:

4.按键K3按下时,输出为锯齿波:

5.按键K4按下时,输出为梯形波:

6.按键K5按下时。

输出为正弦波:

4.源程序

ORG0000H

LJMPMAIN

ORG0003H;外部中断0

LJMPINT00

ORG0040H

MAIN:

MOVSP,#60H;堆栈初始化

SETBIT0

SETBEA;开中断

SETBEX0

INT00:

CLREA;关中断

PUSHPSW

PUSHACC

SETBEA;开中断

JNBP1.0,IR0;如果K1键闭合,则跳转至IR0输出方波

JNBP1.1,IR1;如果K2键闭合,则跳转至IR1输出三角波

JNBP1.2,IR2;如果K3键闭合,则跳转至IR2输出锯齿波

JNBP1.3,IR3;如果K4键闭合,则跳转至IR3输出梯形波

JNBP1.4,IR4;如果K5键闭合,则跳转至IR4输出正弦波

INTIR:

CLREA;关中断

POPACC;现场恢复

POPPSW

SETBEA;开中断

RETI

IR0:

MOVR0,#0FEH;设置端口地址

POSI:

MOVA,#00H

MOVX@R0,A

LCALLDELAY

JBP1.0,INTIR;如果K1键已经断开,则返回

NEGA:

MOVA,#0FFH

MOVX@R0,A

LCALLDELAY

JBP1.0,INTIR;如果K1键已经断开,则返回

SJMPPOSI;跳转至POSI,继续下一个波形的输出

LJMPINTIR;返回

IR1:

MOVR0,#0FEH;设置端口地址

MOVA,#00H

UP1:

MOVX@R0,A

JBP1.1,INTIR;如果K2键已经断开,则返回

INCA

JNZUP1;循环

DOWN1:

DECA

MOVX@R0,A

JBP1.1,INTIR;如果K2键已经断开,则返回

JNZDOWN1;循环

SJMPUP1

LJMPINTIR;返回

IR2:

MOVR0,#0FEH;设置端口地址

MOVA,#00H

LOOP:

MOVX@R0,A

JBP1.2,INTIR;如果K3键已经断开,则返回

INCA

SJMPLOOP

LJMPINTIR

IR3:

MOVR0,#0FEH;设置端口地址

MOVA,#00H

UP3:

MOVX@R0,A

JBP1.3,INTIR;如果K4键已经断开,则返回

INCA

JNZUP3;循环

LCALLDELAY;延时

DECA;如果已经溢出,则减一,减一之后A的值为255

DOWN3:

DECA

MOVX@R0,A

JBP1.3,INTIR;如果K4键已经断开,则返回

JNZDOWN3;循环

SJMPUP3

LJMPINTIR;返回

DELAY:

MOVR7,#100;延时子程序

DELAY1:

MOVR6,#10

DELAY2:

DJNZR6,DELAY2

NOP

DJNZR7,DELAY1

RET

IR4:

MOVR0,#0FEH;设置端口地址

MOVR1,#00H

SER:

MOVA,R1

LCALLHANSHU;调用查表函数

MOVX@R0,A

JBP1.4,INTIR;如果K5键已经断开,则返回

INCR1

SJMPSER;继续查表

LJMPINTIR;返回

HANSHU:

MOVDPTR,#TAB1

MOVCA,@A+DPTR

RET

TAB1:

db080h,083h,086h,089h,08ch,090h,093h,096h,099h,09ch,09fh,0a2h,0a5h,0a8h,0abh,0aeh

db0b1h,0b3h,0b6h,0b9h,0bch,0bfh,0c1h,0c4h,0c7h,0c9h,0cch,0ceh,0d1h,0d3h,0d5h,0d8h

db0dah,0dch,0deh,0e0h,0e2h,0e4h,0e6h,0e8h,0eah,0ebh,0edh,0efh,0f0h,0f1h,0f3h,0f4h

db0f5h,0f6h,0f8h,0f9h,0fah,0fah,0fbh,0fch,0fdh,0fdh,0feh,0feh,0feh,0ffh,0ffh,0ffh

db0ffh,0ffh,0ffh,0ffh,0feh,0feh,0feh,0fdh,0fdh,0fch,0fbh,0fah,0fah,0f9h,0f8h,0f6h

db0f5h,0f4h,0f3h,0f1h,0f0h,0efh,0edh,0ebh,0eah,0e8h,0e6h,0e4h,0e2h,0e0h,0deh,0dch

db0dah,0d8h,0d5h,0d3h,0d1h,0ceh,0cch,0c9h,0c7h,0c4h,0c1h,0bfh,0bch,0b9h,0b6h,0b3h

db0b1h,0aeh,0abh,0a8h,0a5h,0a2h,09fh,09ch,099h,096h,093h,090h,08ch,089h,086h,083h

db080h,07dh,07ah,077h,074h,070h,06dh,06ah,067h,064h,061h,05eh,05bh,058h,055h,052h

db04fh,04dh,04ah,047h,044h,041h,03fh,03ch,039h,037h,034h,032h,02fh,02dh,02bh,028h

db026h,024h,022h,020h,01eh,01ch,01ah,018h,016h,015h,013h,011h,010h,00fh,00dh,00ch

db00bh,00ah,008h,007h,006h,006h,005h,004h,003h,003h,002h,002h,002h,001h,001h,000h

db000h,000h,001h,001h,002h,002h,002h,003h,003h,004h,005h,006h,006h,007h,008h,00ah

db00bh,00ch,00dh,00fh,010h,011h,013h,015h,016h,018h,01ah,01ch,01eh,020h,022h,024h

db026h,028h,02bh,02dh,02fh,032h,034h,037h,039h,03ch,03fh,041h,044h,047h,04ah,04dh

db04fh,052h,055h,058h,05bh,05eh,061h,064h,067h,06ah,06dh,070h,074h,077h,07ah,07dh

END

 

THANKS!

!

!

 

致力为企业和个人提供合同协议,策划案计划书,学习课件等等

打造全网一站式需求

欢迎您的下载,资料仅供参考

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2