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

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

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

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

用DDSAD产生各种波形程序集.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);

J

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;

case

0x10:

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;

case

0x10:

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

}

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

/0x100)-spp1/0x100;

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

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

/0x100)-spp3%0x100;

ftw15=0x100+ftw_5-(0x01-ftw14ftw16=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_countA=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);}}

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

//写字符串子程序

//xposl取0〜7共八列,yposl取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;

//此处的Xpos已转换为LCM的显示寄存器实际地址

}send_command(xpos);for(n=0;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