波形发生器.docx
《波形发生器.docx》由会员分享,可在线阅读,更多相关《波形发生器.docx(19页珍藏版)》请在冰点文库上搜索。
波形发生器
波形发生器
姓名:
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!
!
!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考