单片机控制之信号发生器(振荡器)设计单片机技术课程设计.doc_第1页
单片机控制之信号发生器(振荡器)设计单片机技术课程设计.doc_第2页
单片机控制之信号发生器(振荡器)设计单片机技术课程设计.doc_第3页
单片机控制之信号发生器(振荡器)设计单片机技术课程设计.doc_第4页
单片机控制之信号发生器(振荡器)设计单片机技术课程设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机设计报告单片机技术课程设计说明书课题名称 目录引言3一 设计任务31设计内容32设计要求4二 芯片功能介绍4三 总体功能图和总原理图5四 程序流程图61 锯齿波程序流程图62 三角波程序流程图73 梯形波程序流程图84 方波程序流程图95 正弦波程序流程图116 整体程序流程图12五 程序设计13六 仿真测试16七 总结与体会19八 参考文献19引言信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。这次的设计分为五个模块:单片机控制及显示模块、数模转换模块、波形产生模块、输出显示模块、电源模块。使用AT98C52作为主控台结合芯片DAC0832产生1HZ-10HZ频率可调的五种信号波(锯齿波、三角波、方波、梯形波、正弦波)。这几种波形有几个开关控制,可以随意进行切换,十分方便。另外,波形的频率和振幅也可以通过开关进行更改。可以说这次的设计操作简单,内容丰富,而且电路快捷明了。1设计任务1.1设计内容以单片机为基础,设计并开发能输出多种波形(正弦波、三角波、锯齿波、梯形波等),且频率、幅度可变的函数发生器。1.2设计要求设计借口电路,将这些外设构成一个简单的单片机应用系统,画出接口的连接图和仿真图,并编写出控制波形的程序。2芯片功能介绍 2.1、DAC0832芯片介绍: DAC0832为一个8位D/A转换器,单电源供电,在+5+15V范围内均可正常工作。基准电压的范围为10V,电流建立时间为1s,CMOS工艺,低功耗20mW。DAC0832的内部结构框图如下图所示。图2.1 DAC0832的内部结构框图2.2 DAC0832的外部引脚及功能介绍图如下: 图2.2 DAC0832介绍 2.3 DAC0832的应用:DAC0832一是用作单极性电压输出,二是用作双极性电压输出,最后是用作程控放大器。 2.4 DAC0832与8031的连接方式: DAC0832的与单片机的连接方式有三种方式:(1)单缓冲;(2)双缓冲、(3)直通方式。本程序采用的是方式一即单缓冲方式,ILE为高电平,CS、WR1、WR2、XFER为低电平。 图2.4 DAC0832引脚图3 总体功能图和总原理图函数发生器的设计 K2 键三角波 K3键梯形波 K4键方波 K5键正弦波 K6 调频调幅 K1 键 锯 齿 波 图3.1 总体功能图 图3.2 总原理图4 程序流程图4.1 锯齿波程序流程图锯齿波的实现过程是首先定义一个初值然后进行加法操作,加的步数的多少则根据要求的频率来进行。然后加到某个数之后就再重新设置为初值,再重复执行刚刚的操作,如此循环下去。流程图如下所示:设置初值A MOV A,#00H DPT#8000HMOVX DPTR,A 加上设定的步数,ADD A,步数判断A是否已经满了? 否 重新设置初值A 是 开 始 4.2 三角波程序流程图三角波的实现是设置一个初值,然后进行加数,同样是加到某个数之后再进行减数,减到初值之后就再返回到先前的操作,这个操作跟锯齿波的实现是相似的。此程序输入的VREF的电压是5V,因此该波形输出的最大频率是初值为00H和最终值为0FFH,且步数为1,这样输出的波形是最大的。程序流程图如下图所示:给A设置初值 MOV DPTR,#8000H MOVX DPTR,AADD A,步数 判断A是否已满? 否 是 SUBB A,步数 判断是否等于初值? 否/是 开 始 4.3 梯形波程序流程图梯形波输出跟锯齿波和三角波相似,只不过当加到顶峰后的一段时间内不改变A的值,过了一段时间后再将减少A的值,不过先后的步数可以一样也可以不一样。然后减到初始的值后也要持续一段时间,然后再进行加数,如此循环下去。程序流程图如下图所示:开 始 给A设置初值 MOV A,#00H 是 持续一段时间 SUBB A,步数2 判断是否等于初值? 否 是 持续一段时间 MOVX DPTR,A ADD A,步数1判断A是否已满? 否 4.4 方波程序流程图此波形的实现更加简单,只需开始的时候设置一个初值然后直接输出这个值就行了,输出一段时间后,然后再重新置一个数据,然后再输出这个数据一段时间,但是此时的时间一定要等于前面那段时间。这样才是一个方波,如果两个时间不相同,那就相当于一个脉冲波了。流程图如下图所示:开 始 给A设置初值 MOV DPTR,#8000H MOVX DPTR,A 设置输出的时间 再设置一个初值放入A中MOVX DPTR,A 输出一段时间 4.5 正弦波程序流程图正弦波的实现则相对比较复杂,因为正弦波的实现是输出各个点的值就行了,可是各个点值则要通过正弦函数来求出,不过这些值直接去网上下载下来使用就可以了。输出的数据刚好是256个数据,这样则可以直接相加就行了。流程图如下图所示: 4.6 整体程序流程图如下图所示:开 始 判断P1.0是否为1? 判断P1.1是否为1? 判断P1.2是否为1? 判断P1.3是否为1? 判断P1.4是否为1? 否 否 否 否 否 是 是 是 是 是 输出响应的波形 5 程序设计/注:51单片机配合DAC0832生成三角波,和正旋波#include#include#define uint unsigned int#define uchar unsigned char#define LED7 XBYTE0x9f00#define LED6 XBYTE0x9f01#define LED5 XBYTE0x9f02#define LED4 XBYTE0x9f03#define LED3 XBYTE0x9f04#define LED2 XBYTE0x9f05#define LED1 XBYTE0x9f06#define LED0 XBYTE0x9f07uint t= /共阴数码显示表(89c52) 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;sbit p27=P27;sbit p26=P26;sbit p25=P25;sbit d0=P00;sbit d1=P01;sbit d2=P02;sbit d3=P03;sbit d4=P04;sbit d5=P05;sbit d6=P06;sbit d7=P07;unsigned char i;void delay(uint z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-); void init()LED0=0;LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;LED7=0;unsigned char flag; /波型输出标置变量void display()LED7=tflag;bit time; unsigned char sin(unsigned char x)unsigned char code sin_tab=125,128,131,134,138,141,144,147,150,153,156,159, 162,165,168,171,174,177,180,182,185,188,191,193,196,198,201,203, 206,208,211,213,215,217,219,221,223,225,227,229,231,232,234,235, 237,238,239,241,242,243,244,245,246,246,247,248,248,249,249,250, 250,250,250,250,250,250,250,249,249,248,248,247,246,246,245,244, 243,242,241,239,238,237,235,234,232,231,229,227,225,223,221,219, 217,215,213,211,208,206,203,201,198,196,193,191,188,185,182,180, 177,174,171,168,165,162,159,156,153,150,147,144,141,138,134,131, 128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76,73, 70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,29,27,25,27,29,27,25,23,21, 19,18,16,15,13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,1,1,2, 2,3,4,4,5,6,7,8,9,11,12,13,15,16,18,19,21,23,25,27,29,31,33,35,37, 39,42,44,47,49,52,54,57,59,62,65,68,70,73,76,79,82,85,88,97,94,97, 100,103,106,109,112,116,119,122; return sin_tabx; void DAC0832(unsigned char x) P1=x;void keyscan() p27=1; p26=0; p25=1; if(d1=0) delay(5); if(d1=0) flag=0; if(d2=0) /delay(5); / if(d2=0) flag=1; if(d3=0) delay(5); if(d3=0) flag=2; if(d4=0) delay(5); if(d4=0) flag=3;void main()init();/unsigned char i;TMOD=0X02; /定时器0用于控制输出波的频率TH0=256-40;ET0=1; /按键接于外部中断0,与中断1IT0=1;IT1=1;EX0=1;EX1=1;EA=1;TR0=1;flag=2; /开始时无输出i=0;while(1) keyscan(); display();. if(time=1) time=0; if(i249) i=0; else i+; switch(flag) /当按键1的为输出三角波,按键2时输出正弦波 case 0AC0832(0);break; case 1: if(i125) DAC0832(250-i); else DAC0832(i); break; case 2: DAC0832(sin(i); break; default: break; void time0() interrupt 1 time=1;/*void int0() interrupt 0 /按键1接于外部中断0 flag=1; void int1() interrupt 2 /按键2接于外部中断1 flag=2; */ 6 仿真测试现在使用软件Proteus进行仿真测试,下面就相应的仿真效果图: 图5 锯齿波仿真效果图 图6 三角波仿真效果图 图7 梯形波仿真效果图 图8 方波仿真效果图 图9 正弦波仿真效果图从仿真的效果来看,这次的信号发生器的设计是很成功的。而且波形也产生的很漂亮和标准。7 总结与体会经过一系列的努力,终于顺利地完成了这个单片机课程的设计。这是一个磨练意志的过程。从课题的选择开始,计算器的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术。当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是细心和耐心。在很大程度上培养了我拼搏的工作精神。使我受益匪浅,更

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论