基于51单片机函数信号发生器设计_第1页
基于51单片机函数信号发生器设计_第2页
基于51单片机函数信号发生器设计_第3页
基于51单片机函数信号发生器设计_第4页
基于51单片机函数信号发生器设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要:本系统采用单片机AT89S52,通过编程方式产生锯齿波、正弦波和矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换为模拟信号,滤波放大,最后用示波器显示出来。生成 1Hz- 3k Hz 波形。通过键盘控制三种波形的类型选择和频率变化,并通过液晶屏1602显示它们各自的类型和数值。系统大致包括三个部分:信号发生部分、数模转换部分和液晶显示部分。详细讨论了数模转换部分和波形生成与变化部分。关键词:微控制器AT89S52 , DAC0832 , LCD 1602目录 TOC o 1-3 h z u HYPERLINK l _Toc343638102 1. 系统设计 PAGEREF

2、_Toc343638102 h 4 HYPERLINK l _Toc343638103 1.1 、设计要求 PAGEREF _Toc343638103 h 4 HYPERLINK l _Toc343638104 1.2 、方案设计与论证 PAGEREF _Toc343638104 h 4 HYPERLINK l _Toc343638105 1.3 .整体系统设计 PAGEREF _Toc343638105 h 6 HYPERLINK l _Toc343638106 1.4 .硬件实现与单元电路设计 PAGEREF _Toc343638106 h 7 HYPERLINK l _Toc343638

3、107 1.5 、软件设计流程 PAGEREF _Toc343638107 h 10 HYPERLINK l _Toc343638108 1.6 、源程序 PAGEREF _Toc343638108 h 11 HYPERLINK l _Toc343638109 2.测试输出波形的类型和频率 PAGEREF _Toc343638109 h 16 HYPERLINK l _Toc343638110 2.1 、测量仪器及测试说明 PAGEREF _Toc343638110 h 16 HYPERLINK l _Toc343638111 2.2 .测试过程 PAGEREF _Toc343638111 h

4、 16 HYPERLINK l _Toc343638112 2.3 .测试结果 PAGEREF _Toc343638112 h 18 HYPERLINK l _Toc343638113 3.设计思维和体验 PAGEREF _Toc343638113 h 19 HYPERLINK l _Toc343638114 4.附录 PAGEREF _Toc343638114 h 19 HYPERLINK l _Toc343638115 4.1参考文献 PAGEREF _Toc343638115 h 19 HYPERLINK l _Toc343638116 4.2图 PAGEREF _Toc34363811

5、6 h 19系统设计经过考虑,我们确定方案如下:使用AT89S52单片机通过编程方式产生锯齿波、正弦波和矩形波三种波形,然后通过D/A转换器DAC0832将数字信号转换为模拟信号,滤波放大,最后使用示波器显示,通过键盘控制三种波形的类型选择和频率变化,最终输出显示它们各自的类型和数值。1.1。设计要求1)、用单片机通过软件设计方法产生三个波形2)、三种波形可以通过键盘选择3)、波形频率可调4)、要显示的波形类型及其扁平率1.2 方案设计与论证1.2.1 信号发生电路方案演示方案一:通过单片机控制D/A,输出三个波形。该方案输出的波形不够稳定,抗干扰能力弱,不易调节。但该方案电路简单,成本低。方

6、案二:使用传统的锁相频率合成方法。通过芯片IC145152 ,由压控振荡器连接的锁相环电路输出稳定性极好的正弦波,再经过零比较器转换为方波,积分电路将其转换为三角波海浪。该方案电路复杂,干扰因素多,不易实现。MAX038芯片组成的电路输出波形。 MAX038是一款精密的高频波形发生电路,可以产生精确的三角波、方波和正弦周期波形。但这种方案成本高,程序复杂度高。综合考虑以上三个选项,选择选项一。1.2.2 单片机选型演示方案一: AT89S52单片机是一款高性能8位单片机。它将计算机的中央处理器CPU 、存储器、寄存器和I/O接口集成在一个集成电路芯片中,从而构成一台比较完整的计算机,而且价格便

7、宜。方案二: C8051F005单片机是全集成的混合信号系统级芯片,单片机内核兼容8051,完全兼容MCS-51指令集。该芯片除了采用8052标准的数字外设部分外,还集成了模拟部分等数据采集和控制系统常用的数字外设和功能部分,执行速度快。但它更贵综合考虑以上两个方案,选择方案一1.2.3 展示方案演示方案一:使用LED数码管。 LED数码管由8个发光二极管组成,每个数码管轮流显示自己的字符。由于人眼的视觉暂留特性,当每个数码管显示的时间间隔小于1/16s时,人眼感觉不到闪烁,每个数码管始终亮。用数码管显示编程比较容易,但需要更多的显示容量,而且数码管不能显示字母。方案二:使用LCD液晶显示器1

8、602 。功率小,效果明显,显示编程容易控制,可显示字母。综合考虑以上两个方案,选择方案二。1.2.4键盘方案的论证选项 1:矩阵键盘。矩阵键盘的关键点连接到由行和列母线组成的矩阵电路的交叉点。当键盘上没有按键关闭时,所有行列线都断开,行线为高电平。当一个键被关闭时,与该键对应的行和列线被短路。选项 2:编码键盘。编码键盘的按键连接到74LS148芯片。当键盘未关闭时,所有键都断开连接。当一个钥匙被关闭时,由74LS148输出该钥匙的对应代码。综合考虑以上两个选项,选择选项一。1.3整体系统设计系统采用单片机为数据处理与控制核心,完成人机界面、系统控制、信号采集与分析、信号处理与转换。设计任务

9、分解为按键电路、液晶显示电路等模块。图(1)为系统整体框图图(1)整体框图1.4 硬件实现及单元电路设计1.4.1单片机最小系统的设计89C51是带有ROM/EPROM的单片机,因此该芯片构成的最小系统简单可靠。使用80C51单片机组成最小应用系统时,只需将单片机与时钟电路和复位电路连接即可,如图中的89C51单片机最小系统图(2)。由于集成的限制,最小的应用系统只能作为一些小的控制单元。其应用特点:I/O端口。内部存储器容量有限。应用系统开发比较特殊。图(2) 8 9C 51 MCU 最小系统1.4.2 波形发生模块设计三种波形由单片机采用编程方式产生,经DA转换模块DAC0832滤波放大后

10、输出。其电路图如下:图(3)波形发生电路如上图所示,单片机的P0口接DAC0832的8位数据输入端,DAC0832的输出端接放大器,放大后输出需要的波形。 DAC0832以8位数据并行输入,其结构图如下:图(4)DAC0832的部分结构1.4.3 显示模组设计通过液晶1602显示输出波形和频率,电路图如下:图(5)液晶显示如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接P3.2-P3。 4.单片机。软件控制的液晶屏上可以显示波形的类型和频率。1.4.4 键盘显示模块设计系统采用独立键盘,其连接电路图如下:图 (6) 键盘图中从键盘的独立键盘引出的八根线分别接单

11、片机的P2口,只用到了第四列,所以程序初始化时P2.7脚为低电平。如图所示,开关3用于切换输出波形,开关7和8用于调节频率的加减。当按下开关 7 时,输出波形的频率增加,当按下开关 8 时,输出波形的频率降低。1.5 软件设计过程本系统采用AT89S52单片机,采用编程方式产生三个波形,通过编程随波形频率的变化切换三个波形。具体功能是:(1)各波形的切换; (2)各种参数的设置; (3)频率增减等。软件调整好后,通过编程器下载到AT89S52芯片,然后插入系统,独立完成所有控制。软件流程图如下:图(7)程序流程图1.6 源程序#include #define uchar 无符号字符#defin

12、e uint 无符号整数sbit lcdrw=P33;sbit lcdrs=P32;sbit lcde=P34;位 d=P27;位 s1=P20;位 s2=P21;位 s3=P22;位 cs=P35;sbit wr=P36;uchar s1num,a,ys,j;单位免费;uchar 代码 tosin256=0 x80,0 x83,0 x86,0 x89,0 x8d,0 x90,0 x93,0 x96,0 x99,0 x9c,0 x9f,0 xa2,0 xa5,0 xa8,0 xab,0 xae,0 xb1,0 xb4,0 xb7,0 xba,0 xbc,0 xbf,0 xc2,0 xc5,0

13、xc7,0 xca,0 xcc,0 xcf,0 xd1,0 xd4,0 xd6,0 xd8,0 xda,0 xdd,0 xdf,0 xe1,0 xe3,0 xe5,0 xe7,0 xe9,0 xea,0 xec,0 xee,0 xef,0 xf1,0 xf2,0 xf4,0 xf5,0 xf6,0 xf7,0 xf8,0 xf9,0 xfa,0 xfb,0 xfc,0 xfd,0 xfd,0 xfe,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xff,0 xfe,0 xfd,0 xfd,0 xfc,0

14、xfb,0 xfa,0 xf9,0 xf8,0 xf7,0 xf6,0 xf5,0 xf4,0 xf2,0 xf1,0 xef,0 xee,0 xec,0 xea,0 xe9,0 xe7,0 xe5,0 xe3,0 xe1,0 xde,0 xdd,0 xda,0 xd8,0 xd6,0 xd4,0 xd1,0 xcf,0 xcc,0 xca,0 xc7,0 xc5,0 xc2,0 xbf,0 xbc,0 xba,0 xb7,0 xb4,0 xb1,0 xae,0 xab,0 xa8,0 xa5,0 xa2,0 x9f,0 x9c,0 x99,0 x96,0 x93,0 x90,0 x8d,0

15、x89,0 x86,0 x83,0 x80,0 x80,0 x7c,0 x79,0 x76,0 x72,0 x6f,0 x6c,0 x69,0 x66,0 x63,0 x60,0 x5d,0 x5a,0 x57,0 x55,0 x51,0 x4e, 0 x4c, 0 x48, 0 x45, 0 x43, 0 x40, 0 x3d, 0 x3a, 0 x38, 0 x35, 0 x33, 0 x30,0 x2e, 0 x2b, 0 x29, 0 x27, 0 x25, 0 x22, 0 x20, 0 x1e, 0 x1c, 0 x1a, 0 x18, 0 x16,0 x15,0 x13,0 x1

16、1,0 x10,0 x0e,0 x0d,0 x0b,0 x0a,0 x09,0 x08,0 x07,0 x06,0 x05,0 x04,0 x03,0 x02,0 x02,0 x01,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x01,0 x02,0 x02,0 x03,0 x04,0 x05,0 x06,0 x07,0 x08,0 x09,0 x0a,0 x0b,0 x0d,0 x0e,0 x10,0 x11,0 x13,0 x15,0 x16,0 x18,0 x1a,0 x1c,0 x1

17、e,0 x20,0 x22,0 x25,0 x27,0 x29,0 x2b,0 x2e,0 x30,0 x33,0 x35,0 x38,0 x3a,0 x3d,0 x40,0 x43,0 x45,0 x48,0 x4c,0 x4e,0 x51,0 x55,0 x57,0 x5a,0 x5d,0 x60,0 x63,0 x66,0 x69,0 x6c,0 x6f,0 x72,0 x76,0 x79,0 x7c,0 x80 ;/*正弦波码*/void delay(uint z) /延迟子程序uchar i,j;对于(i=z;i0;i-)for(j=110;j0;j-);无效延迟1(uint y)u

18、int i;for(i=y;i0;i-);void write_(uchar ) /1602写指令lcdrs=0;P1=;延迟(5);液晶显示器=1;延迟(5);液晶显示器=0;void write_data(uchar date) /1602数据液晶显示器=1;P1=日期;延迟(5);液晶显示器=1;延迟(5);液晶显示器=0;void init() /初始化lcdrw=0;液晶显示器=0;WR=0;cs=0;写_(0 x38);写_(0 x0c);写_(0 x06);写_(0 x01);write_(0 x80+0 x00);写入数据(0 x77); /写波:写入数据(0 x61);写入数

19、据(0 x76);写入数据(0 x65);写入数据(0 x3a);write_(0 x80+0 x40); /写f:写入数据(0 x66);写入数据(0 x3a); void write_f(uint date) /写频率uchar 钱,白,石,格;钱=日期/1000;白=日期/100%10;时=日期/10%10;ge=日期%10;write_(0 x80+0 x42);write_data(0 x30+钱);write_data(0 x30+bai);write_data(0 x30+shi);write_data(0 x30+ge);写入数据(0 x48);写入数据(0 x5a);void

20、 xsf() /显示频率如果(s1num=1) fre=(1000/(9+3*ys);write_f(fre);如果(s1num=2)fre=(100000/(3*ys);write_f(fre);如果(s1num=3)fre=(1000/(15+3*ys);write_f(fre);无效的keyscanf()d=0;如果(s1=0)延迟(5);如果(s1=0) 而(!s1);s1num+;如果(s1num=1)ys=0;write_(0 x80+0 x05);写入数据(0 x73); /写正弦:写入数据(0 x69);写入数据(0 x6e);写入数据(0 x65);写入数据(0 x20);写

21、入数据(0 x20); 如果(s1num=2)ys=10;write_(0 x80+0 x05);写入数据(0 x73); /写正方形写入数据(0 x71);写入数据(0 x75);写入数据(0 x61);写入数据(0 x72);写入数据(0 x65); 如果(s1num=3) ys=0; write_(0 x80+0 x05); /火车写入数据(0 x74);写入数据(0 x72);写入数据(0 x61);写入数据(0 x69);写入数据(0 x6e);写入数据(0 x20);如果(s1num=4)s1num=0;P1=0; write_(0 x80+0 x05);写入数据(0 x20);写

22、入数据(0 x20);写入数据(0 x20);写入数据(0 x20);写入数据(0 x20);写入数据(0 x20); write_(0 x80+0 x42);写入数据(0 x20);写入数据(0 x20);写入数据(0 x20);写入数据(0 x20); 写入数据(0 x20); 写入数据(0 x20); 如果(s2=0)延迟(5);如果(s2=0)而(!s2);是的+;如果(s3=0)延迟(5);如果(s3=0)而(!s3);是的;无效的主要()在里面();而(1)keyscanf();if(s1num=1) /正弦波/ 对于(j=0;j255;j+)P0=tosinj;延迟1(ys);if(s1num=2) /方波/ P0=0 xff;延迟1(ys);P0=0;延迟1(ys);if(s1num=3) /三角波/ 如果(一128)P0=a;延迟1(ys); 别的P0=255-a;延迟1(ys); 一个+;如果(!(s1&s2&s3)xsf();测试输出波形的类型和频率2. 1. 测量仪器和测试说明测量仪器:稳压电源、示波器、数字万用表。测量说明:正弦波、矩形波和三角波信号的输出通过独立的键盘实现不同波形的输

温馨提示

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

评论

0/150

提交评论