《基于51单片机信号发生器设计说明.doc》由会员分享,可在线阅读,更多相关《基于51单片机信号发生器设计说明.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 . . . 摘 要:本系统利用单片机AT89S52采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz3kHz的波形。通过键盘来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以与数值,系统大致包括信号发生部分、数/模转换部分以与液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。关键词:单片机AT89S52、DAC0832、液晶1602Abstract: this system capitalize on AT89s52,it makes us
2、e of central processor to generate three kinds of waves, they are triangle wave, and use D/A conversion module, wave generate module and liquid crystal display of 1602, it can have the 1Hz-3KHz profile. In this system it can control wave form choosing, frequency, range,can have the sine wave, the sq
3、uare-wave, the triangular wave. Simultaneously may also take the frequency measurement frequency,and displays them through liquid crystal display of 1602.this design includes three modules. They are D/A conversion module, wave generate module and liquid crystal display of LED module. In this design,
4、 the wave generator into wave form module and D/A conversion module are discussed in detail.key word: AT89S52, DAC0832, liquid crystal 1602.目录1. 系统设计1.1设计要求1.2方案设计与论证 1.2.1 信号发生电路方案论证 1.2.2 单片机的选择论证 1.2.3 显示方案论证 1.2.4 键盘方案论证1.3 总体系统设计 1.4 硬件实现与单元电路设计 1.4.1 单片机最小系统的设计1.4.2 波形产生模块设计1.4.3 显示模块的设计1.4.4
5、键盘模块的设计1.5 软件设计流程1.6 源程序2. 输出波形的种类与频率的测试2.1 测试仪器与测试说明2.2 测试结果3. 设计心的与体会4. 附录 4.1 参考文献 4.2 附图1、 系统设计经过考虑,我们确定方案如下:利用AT89S52单片机采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制三种波形的类型选择、频率变化,最终输出显示其各自的类型以与数值。1.1、设计要求 1)、利用单片机采用软件设计方法产生三种波形 2)、三种波形可通过键盘选择 3)、波形频率可调 4)、需显示波形
6、的种类与其平率1.2方案设计与论证 1.2.1 信号发生电路方案论证 方案一:通过单片机控制D/A,输出三种波形。此方案输出的波形不够稳定,抗干扰能力弱,不易调节。但此方案电路简单、成本低。方案二:使用传统的锁相频率合成方法。通过芯片IC145152,压控振荡器搭接的锁相环电路输出稳定性极好的正弦波,再利用过零比较器转换成方波,积分电路转换成三角波。此方案,电路复杂,干扰因素多,不易实现。方案三:利用MAX038芯片组成的电路输出波形。MAX038是精密高频波形产生电路,能够产生准确的三角波、方波和正弦波三种周期性波形。但此方案成本高,程序复杂度高。以上三种方案综合考虑,选择方案一。1.2.2
7、 单片机的选择论证 方案一:AT89S52单片机是一种高性能8位单片微型计算机。它把构成计算机的中央处理器CPU、存储器、寄存器、I/O接口制作在一块集成电路芯片中,从而构成较为完整的计算机、而且其价格便宜。方案二:C8051F005单片机是完全集成的混合信号系统级芯片,具有与8051兼容的微控制器核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片还集成了数据采集和控制系统中常用的模拟部件和其他数字外设与功能部件,而且执行速度快。但其价格较贵以上两种方案综合考虑,选择方案一 1.2.3 显示方案论证 方案一:采用LED数码管。LED数码管由8个发光二极管组成,每只数码管轮
8、流显示各自的字符。由于人眼具有视觉暂留特性,当每只数码管显示的时间间隔小于1/16s时人眼感觉不到闪动,看到的是每只数码管常亮。使用数码管显示编程较易,但要显示容多,而且数码管不能显示字母。方案二:采用LCD液晶显示器1602。其功率小,效果明显,显示编程容易控制,可以显示字母。以上两种方案综合考虑,选择方案二。1.2.4 键盘方案论证方案一:矩阵式键盘。矩阵式键盘的按键触点接于由行、列母线构成的矩阵电路的交叉处。当键盘上没有键闭合时,所有的行和列线都断开,行线都呈高电平。当某一个键闭合时,该键所对应的行线和列线被短路。方案二:编码式键盘。编码式键盘的按键触点接于74LS148芯片。当键盘上没
9、有闭合时,所有键都断开,当某一键闭合时,该键对应的编码由74LS148输出。以上两种方案综合考虑,选择方案一。1.3总体系统设计该系统采用单片机作为数据处理与控制核心,由单片机完成人机界面、系统控制、信号的采集分析以与信号的处理和变换,采用按键输入,利用液晶显示电路输出数字显示的方案。将设计任务分解为按键电路、液晶显示电路等模块。图(1)为系统的总体框图 图(1) 总体方框图1 图(4)DAC0832的部结构1.4.3 显示模块的设计通过液晶1602显示输出的波形、频率,其电路图如下:图(5)液晶显示如上图所示,1602的八位数据端接单片机的P1口,其三个使能端RS、RW、E分别接单片机的P3
10、.2P3.4。通过软件控制液晶屏可以显示波形的种类以与波形的频率。1.4.4 键盘显示模块的设计本系统采用独立键盘,其连接电路图如下:图(6)键盘图中键盘独立键盘引出的八跟线分别接单片机的P2口,只用其第四列,因此在程序初始化时P2.7脚给低电平。如图开关3用来切换输出波形、开关7和8用来调节频率的加减。当按开关7时输出波形的频率增加,按开关8时输出波形的频率减小。1.5 软件设计流程本系统采用AT89S52单片机,用编程的方法来产生三种波形,并通过编程来切换三种波形以与波形频率的改变。具体功能有:(1)各个波形的切换;(2)各种参数的设定;(3)频率增减等。软件调通后,通过编程器下载到AT8
11、9S52芯片中,然后插到系统中即可独立完成所有的控制。软件的流程图如下: 图(7)程序流程图1.6源程序#include #define uchar unsigned char #define uint unsigned int sbit lcdrw=P33;sbit lcdrs=P32;sbit lcde=P34;sbit d=P27;sbit s1=P20;sbit s2=P21;sbit s3=P22;sbit cs=P35;sbit wr=P36;uchar s1num,a,ys,j;uint fre;uchar code tosin256=0x80,0x83,0x86,0x89,0x
12、8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x
13、ff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,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,0x
14、89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,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,0x
15、02,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,0x
16、5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ;/*正弦波码 */void delay(uint z)/延时子程序 uchar i,j; for(i=z;i0;i-) for(j=110;j0;j-);void delay1(uint y) uint i; for(i=y;i0;i-);void write_(uchar ) /1602写指令 lcdrs=0;P1=;delay(5);lcde=1;delay(5);lcde=0;void write_data(uchar date) /1602数据 lcdrs=1;P1=
17、date;delay(5);lcde=1;delay(5);lcde=0; void init() /初始化 lcdrw=0; lcde=0; wr=0; cs=0; write_(0x38); write_(0x0c); write_(0x06); write_(0x01); write_(0x80+0x00); write_data(0x77); /写wave: write_data(0x61); write_data(0x76); write_data(0x65); write_data(0x3a); write_(0x80+0x40); /写 f: write_data(0x66);
18、write_data(0x3a); void write_f(uint date) /写频率 uchar qian,bai,shi,ge; qian=date/1000; bai=date/100%10; shi=date/10%10; ge=date%10; write_(0x80+0x42); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x48); write_data(0x5a);void xsf()/显示频率 if(s1num=1)
19、 fre=(1000/(9+3*ys); write_f(fre); if(s1num=2) fre=(100000/(3*ys); write_f(fre); if(s1num=3) fre=(1000/(15+3*ys); write_f(fre); void keyscanf() d=0;if(s1=0) delay(5);if(s1=0) while(!s1); s1num+; if(s1num=1) ys=0; write_(0x80+0x05); write_data(0x73); /写sine: write_data(0x69); write_data(0x6e); write_
20、data(0x65); write_data(0x20); write_data(0x20); if(s1num=2) ys=10;write_(0x80+0x05); write_data(0x73); /写squrae write_data(0x71); write_data(0x75); write_data(0x61); write_data(0x72); write_data(0x65); if(s1num=3) ys=0; write_(0x80+0x05); /train write_data(0x74); write_data(0x72); write_data(0x61);
21、write_data(0x69); write_data(0x6e); write_data(0x20); if(s1num=4) s1num=0;P1=0; write_(0x80+0x05); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); write_(0x80+0x42); write_data(0x20); write_data(0x20); write_data(0x20); write_data(0x20); wr
22、ite_data(0x20); write_data(0x20); if(s2=0) delay(5); if(s2=0) while(!s2); ys+; if(s3=0) delay(5); if(s3=0) while(!s3); ys-; void main() init();while(1) keyscanf();if(s1num=1) /正弦波/ for(j=0;j255;j+) P0=tosinj; delay1(ys); if(s1num=2) /方波/ P0=0xff; delay1(ys); P0=0; delay1(ys);if(s1num=3) /三角波/ if(a12
23、8) P0=a; delay1(ys); else P0=255-a; delay1(ys); a+;if(!(s1&s2&s3)xsf();2、输出波形的种类与频率的测试2.1、测量仪器与测试说明测量仪器:稳压电源、示波器、数字万用表。测量说明:正弦波、矩形波、三角波信号的输出,通过对独立键盘来实现其的不同波形的输出以与其频率的改变。2.2测试过程 当程序下进去时经过初始化,液晶屏的上只显示“wave:”和“f:“,当开关三按一下是此时输出波形为正弦波,按两下时输出为方波,按三下时输出为三角波。另外两个开关可以调节频率,三种波形的频率可调围不同,分别如下: 正弦波:1180HZ 方 波:13
24、.3KHZ 三角波:1180HZ根据示波器的波形频率的显示计算出三种波形的频率计算公式如下:正弦波:f=(1000/(9+3*ys)方 波:f=(100000/(3*ys)三角波:f=(1000/(15+3*ys)其中ys为延时的变量。三种波形的仿真波形图如下: 图(8)正弦波图形 图(9)方波图形 图(10)三角波图行2.3、测试结果各项指标均达到要求。测试数据如下:1)、产生正弦波、方波、三角波基本实现2)、三种波形的频率都可调,但不能步进的调节,其中方波的可调围最广为13.3KHZ,其他两种波形的频率围不大1180HZ3)、显示部分基本实现4)、键盘功能实现3、设计心的与体会通过这次毕业
25、设计,使我深刻地认识到学好专业知识的重要性,也理解了理论联系实际的含义,并且检验了大学三年的学习成果,进一步加深了我对专业知识的了解和认识以与动手的能力。虽然在这次设计中对于所学知识的运用和衔接还不够熟练,作品完成的还不是很出色。但是我将在以后的工作和学习中继续努力、不断完善。这个设计是对我们过去所学知识的系统提高和扩充的过程,为今后的发展打下了良好的基础。4、附录4.1 参考文献1 戴仙金主编 51单片机与其C语言汇编程序开发实例 清华大学,20082 高吉祥主编 全国大学生电子设计竞赛培训系列教程 电子工业,20073 素行主编 模拟电子技术基础简明教程 高等教育,20074 辉平主编 单片机原理与应用设计 航空航天大学 2007 4.2 附图 图(11)总体原理设计图18 / 17