用DDS AD 产生各种波形程序集.docx

上传人:b****2 文档编号:2965856 上传时间:2023-05-05 格式:DOCX 页数:16 大小:16.64KB
下载 相关 举报
用DDS AD 产生各种波形程序集.docx_第1页
第1页 / 共16页
用DDS AD 产生各种波形程序集.docx_第2页
第2页 / 共16页
用DDS AD 产生各种波形程序集.docx_第3页
第3页 / 共16页
用DDS AD 产生各种波形程序集.docx_第4页
第4页 / 共16页
用DDS AD 产生各种波形程序集.docx_第5页
第5页 / 共16页
用DDS AD 产生各种波形程序集.docx_第6页
第6页 / 共16页
用DDS AD 产生各种波形程序集.docx_第7页
第7页 / 共16页
用DDS AD 产生各种波形程序集.docx_第8页
第8页 / 共16页
用DDS AD 产生各种波形程序集.docx_第9页
第9页 / 共16页
用DDS AD 产生各种波形程序集.docx_第10页
第10页 / 共16页
用DDS AD 产生各种波形程序集.docx_第11页
第11页 / 共16页
用DDS AD 产生各种波形程序集.docx_第12页
第12页 / 共16页
用DDS AD 产生各种波形程序集.docx_第13页
第13页 / 共16页
用DDS AD 产生各种波形程序集.docx_第14页
第14页 / 共16页
用DDS AD 产生各种波形程序集.docx_第15页
第15页 / 共16页
用DDS AD 产生各种波形程序集.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

用DDS AD 产生各种波形程序集.docx

《用DDS AD 产生各种波形程序集.docx》由会员分享,可在线阅读,更多相关《用DDS AD 产生各种波形程序集.docx(16页珍藏版)》请在冰点文库上搜索。

用DDS AD 产生各种波形程序集.docx

用DDSAD产生各种波形程序集

用DDSAD9854产生各种波形程序集

本程序集包含以下波形的程序:

正弦波,三角波,AM调制,FM调制,ASK调制,PSK调制,FSK调制

最后还有一个包含12864液晶显示、7290键盘控制的可以输出正弦波,三角波,方波(由单片机产生),AM调制,FM调制,ASK调制和PSK调制的一个DDS函数发生器的综合系统。

这些程序都是本人写的,单片机用的是TI的msp430f247,这些程序都经过精心调试,并都已调试成功。

希望这些程序能给需要的朋友一定的帮助。

头文件【】:

#definePAR1_H0x00;

send_data('5');

}

else

{

if(pow_10>=100)send_data(0x30+p[2]);

send_data(0x30+p[1]);

send_data('.');

send_data(0x30+p[0]);

}

send_data('d');

send_data('B');

send_data('m');

send_data(0x20);

;

send_data('5');

}

else

{

if(pow_10>=100)send_data(0x30+p[2]);

send_data(0x30+p[1]);

send_data('.');

send_data(0x30+p[0]);

}

send_data('d');

send_data('B');

send_data('m');

send_data(0x20);

set_xy(0,4);

send_data(0xb2);//步

send_data(0xbd);

send_data(0xbd);//进

send_data(0xf8);

send_data(0xa3);//:

send_data(0xba);

set_xy(7,2);

send_data(0x11);

set_xy(3,2);

}

#pragmavector=PORT1_VECTOR

__interruptvoidkey_int(void)

{

if(!

(P1IFG&BIT7))

{

P1IFG=0;

return;

}

ap=0;

P1IFG=0;

key_press=1;

}

#pragmavector=USCIAB0TX_VECTOR

__interruptvoidI2C_RX(void)

{

if(IFG2&UCB0RXIFG)key_code=UCB0RXBUF;//接收中断

}

#pragmavector=TIMERA0_VECTOR

__interruptvoidTimer_A(void)

{

if(M==3)

{

if(ap)

{

P3OUT&=~BIT0;//Toggle

ap=0;

send_byte(OSKI_2,0X00);

send_byte(OSKI_1,0X00);

}

else

{

P3OUT|=BIT0;

ap=1;

send_byte(OSKI_2,0XFF);

send_byte(OSKI_1,0X0F);

}

}

if(M==4)

{

if(ap)

{

ctr_out&=~FBH;

ap=0;

}

else

{

ctr_out|=FBH;

ap=1;

}

}

}

#pragmavector=ADC12_VECTOR

__interruptvoidadc12()

{

if(M==1)

{

samp=ADC12MEM0;

dc=(1-A)*0XFFF/(1+A);

ac=2*A*samp/(1+A);

ATW=dc+ac;

send_byte(OSKI_2,ATW/0x100);

send_byte(OSKI_1,ATW%0x100);

}

elseif(M==2)

{

samp=ADC12MEM0;

if(samp>0x7ff)

{

am=samp-0x7ff;

per=am*0x10000/0x7ff;//per-longint;

scal=0x10000;

while(pp3>0x0f&&per>=0x600){per/=0x10;scal/=0x10;}

while(pp3<0x10&&per>=0x1000){per/=0x10;scal/=0x10;}

MPY=pp1;

OP2=per;

_NOP();

_NOP();

spp1=RESLO;

c=RESHI;

MPY=pp2;

OP2=per;

_NOP();

_NOP();

spp2=RESLO;

spp2=spp2+c;

c=RESHI;

MPY=pp3;

OP2=per;

_NOP();

_NOP();

spp3=RESLO;

spp3=spp3+c;

switch(scal)

{

case0x10000:

spp1=spp2;spp2=spp3;spp3=0x0000;break;

case0x1000:

spp1=spp1/0x1000+(spp2%0x1000)*0x10;spp2=spp2/0x1000+(spp3%0x1000)*0x10;spp3=spp3/0x1000;break;

case0x100:

spp1=spp1/0x100+(spp2%0x100)*0x100;spp2=spp2/0x100+(spp3%0x100)*0x100;spp3=spp3/0x100;break;

case0x10:

spp1=spp1/0x10+(spp2%0x10)*0x1000;spp2=spp2/0x10+(spp3%0x10)*0x1000;spp3=spp3/0x10;

}

send_byte(FTW1_1,ftw_1+spp1%0x100);

send_byte(FTW1_2,ftw_2+spp1/0x100);

send_byte(FTW1_3,ftw_3+spp2%0x100);

send_byte(FTW1_4,ftw_4+spp2/0x100);

send_byte(FTW1_5,ftw_5+spp3%0x100);

send_byte(FTW1_6,ftw_6+spp3/0x100);

}

else

{

am=0x7ff-samp;

per=am*0x10000/0x7ff;//per-longint;

scal=0x10000;

while(pp3>0x0f&&per>=0x600){per/=0x10;scal/=0x10;}

while(pp3<0x10&&per>=0x1000){per/=0x10;scal/=0x10;}

MPY=pp1;

OP2=per;

_NOP();

_NOP();

spp1=RESLO;

c=RESHI;

MPY=pp2;

OP2=per;

_NOP();

_NOP();

spp2=RESLO;

spp2=spp2+c;

c=RESHI;

MPY=pp3;

OP2=per;

_NOP();

_NOP();

spp3=RESLO;

spp3=spp3+c;

switch(scal)

{

case0x10000:

spp1=spp2;spp2=spp3;spp3=0;break;

case0x1000:

spp1=spp1/0x1000+(spp2%0x1000)*0x10;spp2=spp2/0x1000+(spp3%0x1000)*0x10;spp3=spp3/0x1000;break;

case0x100:

spp1=spp1/0x100+(spp2%0x100)*0x100;spp2=spp2/0x100+(spp3%0x100)*0x100;spp3=spp3/0x100;break;

case0x10:

spp1=spp1/0x10+(spp2%0x10)*0x1000;spp2=spp2/0x10+(spp3%0x10)*0x1000;spp3=spp3/0x10;

}

ftw11=0x100+ftw_1-spp1%0x100;

ftw12=0x100+ftw_2-(0x01-ftw11/0x100)-spp1/0x100;

ftw13=0x100+ftw_3-(0x01-ftw12/0x100)-spp2%0x100;

ftw14=0x100+ftw_4-(0x01-ftw13/0x100)-spp2/0x100;

ftw15=0x100+ftw_5-(0x01-ftw14/0x100)-spp3%0x100;

ftw16=ftw_6-(0x01-ftw15/0x100)-spp3/0x100;

send_byte(FTW1_1,(uchar)ftw11);

send_byte(FTW1_2,(uchar)ftw12);

send_byte(FTW1_3,(uchar)ftw13);

send_byte(FTW1_4,(uchar)ftw14);

send_byte(FTW1_5,(uchar)ftw15);

send_byte(FTW1_6,(uchar)ftw16);

}

}

ADC12CTL0&=~ENC;

}

//**********发送1字节数据************//

voidsend_byte(ucharadd,uchardata)

{

data_dir=0xff;

ctr_out|=WR;

add_out=add;//送地址

_NOP();

ctr_out&=~WR;//拉低WR

data_out=data;//送数据

_NOP();

ctr_out|=WR;//拉高WR

if(fclk){ctr_out|=UDCLK;ctr_out&=~UDCLK;}

else{delayus(5);fclk=1;}

}

//***********************************//

//**********读取一个字节的数据**********//

ucharread_byte(ucharadd)

{

uchardat;

data_dir=0x00;

ctr_out|=RD;

add_out=add;

ctr_out&=~RD;

_NOP();

dat=data_in;

ctr_out|=RD;

returndat;

}

//**************************************//

voidsend_command(unsignedcharcommand)

{

Data_dir=0x00;

RS_0;

RW_1;

E_1;

while(Data_in&0x80);

Data_dir=0xFF;

E_0;

RS_0;

RW_0;

Data_out=command;

E_1;

_NOP();

E_0;

}

voidsend_data(unsignedchardata)

{

Data_dir=0x00;

RS_0;

RW_1;

E_1;

while(Data_in&0x80);

Data_dir=0xFF;

E_0;

RS_1;

RW_0;

Data_out=data;

E_1;

_NOP();

E_0;

//lcd_count^=0x01;

//if(lcd_count==1)lcd_con1[con++]=data;

//elselcd_x++;

}

/*******************************************************************/

//设置显示位置xpos(1~16),tpos(1~4)

/*******************************************************************/

voidset_xy(unsignedcharxpos,unsignedcharypos)

{

switch(ypos)

{

case1:

send_command(0X80|xpos);break;

case2:

send_command(0X90|xpos);break;

case3:

send_command(0X88|xpos);break;

case4:

send_command(0X98|xpos);break;

default:

break;

}

}

/*******************************************************************/

//在指定位置显示字符串

/*******************************************************************/

voidprint(unsignedcharx,unsignedchary,unsignedchar*str)

{

unsignedcharlcd_temp;

set_xy(x,y);

lcd_temp=*str;

while(lcd_temp!

=0x00)

{

send_data(lcd_temp);

lcd_temp=*(++str);

}

}

/********************写字符串******************/

//写字符串子程序

//xpos1取0~7共八列,ypos1取1~4共四行。

/**********************************************/

voidprintstr(unsignedcharxpos,unsignedcharypos,unsignedcharstr[],unsignedchark)

{unsignedcharn;

switch(ypos)

{case1:

xpos|=0x80;break;//第一行

case2:

xpos|=0x90;break;//第二行

case3:

xpos|=0x88;break;//第三行

case4:

xpos|=0x98;break;//第四行

default:

break;

}

send_command(xpos);//此处的Xpos已转换为LCM的显示寄存器实际地址

for(n=0;n

{

send_data(str[n]);//显示汉字时注意码值,连续两个码表示一个汉字

}

}

/********************清屏************************/

//清屏

/************************************************/

voidclr_lcd(void)

{

send_command(0x01);

//send_command(0x34);

//send_command(0x30);

}

/********数字退格键**********/

voidbackspace()

{

if(lcd_count==0)

{

if(lcd_x!

=0)

{

lcd_x--;

set_xy(lcd_x,lcd_y);

lcd_count=0;

send_data(lcd_con1[--con]);

send_data(0x20);

lcd_x--;

set_xy(lcd_x,lcd_y);

lcd_count=0;

send_data(lcd_con1[--con]);

}

else

{

lcd_x=7;

lcd_y--;

set_xy(lcd_x,lcd_y);

lcd_count=0;

send_data(lcd_con1[--con]);

send_data(0x20);

lcd_x=7;

lcd_y--;

set_xy(lcd_x,lcd_y);

lcd_count=0;

send_data(lcd_con1[--con]);

}

}

else

{

set_xy(lcd_x,lcd_y);

lcd_count=0;

lcd_con=lcd_con1[--con];

send_data(0x20);

lcd_con1[--con]=lcd_con;

con++;

set_xy(lcd_x,lcd_y);

lcd_count=0;

}

}

//**********1us延时************//

voiddelayus(uintt)

{

while(t--)us;

}

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

当前位置:首页 > 初中教育 > 语文

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

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