您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于单片机的多功能波形发生器设计
1基于MSP430单片机的多功能波形发生器设计1.设计目的与任务本次设计旨在利用msp430单片机设计一个多功能波形发生器,并且利用lcd12864液晶屏进行当前波形的特征值的测量及显示,例如频率。2.设计指标与技术要求(1)借助现有的单片机系统;(2)能产生正弦波、方波、三角波、锯齿波等波形;(3)各种波形频率可调,频率范围为100-3000Hz;(4)正弦波输出电压为5V峰峰值,方波、三角波、锯齿波输出电压为5V(5)采用8位D/A转换器;(6)进行硬件平滑滤波;(7)编写程序并调试;(8)提供程序清单;(9)能实物演示。3.总体设计图1.1所示是基于单片机的多波形发生器的总体设计流程图。图1.1总体设计流程图3.1总体设计功能说明:根据设计要求,分析得本次设计需要硬件和软件两部分。硬件上,如图。键盘输入部分主要用于选择波形。键盘共设4个键,用于选择三角波、矩形波、锯齿波、正弦波4种不同的波形,。msp430单片机用来执行某一波形发生程序,向D/A转换器的输入端发送数据,将其转化成模拟量,并通过运算放大器调节波形的幅值,经过滤波器的滤波,从而在输出端得到所需的波形。2软件上,如图。可由硬件设计好后,再根据要求进行具体编写。程序的主要功能是:首先程序在开始后,先判断P0.0,P0.1,P0.2相应的波形,然后根据选择的波形输出相应的波形.程序将根据要求进行调节波形.再下一步程序再判断用户继续从键盘输入要输出的波形,可以进行必要的延迟。3.2总体电路图3.2如下所示:图1.2总体电路图3.3总体程序流程图3.2如下所示:图1.3总体程序流程图34.总体设计4.1msp430单片机MSP430单片机称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,处理能力强、运算速度快,功能强大4.2DAC0832芯片图2.2DAC0832芯片图DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛,关于DAC0832的引脚功能如下:D0~D7:数字信号输入端。ILE:输入寄存器允许,高电平有效。CS:片选信号,低电平有效。WR1:写信号1,低电平有效。XFER:传送控制信号,低电平有效。WR2:写信号2,低电平有效。IOUT1、IOUT2:DAC电流输出端。4RfB:是集成在片内的外接运放的反馈电阻。VREF:基准电压(-10~10V)。Vcc:是源电压(+5~+15V)。AGND:模拟地NGND:数字地,可与AGND接在一起使用。4.3硬件滤波电路图2.3滤波电路图由图知,截止频率w0=w=1/RC,即f=1/2pRC,再根据公式Q=Rf/(2Rf-R2)及Rf∥R2=2R可算出Rf及R2的值。5.调试实验调试过程需要使用到装有CCS的电脑、DP-51PRO单片机综合仿真实验仪以及示波器。附:程序代码:msp430控制的液晶、键盘、AD转换程序此程序未加CD4051,只能实现对单通道AD的转换1.MAIN函数部分//这一部分为主程序i,LCD,7289,程序详见附件#includemsp430.h#includeZLG7289.h#includeLCD12864.h#defineucharunsignedchar#defineuintunsignedintuchardis1[]={电压值:};uchardis2[]={上限电压:};uchardis3[]={0};ucharnumber[];uintcolumn_num=0;#defineNum_of_Results8unsignedcharindex=0;5doubleaver=0.0;unsignedchartext[40];doublenum=0.0;unsignedintresults[Num_of_Results];voidmain(void){WDTCTL=WDTPW+WDTHOLD;//StopwatchdogtimerP6SEL=0x00;P8DIR|=BIT1+BIT2;_enable_interrupts();ZLG7289_initial();LCD_Init();LCD_Set_XY(0,0,dis1);//使能总中断LCD_Set_XY(1,2,dis2);P6SEL|=0x01;//EnableA/DchannelA0ADC12CTL0=ADC12ON+ADC12SHT0_8+ADC12MSC;//TurnonADC12,setsamplingtime//setmultiplesampleconversionADC12CTL1=ADC12SHP+ADC12CONSEQ_2;//Usesamplingtimer,setmodeADC12IE=0x01;//EnableADC12IFG.0ADC12CTL0|=ADC12ENC;//EnableconversionsADC12CTL0|=ADC12SC;//Startconversion_bis_SR_register(LPM4_bits+GIE);__no_operation();//Fordebugger}#pragmavector=PORT2_VECTOR__interruptvoidPORT2_ISR(void){ucharkey_data;key_data=ZLG7289_Key();switch(key_data){case0x00:dis3[0]=0+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x01:dis3[0]=1+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);colum6n_num++;break;case0x02:dis3[0]=2+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x03:dis3[0]=3+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x08:dis3[0]=4+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x09:dis3[0]=5+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x0a:dis3[0]=6+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x0b:dis3[0]=7+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x10:dis3[0]=8+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x11:dis3[0]=9+48;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x12:P8OUT^=BIT1;break;case0x13:P8OUT^=BIT2;break;case0x18:dis3[0]=46;number[column_num]=dis3[0];LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x19:if(dis3[0]==(9+48))dis3[0]=0+48;elseif(dis3[0]==46||dis3[0]==95);elsedis3[0]++;column_num--;LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x1a:if(dis3[0]==(0+48))dis3[0]=9+48;elseif(dis3[0]==46||dis3[0]==95);elsedis3[0]--;column_num--;LCD_Set_XY(column_num,3,dis3);column_num++;break;case0x1b:if(column_num!=0)column_num--;dis3[0]=32;LCD_Set_XY(column_num,3,dis3);break;}7P2IFG=0;//退出中断前必须手动清除IO口中断标志}#pragmavector=ADC12_VECTOR__interruptvoidADC12ISR(void){uchari=0;intj;switch(__even_in_range(ADC12IV,34)){case0:break;//Vector0:Nointerruptcase2:break;//Vector2:ADCoverflowcase4:break;//Vector4:ADCtimingoverflowcase6://Vector6:ADC12IFG0results[index]=ADC12MEM0;//Moveresultsindex++;if(index==8){index=0;num=0;for(i=0;i8;i++)num+=results[i]/8;aver=num/4096/10*33;j=aver*100;LCD_Set_XY_NUM(0,1,j/100);LCD_Set_XY_LETTERL(2,1,46);LCD_Set_XY_NUM(3,1,j%100/10);LCD_Set_XY_NUM(5,1,j%10);LCD_Set_XY_LETTERL(7,1,86);LCD_delayms(500);}case8:break;//Vector8:ADC12IFG1case10:break;//Vector10:ADC12IFG2case12:break;//Vector12:ADC12IFG3case14:break;//Vector14:ADC12IFG4case16:break;//Vector16:ADC12IFG5case18:break;//Vector18:ADC12IFG6case20:break;//Vector20:ADC12IFG7case22:break;//Vector22:ADC12IFG8case24:break;//Vector24:ADC12IFG9case26:break;//Vector26:ADC12IFG108case28:break;//Vector28:ADC12IFG11case30:break;//Vector30:ADC12IFG12case32:break;//Vector32:ADC12IFG13case34:break;//Vector34:ADC12IFG14default:break;}}2.LCD函数部分voidLCD_DelaymS(uintms){uinti;while(ms--){for(i=150;i0;i--)_N
本文标题:基于单片机的多功能波形发生器设计
链接地址:https://www.777doc.com/doc-2535914 .html