用DDSAD产生各种波形程序集.docx
- 文档编号:13032234
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:14
- 大小:29.01KB
用DDSAD产生各种波形程序集.docx
《用DDSAD产生各种波形程序集.docx》由会员分享,可在线阅读,更多相关《用DDSAD产生各种波形程序集.docx(14页珍藏版)》请在冰点文库上搜索。
用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; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DDSAD 产生 各种 波形 程序