matlab 中画方波的square函数怎么设置周期和峰值

matlab 中画方波的square函数怎么设置周期和峰值,第1张

一、在MATLAB中用square函数来表示,其调用形式为 y=square(t,DUTY) ,其作用类似于sin(t),用以产生一个时长为t、幅值为±1的周期性方波信号,其中的DUTY参数表示占空比,即在信号的一个周期中正值所占的百分比。例如频率为30Hz的周期性方波信号的MATLAB程序和图形如下:

1、在MATLAB的命令框内输入方波程序,如下图所示:

2、在输入完成图形显示函数plot后,会显示出来图形,grid,ylim意思是对图形显示的y坐标进行限制。该程序是将图形y坐标限制在(-15,15)。

二、y=square(t,DUTY) 函数默认的幅值是±1,想要改变幅值,只需要乘以一个系数即可,改变周期的话,将频率30改成其他即可。如y=2square(t,DUTY)。程序和图形如下图所示:

扩展资料:

MATLAB系统由MATLAB开发环境、MATLAB数学函数库、MATLAB语言、MATLAB图形处理系统和MATLAB应用程序接口(API)五大部分构成。

1、开发环境

MATLAB开发环境是一套方便用户使用的MATLAB函数和文件工具集,其中许多工具是图形化用户接口。它是一个集成的 用户工作空间,允许用户输入输出数据,并提供了M文件的集成编译和调试环境,包括MATLAB桌面、命令窗口、M文件编辑调试器、MATLAB工作空间和在线帮助文档。

2、数学函数

MATLAB数学函数库包括了大量的计算算法。从基本算法如四则运算、三角函数,到复杂算法如矩阵求逆、快速傅里叶变换等。

3、语言

MATLAB语言是一种高级的基于矩阵/数组的语言,它有程序流控制、函数、数据结构、输入/输出和面向对象编程等特色。用这种语言能够方便快捷建立起简单运行快的程序,也能建立复杂的程序。

4、图形处理

图形处理系统使得MATLAB能方便的图形化显示向量和矩阵,而且能对图形添加标注和打印。它包括强大的二维三维图形函数、图像处理和动画显示等函数。

5、程序接口

MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran等其它高级编程语言进行交互的函数库。该函数库的函数通过调用动态链接库(DLL)实现与MATLAB文件的数据交换,其主要功能包括在MATLAB中调用C和Fortran程序,以及在MATLAB与其它应用程序间建立客户、服务器关系。

参考资料来源:百度百科-MATLAB

IOY0 EQU 0D400H ;片选IOY0端口始地址

IOY1 EQU 0D440H ;片选IOY1端口始地址

IOY2 EQU 0D480H ;片选IOY2端口始地址

IOY3 EQU 0D4C0H ;片选IOY3端口始地址

;

ADC0809 EQU IOY0+00H ;ADC0809端口地址

PA55 EQU IOY1+00H ;8255的A口地址

PB55 EQU IOY1+04H ;8255的B口地址

PC55 EQU IOY1+08H ;8255的C口地址

PCTL EQU IOY1+0CH ;8255的控制寄存器地址

DAC0832 EQU IOY2+00H ;DAC0832端口地址

TIMER0 EQU IOY3+00H ;8254计数器0端口地址

TIMER1 EQU IOY3+04H ;8254计数器1端口地址

TIMER2 EQU IOY3+08H ;8254计数器2端口地址

TCTL EQU IOY3+0CH ;8254控制寄存器端口地址

STACK1 SEGMENT STACK

DW 256 DUP()

STACK1 ENDS

DATA SEGMENT

STR1 DB 'Please input password:',0AH,0DH,'$'

STR2 DB 'The password is not right !!!Please try again!!!',0AH,0DH,'$'

STR3 DB 'Welcome to the signal creat machine',0AH,0DH,'Loading ADC0809',0AH,0DH,'$'

STR4 DB 'The passward is right',0AH,0DH,'$'

DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;7段数码管的段位值

STABLE DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH

PASSWORD DB 41H,42H,43H,44H ;预设密码

GAO DB 1 DUP () ;预留显示十位

DIW DB 1 DUP () ;预留显示个位

PW DB 4 DUP () ;密码预留

YU DB 20 DUP () ;预留20个空间存放数据

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

CALL CLK ;ADC0809 CLK输入

MOV DX,PCTL ;初始化8255工作方式

MOV AL,88H ;1000 1000方式0,A口,B口输出,C口高四位输入

OUT DX,AL ;

L0: CALL DIS

MOV DX,OFFSET STR1 ;显示提示信息

MOV AH,9

INT 21H

CALL DIS

;识别密码

L1: MOV CX,4

MOV SI,OFFSET PW

L: MOV AH,01H ;输入密码

INT 21H

MOV [SI],AL

INC SI

CMP AL,45H ;检测有无E

JZ E

LOOP L

MOV CX,4

MOV SI,OFFSET PASSWORD;取PASSWORD的偏移地址

MOV DI,OFFSET PW

TE: MOV AL,[DI]

CMP AL,[SI]

JNE TE1

INC DI

INC SI

LOOP TE

JMP Q

TE1: MOV DX,OFFSET STR2 ;显示密码错误

MOV AH,9D

INT 21H

JMP L0

E: JMP QUIT

;启动ADC0809的INO

Q: MOV DX,OFFSET STR4

MOV AH,09H

INT 21H

MOV DX, OFFSET STR3 ;显示提示信息

MOV AH,09H

INT 21H

; MOV AH,00H ;将AH清零用于加法

; MOV CX,20D

L2: MOV DX,ADC0809 ;启动0809的IN0

OUT DX,AL

L3: CALL DALLY

;读取EOC的值

MOV DX,PC55

IN AL,DX ;读C口的值

TEST AL,80H ;检测出C7的值是否为1

JZ L3 ;C7不为1则跳到L3

;读取0809IN0的值

CALL SIN

JMP L0

MOV DX,ADC0809 ;读取0809IN0的值

IN AL,DX

; ADD AH,BL

; LOOP L2 ;求20次数据的和

;

; MOV AL,AH

; MOV BL,20D

; DIV BL ;求采集数据20次的平均值(修改)

; MOV BH,AL

MOV BL,AL

MOV CL,04H

SHR AL,CL ;取出十位

MOV GAO,AL ;存十位的值

MOV AL,BL

AND AL,0FH ;取出个位

MOV DIW,AL ;存个位的值

CALL DIS ;调用数码管显示函数

CALL DIS

MOV AL,BL

CMP AL,15H

JL L4

MOV AL,BL

CMP AL,80H

JL L5

MOV AL,BL

CMP AL,0A0H

JL L6

MOV AL,BL

CMP AL,0C0H

JL L7

CALL FANG1K

JMP L0

L4: CALL JIETI

JMP L0

L5: CALL SIN

JMP L0

L6: CALL TIXING

JMP L0

L7: CALL FANG500

JMP L0

QUIT: MOV AX,4C00H ;结束程序退出

INT 21H

DIS PROC NEAR ;显示子函数

PUSH AX

PUSH DX

PUSH BX

MOV AL,0EFH ;选通位LED 1110 1111

MOV DX,PA55

OUT DX,AL

MOV SI,OFFSET GAO ;取个位地址

MOV AL,[SI] ;取个位数据

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]

MOV DX,PB55

OUT DX,AL

MOV AL,0DFH ;选通个位LED 1101 1111

MOV DX,PA55

OUT DX,AL

MOV SI,OFFSET DIW ;取个位地址

MOV AL,[SI] ;取个位数据

MOV BX,OFFSET DTABLE

AND AX,00FFH

ADD BX,AX

MOV AL,[BX]

MOV DX,PB55

OUT DX,AL

POP BX

POP DX

POP AX

RET

DIS ENDP

CLK PROC NEAR ;方波CLK时钟18432K子程序

;初始化8254计数器0工作在方式3,以十进制计数,初值为100

PUSH DX ;保护现场

PUSH AX ;保护现场

MOV DX,TCTL

MOV AL,17H ;0001 0111B

OUT DX,AL

MOV DX,TIMER0 ;装初值100

MOV AL,100D

OUT DX,AL

POP AX ;恢复现场

POP DX ;恢复现场

RET

CLK ENDP

FANG1K PROC NEAR ;方波1KHz子程序

;初始化8254计数器1工作在方式3,以十进制计数,初值为184

PUSH DX ;保护现场

PUSH AX ;保护现场

MOV DX,TCTL

MOV AL,57H ;0101 0111B

OUT DX,AL

MOV DX,TIMER1

MOV AL,0B8H;184

OUT DX,AL

F: CALL DIS

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ F

POP AX ;恢复现场

POP DX ;恢复现场

RET

FANG1K ENDP

FANG500 PROC NEAR ;方波500Hz子程序

;初始化8254计数器1工作在方式3,以十进制计数,初值为368

PUSH DX ;保护现场

PUSH AX ;保护现场

MOV DX,TCTL

MOV AL,77H ;0111 0111B

OUT DX,AL

MOV DX,TIMER1

MOV AL,70H ;368D分高低位写入

OUT DX,AL

MOV AL,01H

OUT DX,AL

F1: CALL DIS

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ F1

POP AX ;恢复现场

POP DX ;恢复现场

RET

FANG500 ENDP

JIETI PROC NEAR ;阶梯波子程序

PUSH DX

PUSH AX

J0: MOV AL,00H;AL=0

J1: MOV DX,DAC0832;AL OUT

OUT DX,AL

ADD AL,33H

CALL DALLY1

CMP AL,0FFH

JNE J1

CALL DIS

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ J0

POP AX

POP DX

RET

JIETI ENDP

SIN PROC NEAR ;正弦波子程序

PUSH AX

PUSH BX

PUSH DX

S0: MOV BX,10H

S1: MOV SI,OFFSET STABLE

MOV CX,64D

S2: MOV AL,[SI]

MOV DX,DAC0832

OUT DX,AL

INC SI

LOOP S2

JMP S1

DEC BX

CMP BX,00H

JNE S1

CALL DIS

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ S0

POP DX

POP BX

POP AX

RET

SIN ENDP

TIXING PROC NEAR ;梯形波子程序

PUSH AX

PUSH DX

PUSH BX

T: MOV BX,10H

MOV AL,00H

MOV DX,DAC0832

OUT DX,AL

T0: MOV AL,33H

T1: MOV DX,DAC0832

OUT DX,AL

INC AL

CMP AL,0FFH

JNE T1

CALL DALLY1

T2: OUT DX,AL

DEC AL

CMP AL,33H

JNE T2

DEC BX

CMP BX,00H

JNE T0

CALL DIS

MOV DL,0FFH ;判断主键盘有无键按下

MOV AH,6

INT 21H

JZ T

POP BX

POP DX

POP AX

RET

TIXING ENDP

;延时子程序

DALLY1 PROC NEAR

PUSH CX

PUSH AX

MOV CX,1000H

D1: MOV AX,0100H

D2: DEC AX

JNZ D2

LOOP D1

POP AX

POP CX

RET

DALLY1 ENDP

DALLY PROC NEAR

PUSH CX

PUSH AX

MOV CX,4000H

D3: MOV AX,0600H

D4: DEC AX

JNZ D4

LOOP D3

POP AX

POP CX

RET

DALLY ENDP

CODE ENDS

END START

#include <reg51h>//用单片机产生方波

void InitTimer0(void)

{

TMOD = 0x01;// 改变方波周其

TH0=(65536-1)/256; //对TH0 TL0赋值1us

TL0=(65536-1)%256;

EA = 1;

ET0 = 1;

TR0 = 1;

}

void main(void)

{

InitTimer0();

while(1); //无限循环 }

void Timer0Interrupt(void) interrupt 1{

TH0=(65536-1)/256; //对TH0 TL0赋值1us

TL0=(65536-1)%256;

P1=~P1; //每1US电平变一次,周期2US F=500khz

}

仿真正常 记得给分啰

下面是程序

include <reg51h>

#define uchar unsigned char

#define uint unsigned int

sbit LCP=P2^2;

sbit SCP=P2^1;

sbit SI=P2^0;

sbit S1=P2^3;

sbit S2=P2^4;

sbit S3=P2^5;

sbit S4=P2^6;

sbit S5=P2^7;

sbit DA0832=P3^3;

sbit DA0832_ON=P3^2;

uchar fun=0,b=0,c=0,d=0,tl,th;

uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5

,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5

,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd

,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda

,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99

,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51

,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16

,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15

,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e

,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };

void display(unsigned char command)

{

unsigned char i;

LCP=0;

for(i=8;i>0;i--)

{

SCP=0;

if((command & 0x80)==0)

{

SI=0;

}

else

{

SI=1;

}

command<<=1;

SCP=1;

}

LCP=1;

}

void key1(void)

{

fun++;

if(fun==4)

fun=0x00;

}

void key2(void)

{

tl++;

if(tl==0x1f)

th++;

}

void key3(void)

{

tl--;

if(tl==0x00)

th--;

}

void key4(void)

{

double t;

int f;

TR0=0;

t=(65535-th256-tl)04;

f=(int)(1000/t);

S3=tab[f%10];

f=f/10;

S2=tab[f%10];

f=f/10;

if(f==0)

S1=0;

else

S1=tab[f];

TR0=1;

}

void key5(void)

{

tl--;

if(tl==0x00)

th++;

}

void judge(void)

{

uchar line,row,de1,de2,keym;

P1=0x0f;

keym=P1;

if(keym==0x0f)return;

for(de1=0;de1<200;de1++)

for(de2=0;de2<125;de2++){;}

P1=0x0f;

keym=P1;

if(keym==0x0f)return;

P1=0x0f;

line=P1;

P1=0xf0;

row=P1;

line=line+row; /存放特征键值/

if(line==0xde)key1();

if(line==0x7e)key2();

if(line==0xbd)key3();

if(line==0x7d)key4();

}

void time0_int(void) interrupt 1 //中断服务程序

{

TR0=0;

if(fun==1)

{

DA0832=tosin[b]; //正弦波

b++;

}

else if(fun==2) //锯齿波

{

if(c<128)

DA0832=c;

else

DA0832=255-c;

c++;

}

else if(fun==3) // 方波

{

d++;

if(d<=128)

DA0832=0x00;

else

DA0832=0xff;

}

TH0=th;

TL0=tl;

TR0=1;

}

void main(void)

{

TMOD=0X01;

TR0=1;

th=0xff;

tl=0xd0;

TH0=th;

TL0=tl;

ET0=1;

EA=1;

while(1)

{

display();

judge();

}

}

你抄人家的,也应该过下脑啊,电路图都是画错了啊;

8位DAC,采用直通方式,其他读写线都接低电平就好了;

基准电压=5V,那么 8位DAC=ffh,对应输出= -5V,8位DAC=00h,对应输出=0V;

1)所以你要得到矩形波时,就是控制单片机输出P0=0xff的时间,以及P0=0x0的时间;

2)要输出三角波时,P0 输出:最小值为 0,最大值为 0xff,那么必须先假设一个波形周期均匀输出20个采样值,则三角波上升期为10个采样值,下降期也为10个采样值;

然后反过来求出量化值;

因为: 5V/10=05V,那么 N0/256 = 05/5;N1/256 = 10/5;N2/256 = 15/5;

N9/256 = 5/5;从而得到10个量化值,这是上升期的量化值,下降期的量化值则是前面量化值的反序排列,然后做成一个有20个数的数组;

那么程序就是按一定的时间间隔循环输出这20个的数组,即可得到三角波了;

3)锯齿波, *** 作上类似三角波,只是上升期的采样个数与下降期的采样个数不等;

如一个波形周期仍然均匀输出20个采样值,只是上升期为6个采样值,下降期也为14个采样值;

AT89C51与DAC0832频率1MHZ ,简直就是异想天开,51的指令周期才1M,怎么可能输出1M的正弦波!

基于51单片机的信号发生器-完整电路、程序

>

以上就是关于matlab 中画方波的square函数怎么设置周期和峰值全部的内容,包括:matlab 中画方波的square函数怎么设置周期和峰值、微机课设:用汇编语言编写一个信号发生器,要求产生正弦波、梯形波、阶梯波、方波、求一个c51产生500khz方波的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9645675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存