基于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单片机延时函数

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,并设置定时器中断。
在中断服务程序中,我们进行相应的操作来实现精确的延时。
这种方法需要使用到单片机的定时器中断功能,相对复杂一些,但是可以实现精确的延时。
基于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 单片机控制部分以及按键和MS12864R 显示部分
组成。
1 简易数字示波器的工作原理以及总体框架
本设计硬件电路部分由单片机控制系统电路,前向输入调理电路,模数转换
和存储电路,以及按键显示电路组成。
其工作的基本思路就是以单片机为控制核心,让AD 芯片完成数据的离散化,采集数据经过缓冲暂存于存储器里面,
当波形显示时,单片机从存储器的读使能端读取采集数据存于数组中,然后进行相应的数据处理并把所存取得数据按一定的顺序打在液晶显示器相应的位置上,从而再现波形信号;其中输入调理电路由阻抗变换电路,信号抬升电路以及频率测量电路构成,阻抗变换电路是为了提高输入阻抗,信号抬升是为了使信号的幅度满足AD 芯片的输入幅度要求,频率测量电路主要是测量周期性信号
的频率。
总体设计框图如图1 所示。
2 硬件设计
2.1 前端信号的处理
本模块具有两大功能,一是输入信号位置的变换;二是信号波形的变换。
信号位置的变换主要由阻抗变换电路,信号抬升电路构成,阻抗变换采用
ua741 构建的阻随放大电路,信号抬升电路采用ua741 构成的加法电路,信号
位置的处理主要是对被测输入信号在幅度与偏移方面进行线性处理,使信号在。
- 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以及放大器完成电路的设计,用开关来控制各种波形的转换和波形频率,用单片机输出后,经过数模转换器生成波形,最终可以通过示波器观察。