您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机课设波形发生器
单片机课程设计报告题目波形发生器专业电气工程及其自动化班级电气081学生姓名张洁学号3080421018指导老师王水鱼西安理工大学2010年秋季学期起止时间:2011年1月10日至2011年1月14日1目录1.设计目的……………………………………22.设计任务……………………………………23.设计指标与技术要求………………………24.总体设计思路………………………………25.总体设计及各模块功能分析………………35.1硬件部分……………………………………35.2软件部分……………………………………66.仿真结果…………………………………167.系统调试及问题分析……………………168.设计总结…………………………………179.参考文献…………………………………182波形发生器设计一.设计目的培养理论联系实际的设计思路,训练综合运用电路设计和有关必修课程的理论,结合生产实际分析和解决工程实际问题的能力,巩固,加深和扩展有关电子类方面的知识和能力。通过本次课程设计,应加强培养学生如下的能力:(1)加强自身独立的动手能力和思考解决问题的能力(2)提高学生的创造能力(3)学会使用PROTEUS软件二.设计任务设计一个波形发生器,能产生三角波,锯齿波,方波,正弦波。三.设计指标与技术要求1.使用MSC-51单片机系统2.设计电路使其能产生三角波,锯齿波,方波,正弦波。3.采用D/A转换器4.编写程序并进行调试四.总体设计思路本次课程设计的要求是设计一个波形发生器,可以产生方波,三角波,锯齿波和正弦波四种不同的波形。根据要求,首先需要一个开关选择电路,进行四种波形的选择,一个开关对应一个波形,选择好所要产生的波形后,接下来就是要设计能产生该波形的电路,3根据要求使用MSC-51单片机来执行某一波形的发生程序,产生输出波形的数字量,再向D/A转换器的输入端发送数据,将其转化成模拟量,再经过滤波电路进行滤波,然后将滤波后的波形送入示波器,从而可直观的看到该电路产生的波形,并判断输出结果与预期的结果是否一致。五.总体设计及各模块功能分析5.1.硬件部分1.总体设计电路及原理图图1如图1所示为波形发生器的总体设计电路图,首先有一个开关选择电路,由此可选择波形发生器所产生的波形,不同的开关对应不同的波形;之后再由MSC-51产生输出波形的数字量,然后再经过一个由D/A转换器构成的转换电路,将单片机产生的波形的数字量转换成模拟量,再经过滤波电路将其送入示波器进行显示。单片机MSC-51输出波形D/A转换器运放转换电路示波器开关示波器4如图2所示为总体设计原理图:5图22.各模块功能分析及说明(1)开关选择电路在该部分中,可通过不同的开关,选择不同的波形。首先分别将四个开关与P1口的低四位相连,之后可通过开关的开或者关状态向P1口对应端口输入高低电平,开关打开时向P1口输入低电平信号,开关闭合时向P1口输入高电平信号。(2)AT89C51单片机控制系统在该电路中,P0口与D/A转换器相连接;P2.0-P2.6与数码管相连接,构成数字显示电路(注:此时需加一个三极管驱动电路进行驱动),即1是三角波,2是锯齿波,3是方波,4是正弦波,P2.7与D/A转换器的片选端CS相连接进行片选;P1口的低四位与开关选择电路连接,进行不同波形的选择,同时,P3.6与D/A转换器的WR端相连接。(4)数码管及示波器显示电路&.数码管显示电路:在开关选择电路的基础上,当查询到P1口的某一端口为低电平时,即可调用相应的子程序,并点亮相应的数码管段,正确的显示数字,即1是三角波,2是锯齿波,3是方波,4是正弦波。由于使用的是共阳极数码管,故数码管应用三极管做驱动,此时三极管的基极接相应的P2并行口,发射极接数码管相应的段选端,集电极均接高电平。6数码管显示电路如图3所示:图3&.示波器显示电路:如图4所示为示波器及运算放大器构成的电路:7图4当开关选择电路查询到P1口的低四位的某一端口为低电平时,随即转向相应的产生波形的子程序,显示出相应的波形,即可直观的观察到波形的变化并进行相应的调整。(5)DAC0832转换电路如下图所示为DAC0832芯片,DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。DAC0832芯片具备双缓冲,单缓冲和直通三种输入方式,以便适应于各种电路的需要。因为系统只要求一路D/A转换,故我们采用的是单缓冲方式。DAC0832输出的是电流,而在该电路中要求输出电压,所以应先将输出电流转换成电压,再将其输出,此时可经过一个外接的运算放大器将电流转换成电压,再将转化后的电压输出。连线时其片选端CS与P2.7相连,WR1与P3.6相连接,ILE和VCC接高电平,GND,WR2和XFER均接地,输出口IOUT1和IOUT2接运算放大电路的输入端。(6)运放转换电路如图4所示为运放的转换电路,可将输入电流转化为输8出电压。在该部分中,运算放大器的反相输入端接DAC0832的IOUT1端,正相输入端接DAC0832的IOUT2端,并接地,同时其出端口接示波器的B输入端。5.2.软件部分1.主程序流程图如上图所示为主函数流程图2.程序设计(1)主程序的设计在main中,先将temp定义为无符号数,在使用while循环,9再调用keyscan子函数,并将返回值赋给temp,在使用switch语句进行判断,若为case0xfe,则调用triangle子函数,显示三角波;若为case0xfd,则调用rectangle子函数,显示方波;若为case0xfb,则调用juchi子函数,显示锯齿波;若为case0xf7,则调用sine子函数,显示正弦波;(2)显示波形的子函数由于要显示波形编号,在子函数中还应有显示波形序号的功能。若为1号波,则数码管的高两段亮,以此类推。在triangle,juchi,sine子函数中,均使用for循环,若循环次数小于255,则调用DAconvert子函数产生相应的波形,而在rectangle子函数中,调用DAconvert子函数和delay延时子函数,产生方波。在调用一个对应的子函数后,再返回主函数中继续判断,由此便可实现波形的相互转化。需要注意的是,在产生正弦波时,由于正弦波是非线性变化的,所以只能提前写好正弦波的各个点的值,并存放在dat[]中,之后才能正确调用。(3)延时子函数在产生方波时要有一定的延时才能显示波形,所以要调用延时子函数。在延时子函数中,使用for循环进行实现。3.源程序#includereg52.h#includeabsacc.h#defineucharunsignedchar10#defineuintunsignedint#defineDOUTXBYTE[0x7fff]ucharkey;charcodedat[]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf3,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,110x63,0x60,0x5d,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,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,0x0a,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};delay(uintx){uinty;for(y=x;y0;y--);}//延时函数ucharkeyscan(){//ucharkey;注:若将key没有设为全局变量,则每次扫描都会给key赋0!!12if(P1!=0xff){delay(500);//软件防抖if(P1!=0xff){key=P1;}}while(P1!=0xff);returnkey;//key若不是全局变量,key的返回值在松手的时候还原}DAconvert(uchark){DOUT=k;delay(15);}triangle()//产生三角波函数{uchara;for(a=0;a255;a++)DAconvert(a);13for(;a0;a--)DAconvert(a);}rectangle()//产生方波子函数{DAconvert(0x00);delay(100);DAconvert(0xff);delay(100);}juchi()//产生锯齿波子函数{ucharb;for(b=0;b255;b++)DAconvert(b);}sine()//产生正弦波子函数{ucharc;for(c=0;c255;c++)DAconvert(dat[c]);}14main(){uchartemp;while(1){temp=keyscan();switch(temp){case0xfe:{while(keyscan()==0xfe){triangle();P2=0x06;}break;}case0xfd:{while(keyscan()==0xfd){rectangle();15P2=0x75;}break;}case0xfb:{while(keyscan()==0xfb){juchi();P2=0x67;}break;}case0xf7:{while(keyscan()==0xf7){sine();P2=0x4E;}break;}default:break;}}16}六.仿真结果经过系统仿真,可以正确的得到三
本文标题:单片机课设波形发生器
链接地址:https://www.777doc.com/doc-4383013 .html