基于51单片机的函数发生器和示波器
基于51单片机的波形发生器的设计讲解
目录1 引言 (1)1.1 题目要求及分析 (1)1.1.1 示意图 (1)1.2 设计要求 (1)2 波形发生器系统设计方案 (2)2.1 方案的设计思路 (2)2.2 设计框图及系统介绍 (2)2.3 选择合适的设计方案 (2)3 主要硬件电路及器件介绍 (4)3.1 80C51单片机 (4)3.2 DAC0832 (5)3.3 数码显示管 (6)4 系统的硬件设计 (8)4.1 硬件原理框图 (8)4.2 89C51系统设计 (8)4.3 时钟电路 (9)4.4 复位电路 (9)4.5 键盘接口电路 (10)4.7 数模转换器 (11)5 系统软件设计 (12)5.1 流程图: (12)5.2 产生波形图 (12)5.2.1 正弦波 (12)5.2.2 三角波 (13)5.2.3 方波 (14)6 结论 (16)主要参考文献 (17)致谢....................................................... 错误!未定义书签。
1引言1.1题目要求及分析题目:基于51单片机的波形发生器设计,即由51单片机控制产生正弦波、方波、三角波等的多种波形。
1.1.1示意图图1:系统流程示意图1.2设计要求(1) 系统具有产生正弦波、三角波、方波三种周期性波形的功能。
(2) 用键盘控制上述三种波形(同周期)的生成,以及由基波和它的谐波(5次以下)线性组合的波形。
(3) 系统具有存储波形功能。
(4) 系统输出波形的频率范围为1Hz~1MHz,重复频率可调,频率步进间隔≤100Hz,非正弦波的频率按照10次谐波来计算。
(5) 系统输出波形幅度范围0~5V。
(6) 系统具有显示输出波形的类型、重复频率和幅度的功能。
2波形发生器系统设计方案设计并制作一个波形信号发生器,能够产生正弦波、方波、三角波的波形,其中不使用DDS和一些专用的波形产生芯片。
并让系统的频率范围在1Hz~1MHZ可调节,在频率范围在1HZ~10KHz时,步进小于或等于10Hz,在频率范围在10KHz~1MHz时,步进小于或等于100Hz,并且电压在0~5V范围,能够实时的显示波形的类型、频率和幅值。
电子系统设计课程设计
《电子系统设计课程设计》项目设计书
设计名称基于51单片机的函数信号发生器
小组成员1
小组成员2
小组成员3
专业电子信息工程
任课教师
2011年11
基于51单片机的函数信号发生器
1.系统设计项目
系统利用AT89C52单片机采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
2.设计要求
1)、利用单片机采用软件设计方法产生四种波形
2)、四种波形可通过键盘选择
3)、波形频率可调
4)、需显示波形的种类及其频率
3.系统总体设计框图
4.器件选择
1)单片机AT89C52单片机是一种高性能8位单片微型计算
机。
它把构成计算机的中央处理器CPU、存储器、寄存器、
I/O接口制作在一块集成电路芯片中,从而构成较为完整的计
算机、而且其价格便宜。
89C51单片机最小系统
由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出波形如下
波形产生电路
2)显示采用LCD液晶显示器1602。
其功率小,效果明显,
显示编程容易控制,可以显示字母。
液晶显示
3)键盘独立式键盘具有硬件与软件相对简单的特点,其缺
点是按键数量较多时,要占用大量口线。
5.系统总图
6.调试
利用multisim软件进行测试
元件清单:AT89C52 DAC0832 液晶1602 12M晶振开关按键4个等等。
51单片机延时函数
51单片机延时函数在嵌入式系统开发中,51单片机因其易于学习和使用、成本低廉等优点被广泛使用。
在51单片机的程序设计中,延时函数是一个常见的需求。
通过延时函数,我们可以控制程序的执行速度,实现定时器功能,或者在需要的时候进行延时操作。
本文将介绍51单片机中常见的延时函数及其实现方法。
一、使用for循环延时这种方法不精确,但是对于要求不高的场合,可以用来估算延时。
cvoid delay(unsigned int time){unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<1275;j++);}这个延时函数的原理是:在第一个for循环中,我们循环了指定的时间次数(time次),然后在每一次循环中,我们又循环了1275次。
这样,整个函数的执行时间就是time乘以1275,大致上形成了一个延时效果。
但是需要注意的是,这种方法因为硬件和编译器的不同,延时时间会有很大差异,所以只适用于对延时时间要求不精确的场合。
二、使用while循环延时这种方法比使用for循环延时更精确一些,但是同样因为硬件和编译器的不同,延时时间会有差异。
cvoid delay(unsigned int time){unsigned int i;while(time--)for(i=0;i<1275;i++);}这个延时函数的原理是:我们先进入一个while循环,在这个循环中,我们循环指定的时间次数(time次)。
然后在每一次循环中,我们又循环了1275次。
这样,整个函数的执行时间就是time乘以1275,大致上形成了一个延时效果。
但是需要注意的是,这种方法因为硬件和编译器的不同,延时时间会有差异,所以只适用于对延时时间要求不精确的场合。
三、使用定时器0实现精确延时这种方法需要在单片机中开启定时器0,并设置定时器中断。
在中断服务程序中,我们进行相应的操作来实现精确的延时。
这种方法需要使用到单片机的定时器中断功能,相对复杂一些,但是可以实现精确的延时。
基于单片机的波形发生器设计
基于单片机的波形发生器设计摘要:本文用单片机作为核心芯片,设计出一款高精度频率信号发生器,具有体积小功率低等优点。
为了实现幅度可控的功能,选用了2个数模转换器片完成此功能,其中一个用来产生波形,另外一个设计成程控放大器进行改变幅度,它的放大倍数通过转换器的数字端口来实现,根据设定的输出幅值,单片机只需要通过公式换算出给予的对应电平。
所有要输出的参数都能通过液晶屏显示。
关键词:信号发生器;单片机;数模转换器1、引言在波形发生器的发展中,高频率的波形发生器技术大部分都掌握在外国手中,我国的波形发生器也有很大突破,在中低端频率的波形发生器中,我国的成本低,波形发生器效果好,远比国外,但是在高端波形发生器中,还是落后于国外。
波形发生器在现代测算领域和教学领域有着很大的应用,产生的频率大小,幅度大小,相位调节,能产生大量的波形,对于各种调试,调控,实验,工业使用,自动控制都有着重大的意义。
2、方案设计本此设计是用单片机为控制主体,对系统进行初始化主要完成对键盘的控制、液晶显示的控制。
使用51系列的单片机,它有着32个接口,且STC系列的单片机可以在工作的过程中进行编程、调试,能很方便的实现程序在下载过程中进行整机的调试。
3、硬件设计(1)液晶显示模块用STC12C5A60S2的P0口作为数据线,用P1.2、P1.1、P1.0分别作为LCD 的EN、R/W、RS。
其中EN是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号。
(2)键盘模块本按键模块使用的是多位独立按键,按键一端接IO口,一端接地,由于单片机的IO口都有内部上拉,因此当按键没有按下的时候,IO检测到的时候高电平,当按键按下的时候,相当于IO短接地,因此这时候单片机检测到的电平为低电平,通过检测不同时刻的IO口状态就可以判断按下的是那个按键。
4个按键分别代表以下功能,第一为功能按键,可以切换不同参数设置界面,第二个为切换按键,可以切换波形、频率和幅值等参数进行设置,第三个为增加按键,第四个为减少按键。
基于AT89C51单片机的多功能函数信号发生器设计毕业论文
·正弦波
正弦信号可用如下形式表示
f(t)=Asin(ωt+θ)(1)
其中,A为振幅,ω是角频率,θ为初相位。正弦函数为一周期信号如下图1所示:
图1 正弦波
·方波
方波函数是我们常用且所熟知的简单波形函数,做脉冲等,其表示形式如下:
(2)
方波波形如下:
图2 图形
当方波下半段幅值为0时,就为矩形波,一个原理,所以不再赘述矩形波。
(2)片内数据存储器有128B,地址空间为00H—7FH,片外没数据存储器。
(3)片内有4KB的程序存储器,地址空间为0000H—0FFFH,没有偏外存储器, 应接高电平。
(4)可以使用两个定时/计数器T0和T1,一个全双工的串行通信接口,5个中断源[1]。
·晶振电路工作原理及应用
单片机有18、19两引脚。分别为XTAL1和XTAL2。单片机采取内部振荡电路时,将这两引脚接石英晶体与微调电容。此设计采用的是12M晶振和两个30pF的电容。在芯片内部结构中,XTAL1和XTAL2引脚是一反相放大器的两个输入端,构成单片机内部振荡器。同样,根据需要的不同,也可采用外部时钟方式。本次设计采用内部时钟方式。如图所示。
It can control the type and the output frequency of the waveform when the microcontroller are equipped with the keyboard. Also when it coupled with the LED it can be displayed. It can be sure that it is digital signal that come from the microcontroller. So we should add the DAC0832 on the output side for D/A conversion. With the two levels of op-amp we can adjust waveform. Finally display on theoscilloscope.
基于51单片机的简易函数信号发生器资料
创新性实验研究报告实验项目名称_简易函数信号发生器四、实验内容1、运用keil软件对程序进行编写,运行程序,并进行程序修改。
2、运用protues软件进行硬件电路仿真设计。
3、将程序下载到仿真单片机中,并观测输出波形。
4、对程序进行修改,再次运行仿真软件,直到输出理想的波形。
5、仿照仿真软件进行硬件电路的焊接。
6、将程序下载到单片机,并用示波器测试输出波形。
7、对程序进行修改,直到输出满意的波形为止。
3、实验步骤1、首先打开keil软件.2、运用keil软件对程序进行编写,程序见附件。
3、打开protues软件.4、运用protues软件对硬件电路进行设计。
9C51单片机是该信号发生器的核心,具有2个定时器,32个并行I/O口,1个串行I/O口,5个中断源。
由于本设计功能简单,数据处理容易,数据存储空间也足够,因为我们采用了片选法选择芯片,进行芯片的选择和地址的译码。
在单片机最小最小系统中,单片机从P1口接收来自键盘的信号,并通过P0口输出控制信号,通过DA转换芯片最终由示波器显示输出波形。
单片机引脚分配如下:�XTAL1,XTAL2:外接晶振,产生时钟信号。
�RST:复位电路;�P2口:8位数字信号输出输出,外接DAC0832;�P3.6口和P3.7口:DAC0832的时钟信号;单片机模块单片机输出的是数字信号,因为要得到模拟信号的波形就必须对其进行数模转换。
我们采用了DAC0832数模转换器,该芯片具由8位输入锁存器、8位DAC寄存器、8位D/A转换器及转换控制电路四部分构成。
由于其输出为电流输出,因为外加运算放大器LM324使之转换为电压输出。
最后通过示波器显示输出的波形。
数模转换模块运放模块整体硬件电路图五、实验结果与分析1、实验现象、数据记录仿真波形2、对实验现象、数据及观察结果的分析与讨论:经过观察调试,再观察,再调试,最终输出的波形较为理想。
此次试验经过一系列的调试,最终输出的波形为正弦波、方波、三角波。
--基于51单片机的简易函数信号发生器的设计与分析
基于51单片机的简易函数信号发生器的设计与分析郭 辉(阜阳师范学院信息工程学院,安徽阜阳,236037)摘要:函数信号发生器设计与分析是单片机实践中的一重要实验。
本文采用Proteus 对函数信号发生器的原理图进行设计,并通过Keil 软件编程验证该设计的可行性,通过调节按键,该简易函数信号发生器可以正确输出正弦波、锯齿波、梯形波、矩形波,并可以通过按键对相应波形的频率进行调节,最终通过Proteus 制作出该电路的PCB 原理图。
本设计对单片机项目设计与实现具有一定的指导意义。
关键词:信号发生器;AT89C51;Proteus ;Keil ;PCB 中图分类号:TP368.1 文献标识码:BDesign and analysis of a simple function signal generator based on 51 single chip microcomputerGuo Hui(College of Information Engineering,Fuyang Teachers' College,Fuyang Anhui,236037)Abstract :This paper uses the principle of figure Proteus function signal generator is designed,and the feasibility of the design is verified by Keil software programming,by adjusting the key,the simple function signal generator can output sine wave,Ju Chibo,trapezoidal wave,rectangular wave,and can be adjusted through the key corresponding to the frequency of the waveform, eventually produced by Proteus PCB principle diagram of the circuit.Keywords :signal generator;AT89C51;Proteus;Keil;PCB 0 引言Proteus 软件为英国Labcenter electronics 公司开发的EDA 工具软件。
基于51单片机简易存储示波器的设计课件
A/D模块-转换器的主要技术指标4
(4) 实时采样
实时采样是在信号存在期间对其采样采样率必 须满足采样定理。对于正弦信号而言,每个周期内 应该超过二个采样点才能给出足够的信号细节,同 时也要考虑实际因素的影响,按照所采用的信号的 恢复方式选取相应的采样点数。实时采样中,A/D 转换器必须以高于最高采样率才能正确地工作,因 此 A/D 转换器的转换速率决定最高采样率。
A/D模块-转换器的主要技术指标5
处理过的模拟信号需要经过 A/D 转换器进行量 化编码。通常为了防止转换期间信号电压发生变化, 在进行 A/D 转换之前要加上采样保持电路。对于A/ D转换器参数的选取叶需要考虑多方面的因素,A/D 转换器的采样频率取决于待测信号的频率范围,或 者简易示波器对扫描速度的要求。而 A/D 转换器的 编码位数与垂直分辨率相关。根据两个条件选择合 适的A/D转换器芯片。
•方案二:单片机方式。
方案一:FPGA/CPLD或带有IP核的FPGA/CPLD方式
即用FPGA/CPLD完成采集,存储,显示及A/D,D/ A等功能,由IP核实现人机交互及信号测量分析等功 能。其优点在于系统结构紧凑,可以实现复杂测量 与控制,操作方便;缺点是此方案由纯硬件实现, 设计复杂,系统庞大,调试过程繁琐。
•80C51的微处理器 •80C51的片内存储器 •80C51的I/O口及功能单元 •80C51的特殊功能寄存器(SFR)
80C51的内部结构-微处理器
80C51单片机的微处理器是一个8位的高性能中 央处理器(CPU).它主要由运算器和控制器两部分 构成。它的作用是读入并分析每条指令,根据各指 令的功能控制单片机的各功能部件执行指定的运算 或操作。
毕业设计--基于AT89S51单片机的数字信号发生器
基于AT89S51单片机的数字信号发生器【摘要】智能仪器的出现,极大地扩充了传统仪器的应用范围。
智能仪器凭借其体积小、功能强、功耗低等优势,迅速地在家用电器、科研单位和工业企业中得到了广泛的应用。
本系统是基于AT89S51单片机设计的数字式波形发生器。
采用AT89S51作为系统的控制核心,外围电路采用数字/模拟转换电路(DAC0832),运放电路(MC1458),按键,ISP接口等。
通过按键控制切换产生正弦波,锯齿波,三角波,方波,各类型信号的频率统一为100HZ,而幅值在-5V~+5V范围内可调。
本设计电路原理简单,性能较好,具有一定的实用性和参考价值。
【关键词】单片机 ,波形发生器,D/A电路DIGITAL SIGNAL GENERATOR DESIGN BASED ON AT89S51【ABSTRACT】The emergence of intelligent machines, which greatly expanded the scope of application of traditional instruments. Intelligent instrument, with its small size, powerful, low-power advantages of home appliances quickly, research institutes and industrial enterprises has been widely used.The system is a digital waveform generator based on single chip computer. AT89S51 is used as a control core. The system is composed by digital/analog conversion (DAC0832),imply circuit (MC1458),button ISP inferface and LED lights. It can generate square triangle and sine wave,with LED display .The frequency of various types of signal unity of 100HZ, but the amplitude in the-5V ~ +5 V range adjustable. The circuit design is simple, better performance, has some practical and reference value.【KEY WORDS】the single chip computer , the signal generator , D/A conversion目录绪论 (9)1. 波形发生器现状 (9)2. 单片机在波形发生器中的运用 (9)第一章系统设计 (10)1. 系统要求 (11)2. 系统方案选择与论证 (11)3. 系统设计原理与思路 (11)第二章硬件电路的设计 (12)1. AT89S51的介绍 (12)2. 资源分配 (15)3. 最小单片机系统的设计 (15)4. 各模块电路的设计 (17)5. ISP接口 (23)第三章软件设计 (24)1. 主程序的设计 (25)2. 锯齿波程序的设计 (25)3. 三角波程序的设计 (26)4. 正弦波程序的设计 (27)5. 方波程序的设计 (28)第四章测试仿真 (29)1. 软件仿真 (29)2. 仿真结论分析 (30)3. 硬件测试结论分析 (31)绪论1.波形发生器现状波形发生器作为一种常用的应用电子仪器设备,传统的波形发生器可以完全用硬件电路搭建,如应用555振荡电路可以产生正弦波,三角波,方波等波形,传统的波形发生器多采用这种方式设计,这种方式不应用单片机,但是这种方式存在波形质量差,控制难,可调范围小,电路复杂和体积大等缺点,在科学研究和生产实践中,如工业过程控制,生物医学,地震模拟震动等领域往往需要低频信号源,而由硬件搭建的波形发生器效果往往达不到好的效果,而且低频信号源所需要的RC很大,大电阻,大电容在制作上有困难,参数的精度也难以保证,而且体积大,漏电,体积大是该类波形发生器的显著缺点。
51单片机示波器方案
51单片机示波器方案引言示波器是一种广泛应用于电子工程领域的测量仪器,用于显示电压随时间的变化情况。
其主要功能是将电压信号转换为图形显示,帮助工程师进行信号分析和故障排除。
本文讨论基于51单片机的示波器方案,介绍其工作原理、硬件组成和软件实现。
工作原理示波器通过逐点采样并记录电压信号的值,然后将这些点连接起来绘制成波形图。
要实现这个过程,需要以下几个步骤:1.采样:示波器需要以一定的频率对电压信号进行采样。
这可以通过51单片机的ADC(模数转换器)模块实现。
通常,快速采样会增加细节,但也会增加数据处理的复杂性。
2.数字化:采样得到的模拟电压值需要转换为数字值,以便存储和处理。
51单片机内部的ADC模块负责将模拟电压转换为数字值,并提供给微处理器使用。
3.存储:示波器需要一个存储器来缓存采样数据。
51单片机通常具有一些RAM用于数据存储。
如果需要长时间记录大量数据,可以使用外部存储器,如EEPROM或SD卡。
4.显示:通过显示模块将数字波形数据转换为可视化图形。
这可以通过将示波器连接到计算机显示器或LCD屏幕来实现。
5.控制:通过用户界面控制示波器的操作,例如选择采样率、触发电平和时间范围等。
这可以通过使用按钮、旋钮或键盘来实现。
硬件设计1. 51单片机51单片机是一种经典的、广泛应用于嵌入式系统开发的微控制器。
它包括一个微处理器核心、存储器、输入输出口和时钟电路。
2. ADC模块ADC模块用于将模拟电压转换为数字值。
51单片机通常具有一个或多个ADC通道,可以选择合适的通道进行采样。
3. 存储器示波器需要一个存储器来缓存采样数据。
51单片机通常具有一定量的内部RAM用于数据存储。
如果需要更大的存储空间,可以考虑使用外部存储器,如EEPROM或SD卡。
4. 显示模块显示模块将数字波形数据转换为可视化图形。
可以使用计算机显示器或LCD屏幕来显示波形。
5. 用户界面用户界面用于控制示波器的操作,包括选择采样率、触发电平和时间范围等。
基于单片机的函数信号发生器的设计与实现
基于单片机的函数信号发生器的设计与实现首先,我们需要确定信号发生器的基本功能和要支持的信号类型。
常见的信号类型包括正弦波、方波、三角波和锯齿波等。
我们可以设计一个菜单界面,通过按键或旋钮选择需要生成的信号类型。
选择信号类型后,用户可以调节频率、幅度和相位等参数,生成相应的信号。
接下来,我们需要设计硬件电路。
基于单片机的函数信号发生器需要一个DA转换芯片来实现数字信号到模拟信号的转换。
我们可以选择常用的模数转换芯片,比如R-2R电阻网络型DA转换芯片。
通过电阻网络的调节,我们可以将单片机输出的数字信号转换为对应的模拟信号。
另外,我们还需要考虑信号的放大和滤波问题。
常见的做法是使用运放作为信号的放大器,通过运放的增益调节,我们可以将信号放大到合适的幅度。
同时,我们还需要滤波电路来去除高频噪声和谐波,以保证输出信号的质量。
在硬件设计完成后,我们需要进行软件编程。
我们可以选择一种合适的单片机,根据其开发环境和编程语言进行开发。
常见的单片机包括51单片机、AVR单片机和STM32等。
我们可以使用C语言或汇编语言编写程序,通过定时器和IO口控制输出信号的频率和幅度。
在软件编程中,我们需要实现信号类型的选择、频率、幅度和相位的调节,以及信号输出的控制。
可以根据用户的选择,生成对应的数字信号,并通过DA转换芯片转换成模拟信号。
同时,我们还可以在程序中添加一些附加功能,比如保存设置、显示当前参数等。
最后,我们需要进行整体调试和测试。
我们可以通过示波器来观察输出信号的波形和频谱,以验证信号发生器的功能和性能。
如果有问题,我们可以通过调整电路和程序进行调试和优化。
总之,基于单片机的函数信号发生器的设计与实现是一个相对复杂和庞大的项目。
它需要我们对单片机的原理和编程有一定了解,同时还需要具备一定的电路设计和调试能力。
但是,通过这个项目的实践,我们可以提高我们的技术能力和创新能力,在电子领域中取得更多的成就。
函数信号发生器设计方案
2、 方案二
由8M晶振产生的信号,经8253分频后,产生100Hz的方波信号。由锁相环CD4046和8253进 行N分频,输出信号送入正弦波产生电路和三角波产生电路,其中正弦波采用
查表方式产 生。计数器的输出作为地址信号,并将存储器2817的波形数据读出,送DAC0832进行D/A 转换,输出各种电压波形,并经过组合,可以得到各种波形。输出信号
7. 能够显示频率和电压
根据题目的要求,我们一共提出了三种设计方案,分别介绍如下: 1、 方案一
采用低温漂、低失真、高线性单片压控函数发生器ICL8038,产生频率受控可变的正弦
波 ,可实现数控频率调整。通过D/A和5G353进行输出信号幅度的控制。输出信号的频
率、 幅度参数由4x4位键盘输入,结果输出采用6位LED显示,用户设置信息的存储由
计具有线路简单、结构紧凑、价格低廉、性能优越等优点。
关键词:信号发生器;单片机;波形调整
Function Generator
Abstract: The design is composed of single-chip AT89C52 generator can produ
ce the triangular wave, square wntrol can be
5、方案一和方案二的频率变换时间主要是它的反馈环处理时间和压控振荡器的响应时间 ,通常大于1ms。而方案三的频率变换时间主要是数字处理延迟,通常为几十个ns。
从以上的方案比较可以看出,方案三结构比较复杂,但具有输出频率稳定性高、频率输 出线性度好、频率分辨率高、波形准确、频率变换时间小、相位噪声小、人机界面友好 ,易于控制等优点,性能优良。是本次设计的理想设计方案。
过一个模拟滤波器后,得到最终的模拟信号波形。通过高速D/A产生数字正弦数字波形和三角数字波形,数字正弦波通过带通滤波器后得到一个对应的模拟正弦波信号,最后该模拟
基于单片机的函数信号发生器毕业设计完整版
基于单片机的函数信号发生器毕业设计完整版本毕业设计旨在设计一个基于单片机的函数信号发生器,以满足工程实践需求。
设计的信号发生器将具有以下特点:能够输出多种波形、具备可调频率和幅度的功能、具备稳定性和高精度等。
首先,信号发生器的硬件设计包括信号源、滤波电路、放大电路和输出电路。
信号源负责产生基本的信号波形,可以通过设置单片机的IO口电平高低来控制信号的波形。
滤波电路和放大电路主要负责对信号进行滤波和放大处理,以确保输出的波形质量和幅度稳定性。
输出电路则是将放大后的信号输出到外部设备上。
其次,信号发生器的软件设计主要是通过编程控制单片机的IO口来实现波形的生成和调节。
编程方面,可以使用C语言或者汇编语言来编写程序,实现波形的输出、频率和幅度的调节等功能。
在程序的运行过程中,需要通过控制IO口电平的高低来控制信号的形状。
同时,可以使用按键或旋钮等外部输入设备来实现对频率和幅度的调节,以满足用户的实际需求。
最后,在设计的过程中需要注意信号发生器的稳定性和精度。
稳定性主要包括信号的频率稳定性和幅度稳定性。
频率稳定性可以通过使用高精度的时钟源和精确的频率分频电路来实现。
幅度稳定性可以通过使用高精度的放大电路和自动增益控制电路来实现。
精度方面,则可以通过使用高精度的模拟数字转换芯片和时钟源来实现。
总的来说,基于单片机的函数信号发生器在工程实践中具有重要意义。
本设计旨在结合硬件和软件技术,实现一个功能完善、稳定性好、精度高的信号发生器。
通过合理的设计和优化,该信号发生器能够满足工程实践的需求,为相关领域的研究提供信号源支持。
基于单片机DA转换设计函数信号发生器
电路综合实习报告课程题目:基于单片机D/A转换设计函数信号发生器摘要:以51单片机为核心设计函数信号发生器,采用程序设计方法产生正弦波,方波,三角波,方波,锯齿波,波形的频率在一定频率范围内可任意改变。
通过键盘来控制四种波形的类型选择与频率变化,并通过液晶屏1602显示其各自的类型及数值。
主要包括信号发生部分、D/A转换部分以及液晶显示部分。
关键词:D/A转换,液晶显示主要内容:1.实习原理2.实习内容1)系统设计●设计要求●方案设计(各模块设计)●软件设计流程2)通过示波器对波形种类及频率进行测试●测试说明●测试过程●测试结果3.实习的心得体会4.附录:源程序1.实习原理:●系统总体框图●主控芯片AT89S52●DAC0832的内部结构:D/A转换原理图DAC0832是双列直插式8位D/A转换器。
能完成数字量输入到模拟量(电流) 输出的转换。
其主要参数如下:分辨率为8位,转换时间为1μs,满量程误差为±1LSB,参考电压为-10V~+10V,供电电源为+5V~+15V,逻辑电平输入与TTL兼容。
DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号 /XFER。
●液晶屏的显示●矩阵键盘2.实习内容:1)系统设计利用AT89S52单片机采用程序设计方法产生锯齿波、正弦波、方波、三角波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
●设计要求1)基于单片机的D/A转换用软件编程产生四种波形,分别为:锯齿波,正弦波,方波,三角波;2)通过键盘选择四种波形类型;3)波形频率可调;●方案设计论证显示方案论证:方案一:采用LED数码管。
LED数码管由8个发光二极管组成,每只数码管轮流显示各自的字符。
(完整版),基于51单片机的波形发生器的设计汇总,推荐文档
系统主要部分设计框图如下图所示:
图 2:框图设计
以 AT89C51 单片机作为系统的控制核心,其中 P0 口接 DAC0832 作为信号输入同时 进行数模转换,P1 口用来接键盘,P2 口接 LED 显示器,由程序来控制 P0 口产生的波形, 再由按键和按键次数控制波形的种类、频率和幅值的大小,并且能够通过按键来控制波 形频率值和幅度值。由运算放大器 DAC0832 来实现输出电流到电压的转换,即实现数字 信号到模拟信号的转换。另外在 LED 上显示实时的频率值和幅度值,产生的波形在示波 器显示。并且通过按键来决定波形数据的存储方式,在按键按下后,就把当时的波形所 对应的幅度值、频率值等参数存储下来。
使用 DDS 和一些专用的波形产生芯片。并让系统的频率范围在 1Hz~1MHZ 可调节,在 频率范围在 1HZ~10KHz 时,步进小于或等于 10Hz,在频率范围在 10KHz~1MHz 时, 步进小于或等于 100Hz,并且电压在 0~5V 范围,能够实时的显示波形的类型、频率和 幅值。 2.1 方案的设计思路
目录
1 引言 ......................................................................1 1.1 题目要求及分析 ..........................................................1 1.1.1 示意图 ................................................................1 1.2 设计要求 ................................................................1 2 波形发生器系统设计方案 ....................................................2 2.1 方案的设计思路 ..........................................................2 2.2 设计框图及系统介绍 ......................................................2 2.3 选择合适的设计方案 ......................................................2 3 主要硬件电路及器件介绍 ....................................................4 3.1 80C51 单片机 .............................................................4 3.2 DAC0832 .................................................................5 3.3 数码显示管 ..............................................................6 4 系统的硬件设计 ............................................................8 4.1 硬件原理框图 ............................................................8 4.2 89C51 系统设计 ...........................................................8 4.3 时钟电路 ................................................................9 4.4 复位电路 ................................................................9 4.5 键盘接口电路 ...........................................................10 4.7 数模转换器 .............................................................11 5 系统软件设计 .............................................................12 5.1 流程图: ...............................................................12 5.2 产生波形图 .............................................................12 5.2.1 正弦波 ...............................................................12 5.2.2 三角波 ...............................................................13 5.2.3 方波 .................................................................14 6 结论 .....................................................................16 主要参考文献 ...............................................................17 致谢 .......................................................................18
基于单片机的函数信号发生器设计
基于单片机的函数信号发生器设计引言函数信号发生器是一种能够产生各种类型的电信号的仪器。
在电子学、通信工程等领域,函数信号发生器被广泛应用于信号测试、频率测量、波形生成等实验和工程应用中。
本文将介绍一种基于单片机的函数信号发生器设计方案。
一、设计目标本设计的目标是实现一个功能齐全、稳定可靠的函数信号发生器。
主要功能包括产生常见的波形,如正弦波、方波、三角波等;能够调节频率和幅度,以满足不同的实验需求;具备稳定性好、误差小等特点。
二、硬件设计1.单片机选择单片机作为该设计的核心,需要选择性能稳定、功能强大的型号。
常用的单片机型号有AT89C51、ATmega328P等。
选择单片机时,需要考虑到其定时器、ADC等外设功能是否满足要求,以及是否能够方便地编程和调试。
2.信号输出电路设计信号输出电路是函数信号发生器的重要组成部分。
一种常见的设计方案是使用DAC芯片将数字信号转换为模拟信号输出。
选择合适的DAC芯片时,需要考虑其分辨率、采样率、失真度等参数,以及是否支持SPI或I2C等通信接口。
除此之外,还需要考虑输出电路的放大和滤波设计,以确保信号质量。
3.控制电路设计函数信号发生器需要能够通过按键或旋钮控制参数,如频率、幅度等。
因此,设计中需要考虑如何选择合适的控制器件,如按钮开关、数码旋钮或触摸屏等,并设计相应的电路以实现参数调节功能。
4.电源设计函数信号发生器需要一个稳定可靠的电源供电。
一种常见的选择是使用交流电源适配器提供稳定的直流电源。
此外,还需要考虑到功耗问题,选择适当的电源容量以满足整个系统的工作需求。
三、软件设计1.程序框架设计函数信号发生器的软件设计需要考虑到以下几个方面:初始化、参数设置、波形生成和输出等。
程序的框架设计可以遵循一般的流程,如初始化硬件、获取用户输入、生成波形、输出信号等。
2.参数设置功能函数信号发生器需要具备参数设置功能,用户可以通过按键或旋钮调节频率、幅度等参数。
因此,在软件设计中需要考虑到相应的数值输入和显示界面设计。
基于51单片机波形发生器课程设计
基于51单片机波形发生器课程设计1. 引言波形发生器是电子技术领域中常用的仪器设备,用于产生各种不同形状的电信号波形。
在电子电路实验和测试中,波形发生器能够提供不同频率、幅度和相位的信号,用于测试和验证电路的性能。
本篇文章将介绍一个基于51单片机的波形发生器设计。
通过使用51单片机,我们可以实现一个简单但功能强大的波形发生器,并通过编程控制实现不同类型的波形输出。
2. 硬件设计2.1 51单片机51单片机是一种常见的8位微控制器,具有低功耗、高性能和广泛应用等特点。
在本设计中,我们选择使用51单片机作为主控芯片。
2.2 数模转换芯片为了将数字信号转换为模拟信号输出,我们需要使用一个数模转换芯片。
在本设计中,我们选择使用DAC0800芯片作为数模转换器。
2.3 操作面板为了方便用户操作和设置参数,我们设计了一个操作面板。
该面板包括按键、旋钮和显示屏等组件,用户可以通过操作面板来控制波形发生器的参数和功能。
2.4 输出接口为了将模拟信号输出到外部设备,我们设计了一个输出接口。
该接口可以连接到示波器或其他测试仪器,以便观察和测量输出信号。
3. 软件设计3.1 程序框架波形发生器的软件设计主要包括初始化设置、参数调整和波形生成等功能。
我们可以使用C语言编程,在51单片机上实现这些功能。
以下是程序框架的伪代码:void main(){初始化设置();while(1){获取用户输入();参数调整();波形生成();}}3.2 初始化设置在初始化设置阶段,我们需要对51单片机和数模转换芯片进行初始化配置。
这包括设置时钟频率、IO口方向、数模转换精度等。
以下是初始化设置的伪代码:void 初始化设置(){设置时钟频率();配置IO口方向();配置数模转换精度();}3.3 参数调整在参数调整阶段,用户可以通过操作面板来调整波形发生器的参数。
这包括选择波形类型、设定频率和幅度等。
以下是参数调整的伪代码:void 参数调整(){获取用户输入();if(用户选择了波形类型){设置波形类型();}if(用户设定了频率){设置频率();}if(用户设定了幅度){设置幅度();}3.4 波形生成在波形生成阶段,根据用户设定的参数,我们可以通过数模转换芯片来生成相应的波形信号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《智能仪器仪表设计基础》课程设计报告单位:自动化学院学生姓名:汪连升专业:测控技术与仪器班级:0821001学号:2010212950指导老师:耿道渠成绩:设计时间:2013 年5月重庆邮电大学自动化学院制一、题目:基于单片机的多波形信号发生器设计二、指导教师:耿道渠三、设计要求:设计一个信号发生器,实现如下功能:(1)可产生正弦波、方波、三角波、脉冲等波形;(2)通过按钮或键盘选定输出波形;(3)波形频率可设定;(4)波形可通过液晶屏显示。
四、给定条件:1、8051单片机最小系统;2、ADC,DAC器件;五、设计:1、方案论证,并确定设计方案2、给出信号发生器的整体设计框图3、硬件电路设计4、软件设计(画出程序流程图,并给出相应模块程序代码)5、完成设计报告六、具体设计过程及实验结果:七、设计的心得体会:八、附件:(可选)完成心率波、指数上升和指数下降波形;九、参考书目:给出主要参考书目(如:《单片机原理与应用》、《电子测量技术》、《单片机C语言程序设计》等),包括作者,书目名称,出版社等。
基于51单片机的波形发生器引言波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。
函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。
本系统通过对51单片机的控制,用DA-AD等模块实现了正弦波、方波、三角波和锯齿波的产生,同时可以通过按键实现波形的选择和波形频率的改变。
在实现波形的发生的同时又实现了波形图线的显示,通过NoKia5110对AD实时采集数据的显示、波形类型和波形频率的显示。
摘要:本系统采用单片C8052为控制核心,通过其端口实现数字量的输出,然后由DAC0832把数字量转换成模拟量;但是DAC芯片输出的是电流信号,本系统用LM324运放把电流信号转换为电压信号。
然后利用LM358搭建一个同相比例放大器,将转换后的电压信号按可调比例放大一定倍数。
波形显示利用NoKia5110液晶屏,显示其波形、频率和实时的图像。
显示其图像的时候我们利用ADC0804模数转换芯片将产生的模拟信号转换为数字信号,把AD实时读取到的值等比例显示到液晶屏上。
本系统通过按键实现波形的选择以及波形频率的改变。
关键字:STC89C52 DAC0832 Nokia5110 ADC0804 LM324 独立按键一、设计题目分析(一)设计任务:设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和由用户编辑的特定形状波形。
图1(二)设计功能:1、实现正弦波、三角波、方波、锯齿波的产生;2、实现波形的频率可调;3、实现波形类型、频率的显示;4、实现波形实时图像的显示。
(三)设计方案:方案一:通过软件控制51单片机实现波形的数字输出,然后通过DA实现波形的数模转换,最后通过Nokia5110实现显示。
方案二:通过硬件搭建积分电路实现方波、正弦波、三角波、锯齿波的产生,通过控制源信号的频率改变实现波形频率的改变。
方案三:通过FPGA编程实现波形的产生于频率的改变,通过软件控制FPGA 逻辑整列完成。
(四)方案分析:方案一硬件设计简单,主要通过软件来控制;方案二硬件设计复杂,不便于控制,对输出波形的频率控制也存在很大的误差。
方案三虽然控制实现容易,但是很少人接触过这个FPGA,所以学习起来相对困难。
因此我们这里选择方案一。
二、总体系统方案设计题目要求实现的任务是设计并制作一个函数信号发生器,能够产生正弦波、方波、三角波,要求必须用51单片机和AD-DA芯片,频率可调(范围不定),能够实时的显示波形的类型及其频率,同时实现波形的实时数据图像显示。
现在对方案一进论证和验证。
(一)总体设计思路根据题目的要求,经过仔细的考虑各种要素,制定了整体方案:以STC89C51单片机为控制核心,P0口接DAC0832信号输入并进行数模转换,P2口接矩阵键盘,P1口接液晶显示器Nokia5110,由程序控制P0口产生波形(分别是正弦波、方波、三角波),再由按键控制产生波形的种类及频率在一定范围内可调。
由运放LM324实现DAC0832输出电流到电压的转换,即实现数字信号到模拟信号的转换,同时由LM358搭建的同相放大器将电压波形放大。
在Nokia5110上实时的显示波形的频率,同时我们通过ADC0804读取放大器出来的电压信号,把对应的电压信号对应比例显示到液晶屏上,绘制出波形。
我们通过按键确定,一旦按键按下后,就把当时的波形对应的参数改变显示。
图2系统总体框图(二)单元设计电路1、电源模块:电源通过充电电池提供7.2V电源,然后经过一个470uf的大电容滤波,滤波出来后经过一个5V稳压芯片,稳压源的输出与输入都接一个10uf和一个100nf 电容滤波,减小电源纹波等。
稳压出来的5V电压经过开关,开关后接一个指示灯LED,用于显示电源接通。
5V电源给芯片,等器件供电。
5V后面通过一个3.3V稳压芯片,同样稳压源的输出与输入都接一个10uf 和一个100nf电容滤波,这样出来的3.3V电容给Nokia5110提供电源。
图 3 电源模块2、串口通信模块:串口通信模块通过一个DB9接口与电脑相连接,通过一个MAX232芯片和单片机的P31、P30端口相连接,该电路主要用于单片机的程序下载,与单片与电脑的通信,方便调试。
图4串口通信3、DAC0832数模转换电路:DAC0832的WR1、WR2、XFER接地,TLE和VREF接高电平,其CS片选端接单片机的P23口。
其数据段接锁存器的输出端。
图 5 DAC08324、ADC0804模数转换电路:ADC0804数模转化的CS、RD、WR、INTR分别接单片机的P24、P25、P26、P32;其数据段接单片机的P0口,用于读取模数转换结果。
图 6 ADC08045、Nokia5110液晶显示电路:5110有RST、CS、DC、DIN、CLK五个控制口分别接单片机的P12、P13、P14、P15、P16。
电源连接3.3V电源7LED背光口接一个滑动变阻器用一个调节5110的背光。
图7 Nokia5110液晶6、放大设计电路:一级运算放大器主要用与把电流转换为电压信号,二级运算放大为同相放大器用于把电压信号放大。
图8 运放电路7、整体电路设计:将以上电路图组建起来,就得到总电路图,如图9所示图9 整体设计电路(三)软件设计1、主程序流程图图10 主程序流程图2、中断程序选读取AD然后向DAC端口赋值模数转换,不同的定时周期实现不同的频率波形输出。
3、正弦波的产生过程通过手动的方法计算出输出各点的电压值,形成数组sintab[100],反复顺序输出这组数据到DAC0832,就在系统输出端得到正弦波。
4、方波的产生过程按照设定的周期值改变输出的电压(分别向DAC0832输0x00或0xff)。
5、锯齿波的产生过程将一个周期(360度)分为128个点递增,当128个点输出后再从0开始输出数据到DAC0832,就在系统输出端得到锯齿波。
6、三角波的产生过程将三角波的一个周期(360度)分为256个点,相邻点等差,前128个点递增,后128个点递减,分别把数据到DAC0832,就在系统输出端得到三角波。
7、程序代码#include<reg52.h>#include<math.h>#include <intrins.h>#include "LCD5510_V1.H"#define PI 3.14sbit LOCK = P3^7; //锁存功能sbit Wave =P2^0;sbit up =P2^1;sbit down =P2^2;sbit DAC_cs=P2^3;sbit AD_CS=P2^4;sbit AD_RD=P2^5;sbit AD_WR=P2^6;sbit AD_INT=P1^0;unsigned int temp=0;char flag_display;int i=0;unsigned int AD_data=0;void DrawPoint(int x,int y);char flag;unsigned char code SIN[100]={127,135,143,151,159,166,174,181,188,195,202,208,214,220,225,230,234,238,24 2,245,248,250,251,252,253,254,253,252,251,250,248,245,242,238,234,230,225,220,214,208,202,195,188,18 1,174,166,159,151,143,135,127,119,111,103,95,88,80,73,66,59,52,46,40,34,29,24,20,16,12,9,6,4,3,2,1,0,1,2,3,4,6,9,12,16,20,24,29,34,40,46,52,59,66,73,80,88,95,103,111,119};int Set_Hz; //频率void zhengxian();void sanjiao();void juchi();void fangbo();void scan();void LCD_clr_row(unsigned char num);/***************************************************************** **** 名称: Time0_Init()* 功能: 定时器的初始化,11.0592MZ晶振,50ms* 输入: 无* 输出: 无***************************************************************** ******/void Time0_Init(){TMOD = 0x01;TH0 =(65536-Set_Hz)/256;TL0 =(65536-Set_Hz)%256;IE = 0x82;TR0 = 1;}void AD_start(){AD_CS=0;//允许AD转换AD_WR=0;_nop_();AD_WR=1;//AD开始转换while(AD_INT);//等待转换结束AD_CS=1;//禁止转换}void AD_read(){AD_CS=0;//允许读取AD_RD=0;//读取转换结果_nop_();AD_data=P0;AD_RD=1;AD_CS=1; //停止AD读取}/*****主函数****************************************************************************/void main(void){unsigned char j=0;unsigned int y=0;int temp[4]={0,0,0,0};Set_Hz=1000;flag=1;DAC_cs=0;flag_display=1;LCD5510_Init();Time0_Init();while(1){i++;scan();temp[3]=temp[2];temp[2]=temp[1];temp[1]=temp[0];temp[0]=AD_data;y=temp[4];if(flag!=4){if(y<temp[3]) y=temp[3];if(y<temp[2]) y=temp[2];if(y<temp[1]) y=temp[1];if(y<temp[0]) y=temp[0];}else y=AD_data;y=(y<<5)>>8;DrawPoint(i,y);}}/***************************************************************** **** 名称: Time0_Int()* 功能: 定时器中断,中断中实现Count 加一* 输入: 无* 输出: 无***************************************************************** ******/void Time0_Int() interrupt 1{TH0 =(65536-Set_Hz)/256;TL0 =(65536-Set_Hz)%256;TR0 = 0;AD_start();AD_read();switch(flag){case 1: zhengxian(); break;case 2: sanjiao(); break;case 3: juchi(); break;case 4: fangbo(); break;default : break;}if(flag_display==1){flag_display=0;switch(flag){case 1: LCD_clr_row(0); LCD_clr_row(1); LCD_prints(0, 0, "ZX F");if(Set_Hz==1000) LCD_prints(5, 0, "10HZ");if(Set_Hz==1050) LCD_prints(5, 0, "9.5HZ");if(Set_Hz==1100) LCD_prints(5, 0, "9HZ");if(Set_Hz==1150) LCD_prints(5, 0, "8.6HZ");if(Set_Hz==1200) LCD_prints(5, 0, "8.3HZ");if(Set_Hz==1250) LCD_prints(5, 0, "8HZ");if(Set_Hz==1300) LCD_prints(5, 0, "7.8HZ"); break;case 2:LCD_clr_row(0);LCD_clr_row(1); LCD_prints(0, 0, "SJ F");if(Set_Hz==1000) LCD_prints(5, 0, "7.8HZ");if(Set_Hz==1050) LCD_prints(5, 0, "7.4HZ");if(Set_Hz==1100) LCD_prints(5, 0, "7.1HZ");if(Set_Hz==1150) LCD_prints(5, 0, "6.8HZ");if(Set_Hz==1200) LCD_prints(5, 0, "6.5HZ");if(Set_Hz==1250) LCD_prints(5, 0, "6.2HZ");if(Set_Hz==1300) LCD_prints(5, 0, "6HZ");break;case 3:LCD_clr_row(0); LCD_clr_row(1); LCD_prints(0, 0, "JC F");if(Set_Hz==1000) LCD_prints(5, 0, "3.9HZ");if(Set_Hz==1050) LCD_prints(5, 0, "3.7HZ");if(Set_Hz==1100) LCD_prints(5, 0, "3.5HZ");if(Set_Hz==1150) LCD_prints(5, 0, "3.4HZ");if(Set_Hz==1200) LCD_prints(5, 0, "3.2HZ");if(Set_Hz==1250) LCD_prints(5, 0, "3.1HZ");if(Set_Hz==1300) LCD_prints(5, 0, "3HZ");break;case 4:LCD_clr_row(0); LCD_clr_row(1); LCD_prints(0, 0, "FB F");if(Set_Hz==1000) LCD_prints(5, 0, "7.8HZ");if(Set_Hz==1050) LCD_prints(5, 0, "7.4HZ");if(Set_Hz==1100) LCD_prints(5, 0, "7.1HZ");if(Set_Hz==1150) LCD_prints(5, 0, "6.8HZ");if(Set_Hz==1200) LCD_prints(5, 0, "6.5HZ");if(Set_Hz==1250) LCD_prints(5, 0, "6.2HZ");if(Set_Hz==1300) LCD_prints(5, 0, "6HZ");break;default : break;}}if(i>83){i=0;LCD_clr_row(2); LCD_clr_row(3);LCD_clr_row(4); LCD_clr_row(5);}TR0 = 1;}///Y的0-31各点用来显示波形32-47用来显示文字/** 函数:DrawPoint* 功能:在(x,y)坐标上绘制点,屏幕左下角坐标为(0,0)* 输入参数:x:横坐标值,Range:0-83* y:纵坐标值,Range:0-47* 返回参数:当超过规定范围,默认为0*/void DrawPoint(int x,int y){int YIndex = 0;int bitIndex = 0;if(x>83)x=0;if(y>47)y=0;y = 47-y; //坐标变换YIndex = y/8;bitIndex = y%8;LCD_pos_byte(x,YIndex);LCD_write_dat(0x00|(1<<(bitIndex))&0xff);}/******正弦波函数*****/void zhengxian(){static int i=0;LOCK=1;P0= SIN[i]*0.5;LOCK=0;if(i<100)i++;else i=0;}/*******三角波*********/ void sanjiao(){static int m=0,n=0;LOCK=1;P0=2*m;LOCK =0;if(n<=m&&m<=64){n=m;m++;}else if(m>0){n=m;m--;}else{n=m=0;}}/****锯齿波函数******/ void juchi(){static int m=0;LOCK=1;P0=2*m;LOCK=0;if(m<64){m=m+1;}else{ m=0;}}/******方波函数*******/void fangbo(){static int m=0,n=0;if(n<=m&&m<64){n=m;LOCK=1;P0=0xf0;LOCK=0;m++;}else if(m>=0){n=m;LOCK=1;P0=0x00;LOCK=0;m--;}else m=n=0;}/*****键盘扫描函数*********/ void scan(){if(Wave==0) //波形选择{while(!Wave);if(flag==4){flag=1;}else flag++;flag_display=1;}if(up==0) //频率增加{while(!up);Set_Hz=Set_Hz+50;if(Set_Hz>1300){Set_Hz=1000;}flag_display=1;}if(down==0) //频率减少{while(!down);Set_Hz=Set_Hz-50;if(Set_Hz<1000){Set_Hz=1300;}flag_display=1;}}(四)硬件实物和测试结果图1、实物电路和正弦波形显示:(五)总结本次的设计中利用STC89C51、DAC0832和ADC0804以及放大器完成电路的设计,用开关来控制各种波形的转换和波形频率,用单片机输出后,经过数模转换器生成波形,最终可以通过示波器观察。