基于51单片机的方波,三角波,矩形波的低频信号发生器

合集下载

89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角波等信号波形

89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角波等信号波形

波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。

本次课程设计使用的AT89S51 单片机构成的发生器可产生锯齿波、三角波、正弦波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑等优点。

在本设计的基础上,加上按钮控制和LED显示器,则可通过按钮设定所需要的波形频率,并在LED上显示频率、幅值电压,波形可用示波器显示。

二、系统设计波形发生器原理方框图如下所示。

波形的产生是通过AT89S51 执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。

在AT89S51的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,另有3个P2口管脚接TEC6122芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。

此方案的有点是电路原理比较简单,实现起来比较容易。

缺点是,采样频率由单片机内部产生故使整个系统的频率降低。

1、波形发生器技术指标1)波形:方波、正弦波、锯齿波;2)幅值电压:1V、2V、3V、4V、5V;3)频率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;2、操作设计1)上电后,系统初始化,数码显示6个…-‟,等待输入设置命令。

2)按钮分别控制“幅值”、“频率”、“方波”、“正弦波”、“锯齿波”。

3)“幅值“键初始值是1V,随后再次按下依次增长1V,到达5V后在按就回到1V。

4)“频率“键初始值是10HZ,随后在按下依次为20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循环。

三、硬件设计本系统由单片机、显示接口电路,波形转换(D/A)电路和电源等四部分构成。

电路图2附在后1、单片机电路功能:形成扫描码,键值识别、键处理、参数设置;形成显示段码;产生定时中断;形成波形的数字编码,并输出到D/A接口电路和显示驱动电路。

基于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单片机信号发生器的设计

专业方向课程设计报告设计课题:信号发生器的设计设计时间:2012年06月6日信号发生器的设计摘要:本文以STC89C51单片机为核心设计了一个低频函数信号发生器。

信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。

波形和频率的改变通过软件控制,幅度的改变通过硬件实现。

介绍了波形的生成原理、硬件电路和软件部分的设计原理。

关键词:低频信号发生器; 单片机;D/A转换1设计要求设计一个能产生方波、三角波、梯形波、锯齿波并且频率、幅度可调的信号发生器。

发挥部分:作品还能产生正弦波。

2系统概述2.1.1波形产生方案采用AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净。

它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ 以上。

2.1.2改变幅度方案:方案一:可以将送给DA的数字量乘以一个系数,这样就可以改变DA输出电流的幅度,从而改变输出电压;但是这样做有很严重的问题,单片机在做乘法运算时需要很长的时间,这样的话输出波形的频率就会很低;并且该方案的输出电压做不到连续可调,当DA的输入数字量比较小时,输出的波形失真就会比较严重。

方案二:将输出电压通过一个运算放大器的放大。

这样还有个优点是幅度连续可调。

经比较,方案二既可满足课程设计的基本要求,并且电路也挺简单。

2.2工作原理数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。

89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成系统框图如图2.2所示。

基于51单片机的低频信号发生器(C语言).

基于51单片机的低频信号发生器(C语言).

3
第一章 绪论
1.1 选题背景及其意义
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种 波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如方波、锯齿波、三角 波、正弦波的电路被称为函数信号发生器。在通信、广播、电视系统,在工业、农业、 生物医学领域内,函数信号发生器在实验室和设备检测中具有十分广泛的用途。
第三章 主要电路元器件介绍----------------------------------5
3.1 AT89C51 单片机简介-------------------------------------------------------5 3.1.1 单片机简介--------------------------------------------------------5 3.1.2 主要特性----------------------------------------------------------5 3.1.3 管脚功能说明------------------------------------------------------5 3.2 DAC0809-----------------------------------------------------------------6 3.2.1 工作原理----------------------------------------------------------6 3.2.2 DAC0832的主要特性参数----------------------------------------7 3.2.3 DAC0832 引脚功能简介------------------------------------------8 3.3 数码显示管--------------------------------------------------------------8 3.3.1 原理及分类---------------------------------------------------------8 3.3.2 显示器的工作方式---------------------------------------------------8 3.3.3 显示管字型码-------------------------------------------------------9

基于51单片机的信号发生器-完整电路、程序

基于51单片机的信号发生器-完整电路、程序

摘要之五兆芳芳创作本文以STC89C51单片机为焦点设计了一个低频函数信号产生器.信号产生器采取数字波形分解技巧,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形涉及其他任意波形,波形的频率和幅度在一定规模内可任意改动.波形和频率的改动通过软件控制,幅度的改动通过硬件实现.介绍了波形的生成原理、硬件电路和软件部分的设计原理.本系统可以产生最高频率798.6HZ的波形.该信号产生器具有体积小、价钱低、性能稳定、功效齐全的优点.关头词:低频信号产生器;单片机;D /A转换;1设计选题及任务设计题目:基于单片机的信号产生器的设计与实现任务与要求:设计一个由单片机控制的信号产生器.运用单片机系统控制产生多种波形,这些波形包含方波、三角波、锯齿波、正弦波等.信号产生器所产生的波形的频率、幅度均可调节.并可通过软件任意改动信号的波形.根本要求:1. 产生三种以上波形.如正弦波、三角波、矩形波等.2.最大频率不低于500Hz.并且频率可按一定纪律调节,如周期按1T,2T,3T,4T或1T,2T,4T,8T变更.3.幅度可调,峰峰值在0——5V之间变更.扩展要求:产生更多的频率和波形.2系统概述2.1.1总体计划:计划一:采取模拟电路搭建函数信号产生器,它可以同时产生方波、三角波、正弦波.但是这种模块产生的不克不及产生任意的波形(例如梯形波),并且频率调节很不便利.计划二:采取锁相式频率分解器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该计划性能良好,但难以达到输出频率笼盖系数的要求,且电路庞杂.计划三:使用集成信号产生器产生芯片,例如AD9854,它可以生成最高几十MHZ的波形.但是该计划也不克不及产生任意波形(例如梯形波),并且价钱昂贵.计划四:采取AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净.它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ以上.性能高,在低频规模内稳定性好、操纵便利、体积小、耗电少.经比较,计划四既可满足课程设计的根本要求又能充分阐扬其优势,电路复杂,易控制,性价比高,所以采取该计划.2.1.2改动幅度计划:计划一:可以将送给DA的数字量乘以一个系数,这样就可以改动DA输出电流的幅度,从而改动输出电压;但是这样做有很严重的问题,单片机在做乘法运算时需要很长的时间,这样的话输出波形的频率就会很低,达不到至少500HZ的要求;并且该计划的输出电压做不到连续可调,当DA的输入数字量比较小时,输出的波形失真就会比较严重.计划二:将输出电压通过一个运算缩小器的缩小.这样还有个优点是幅度连续可调.经比较,计划二既可满足课程设计的根本要求,并且电路也挺复杂.数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的办法来取得所需要的波形.89C51单片机自己就是一个完整的微型计较机,具有组成微型计较机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、缩小电路等部分,便可组成所需的波形产生器,其信号产生器组成系统框图如下图所示.系统框图89C51是整个波形产生器的焦点部分,通进程序的编写和执行,产生各类各样的信号,并从键盘接收数据,进行各类功效的转换和信号幅度的调节.当数字信号电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形.波形ROM表是将信号一个周期等间距地别离成64个点,储存在单片机得RON内.具体ROM表是通过MATLAB生成的,例如正弦表,MATLAB生成的程序如下:x=0:2*pi/64:2*pi; y=round(sin(x)*127)+1283单元电路设计与阐发设计中主要采取STC89C51型单片机,它具有如下优点:(1)拥有完善的外部扩展总线,通过这些总线可便利地扩展外围单元、外围接口等.(2)该单片机内部拥有4K 字节的FLASH ROM程序存储器空间和256字节的RAM数据存储空间,完全可以满足程序的要求.由于该芯片可电擦写,故可重复使用.如果更改程序内容,可将芯片拿下重新烧写.(3)该单片机与产业尺度的MCS-51型机的指令集和输出引脚兼容.中断系统是使处理器具有对外界异步事件的处理能力而设置的.当中央处理器CPU正在处理某件事的时候外界产生了紧急事件,要求CPU暂停当前的任务,转而去处理这个紧急事件.在波形产生器中,用两个开光直接与外部中断0和外部中断1的管脚相连,其中S1开光用来改动波形,S2开光用来改动频率.在程序主函数中,我们写了个死循环一直输出一个默认的波形,当S1或S2按下又抬起时,程序会暂时跳出死循环,进入中断处理程序,从而对波形和频率进行改动.时钟电路.由于频率较大时,三角波、正弦波、方波等波中每一点延时时间为几微秒,故延时时间还要加上指令时间便可得到指定频率的波形,该电路用11.0592MHz晶振.主控电路图3.1.2 数/模转换电路由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价钱低廉、接口复杂、转换控制容易并具有8位分辩率的数模转换器DAC0832.DAC0832主要由8位输入存放器、8位DAC 存放器、8位D/A转换器以及输入控制电路四部分组成.但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辩率为单位增减,是准模拟量的输出.DAC0832是电流型输出,在应用时外接运放使之成为电压型输出.按照对DAC0832的数据锁存器和DAC存放器的不合的控制方法,DAC0832有三种任务方法:直通方法、单缓冲方法和双缓冲方法.本设计选用直通方法.DAC0832的数据口和单片机的P0口相连.CSDA:片选信号输入线(选通数据锁存器),低电平有效;WR:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效.由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;数模转换电路LM324的5管脚与DAC0832的(IOUT2)12管脚相连,LM324的6管脚与DAC0832的(IOUT1)11管脚相连,LM324的7管脚与DAC0832的REF(9)管脚相连.第一级运算缩小器的作用是将DAC0832输出的电流信号转化为电压信号V1,第二级运算缩小器的作用是将V1通过反向缩小电路-(R2/R1)倍.题目要求输出的电压在0-5V可调,而V1的电压大约是5V,所以R1选择5K的电阻,R2选择10K的电位器,这样最大的输出电压为5*(10/2)=10,最小电压为0,可以实现题目要求的0-5V.在第二个运算缩小器的输出端连了一个低通滤波器.如果不加低通滤波器,也能够生成波形,但是产生的信号中毛刺良多,加一个低通滤波器不但起到的滤波的作用,还起到了平滑的作用.低通滤波器的截止频率F=1/(2*pi*R3*C6),这里我们选择R3 为100欧姆电阻,C6为104电容,截止频率F=16KHZ.实验标明,此时的输出波形效果不错.3.1.4 串口通信电路通用异步收发器(UART)是一种串行接口,一般微处理器中都包含这种外设接口.异步串行接口提供了一种复杂的途径,使两个器件无需同享同一个时钟信号就能进行通信.如果再参加一个适合的电平转换器MAX232,串口就能能用在RS232和RS485等网络中实现通信,或与计较机的COM端口连接.串口只需两根信号线(RX和TX)便可实现,并且只要两端器件都采取同样的位格局和波特率,那么它们无需其它任何对方的信息就可以成功传输数据.串口通信电路图软件设计上,按照功效分了几个模块编程.模块主要有:主程序模块、外部中断0模块,外部中断1模块.主程序:主程序先是进行一些初始化的任务,然后按照波形标记a,b,c,d,e的值进入相应的while 循环.这样写的利益是输出的波形频率可以790多HZ.在while循环中,单片机按照地址标记位不断低查表,然后把查得的值赋给DAC0832的数据口,然后地址标记位加一,并判断地址标记位是否等于64,如果是就置0再往下执行,如果不是直接往下执行.然后按照频率标记位进行相应的延时.主程序流程图中断办事程序:本程序中两个外部中断辨别起到了控制波形和频率的作用.在程序中还参加了消抖部分.4装置调试及丈量数据阐发4.1调试进程;1.欠亨电,用万用表按照电路图仔细查抄各线路连接是否正常.2.首先是调试单片机部分,DA和运算缩小器芯片不接.用STC_ISP_V483软件通过串口下程序.看是否可以正常下程序. 3.当可以正常下程序时,给51单片机下一个让所有I/0口一会儿输入0,延时,再输出1,以此类推.用万用表丈量各I/O口得电压是不是一会儿高,一会儿低.4.安上DA和运算缩小器芯片,给单片机下一个输出正弦波的测试程序,通过示波器看输出是否正常.5.给单片机下一个完整的程序,辨别按下S1,看波形是否改动.按下S2,看频率是否改动.4.2频率的丈量数据:单位:HZ周期T 2T 3T 4T 5T 6T 7T 8T理论值实际值4.3出现的问题与解决的办法:1.调试单片机的串口时,发明不克不及正常的下程序.我想可能是单片机坏了借了一块学习板测试了一下单片机芯片,发明可以正常下载.这说明极可能是MAX232的电路出了问题.我仔细查抄了电路图,又上网查了下其他的MAX232的电路图,发明我的电路图和他人的不一样.我是依照郭天翔的那本《新概念51单片机C语言教程入门、提高、开发、拓展全》第130页的串口电路画的图,电路图中MAX232的TIOU1接串口的第3脚.而其他书上有些电路图却是MAX232的TIOU1接到了串口的第2脚.于是我将MAX232的TIOU1接串口的第2脚,再下程序,终于可以正常下载了.2.刚开始写的测试程序输出的波形失真很大.我想可能是波形的ROM内外的数据值太小,导致DA输出的误差很大.因而卧将波形的ROM内外的数据值调大,在测试时发明波形变得良多多少了.3.调试波形的时候我发明矩形波的失真比较大.我想到可能是低通滤波器的截止频率太低了,因而我将RC低通滤波器的电阻由1K换成了100欧姆,效果好了良多.4.4系统仿真波形:矩形波锯齿波正弦波4.5效果阐发:由 4.2的频率理论值与实际值,可知频率在T,2T,3T,4T,5T,6T,7T,8T上频率误差很小.最终的波形输出效果也很不错.示波器直流稳压电源万用表5结束语基于单片机的信号产生器设计,这个信号产生器的设计中涉及到一个典型的控制进程.通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算缩小器LM324可以将其电流输出线性地转换成电压输出,再将电压经过运算缩小器的缩小,可以得到足够幅度的信号.通进程序的控制,可以产生一系列有纪律的波形.这样一个信号产生装置在控制领域有相当普遍的应用规模.最终做出来的信号产生器满足了题目中的所有要求:1.产生五种波形.正弦波、三角波、矩形波、梯形波,锯齿波.2.最大频率为798.6HZ.并且频率可按按1T,2T,3T,4T,5T,6T,7T,8T变更.3.幅度可调,峰峰值在0——5V之间变更.当然仍是存在缺乏的地方,比方不克不及实现频率的按一个小的步进调整.并且当频率太小时矩形波会有些失真.信号产生器可以生成更多的波形,只需要再加些波形表便可.在这里得感激学校为我们提供个这样一个实践的机遇,当然还得感激实验室指导老师们的细心指导.参考文献:[1] 郭天翔.[2] 童诗白.模拟电路技巧根本[M].北京:初等教育出版社,2000.171~202.附录1:总电路图附录2:源程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit csda=P2^2;sbit wr=P2^1;sbit s1=P3^2;sbit s2=P3^3;uchar k=0,p=0,delay=0;uchar bxxz=0;pinglv=0;uchar a=1,b=0,c=0,d=0,e=0;uchar code sin[64]={135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,23 0,222,213,204,193,182,170,158,146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,11 4,128};uchar code juxing[64]={255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,25 5,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};uchar code juchi[64]={0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,12 1,125,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,23 5,239,243,247,251,255};uchar code tixing[64]={0,13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221,234,247,247,247,247,247,247, 247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,242,229,216,203,190,177,164,151,138,125,112,99,86,73,60,47,34,2 1,8};uchar code sanjiao[64]={0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208 ,216,224,232,240,248,248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64, 56,48,40,32,24,16,8,0};void delay1(){int a,b;for(a=1;a>0;a--)for(b=122;b>0;b--);}void int0() interrupt 0{EX0=0;delay1();if(s1==0){bxxz++;if(bxxz==5)bxxz=0;switch(bxxz){case 0 :{a=1,b=0,c=0,d=0,e=0;}break;case 1 :{a=0,b=1,c=0,d=0,e=0;}break;case 2 :{a=1,b=0,c=1,d=0,e=0;}break;case 3 :{a=0,b=0,c=0,d=1,e=0;}break;case 4 :{a=0,b=0,c=0,d=0,e=1;}break;}delay1();while(!s1);}while(!s1);EX0=1;}void int1() interrupt 2{EX1=0;delay1();if(s2==0){p++;if(p==8)p=0;switch(p){case 1 :pinglv=3;break;case 2 :pinglv=6;break;case 3 :pinglv=9;break;case 4 :pinglv=12;break;case 5 :pinglv=15;break;case 6 :pinglv=18;break;case 7 :pinglv=21;break;default :pinglv=0;break;}delay1();while(!s2);}while(!s2);EX1=1;}void main(){csda=0;wr=0;EA=1;IT0=1;EX0=1;IT1=1;EX1=1;while(1){while(a){delay=pinglv;P0=sin[k];k++;if(k==64)k=0; while(delay)delay--;}while(b){delay=pinglv;P0=juxing[k];k++;if(k==64)k=0; while(delay)delay--;}while(c){delay=pinglv;P0=juchi[k];k++;if(k==64)k=0; while(delay)delay--;}while(d){delay=pinglv;P0=tixing[k];k++;if(k==64)k=0; while(delay)delay--;}while(e){delay=pinglv;P0=sanjiao[k];k++;if(k==64)k=0;while(delay)delay--;}}}。

51单片机制作的波形发生器

51单片机制作的波形发生器

51单片机制作的波形发生器相信很多朋友都可能接触到一个波型发生器的制作,可能刚刚入门,做的东西也不会说是很复杂。

可能就一个矩形波,或者是三角波。

但是网上的很多资料是忽悠人的,就此,我也提供一个比较完整的波型发生器 C51 原代:该系统的软件比较典型:包括键盘的应用,显示的应用和 DA 转换器的应用。

本设计中,输出的波形有三种:正弦波,方波,三角波。

方波的输出最为简单,只要按照设定的周期值将输出的电压改变即可。

三角波的输出也比较简单,单片机的输出只要完成数字量递增和递减交替进行即可。

、正弦波的输出最麻烦,如果在软件中计算出输出的各点电压值,将会浪费很多的 CPU 时间,以至于无法满足频率的要求。

通常最简单的方法是通过手动的方法计算出输出各点的电压值,然后在编写程序时以数组的方式给出。

当需要时,只要按照顺序进行输出即可。

这种方法比运算法速度快且曲线的形状修改灵活。

在本设计中将 360 度分为 256 个点,则每两个点之间的间隔为1.4 度,然后计算出每个点电压对应的数字量即可。

只要反复输出这组数据到 DAC0832, 就可以在系统输出端得到想要的正弦波。

具体程序如下:#include ;#define uchar unsigned char#define uint unsigned int#define DAdata P0uchar code Sinetab[256]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad,0xaf,0xb1,0xb2,0xb4,0xb6,0xb7,0xb9,0xba,0xbc,0xbd,0xbf,0xc0,0xc1,0xc3,0xc4,0xc5,0xc6,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xce,0xcf,0xd0,0xd1,0xd1,0xd2,0xd2,0xd3,0xd3,0xd3,0xd2,0xd2,0xd1,0xd1,0xd0,0xcf,0xce,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc6,0xc5,0xc4,0xc3,0xc1,0xc0,0xbf,0xbd,0xbc,0xba,0xb9,0xb7,0xb6,0xb4,0xb2,0xb1,0xaf,0xad,0xab,0xaa,0xa8,0xa6,0xa4,0xa2,0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82, 0x80,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71, 0x6f,0x6d,0x6b,0x69,0x67,0x65,0x63,0x61, 0x5f,0x5d,0x5b,0x59,0x57,0x55,0x54,0x52, 0x50,0x4e,0x4d,0x4b,0x49,0x48,0x46,0x45, 0x43,0x42,0x40,0x3f,0x3e,0x3c,0x3b,0x3a, 0x39,0x37,0x36,0x35,0x34,0x33,0x32,0x31, 0x31,0x30,0x2f,0x2e,0x2e,0x2d,0x2d,0x2c, 0x2c,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a, 0x2a,0x2a,0x2a,0x2a,0x2b,0x2b,0x2b,0x2b, 0x2c,0x2c,0x2d,0x2d,0x2e,0x2e,0x2f,0x30, 0x31,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x39,0x3a,0x3b,0x3c,0x3e,0x3f,0x40,0x42, 0x43,0x45,0x46,0x48,0x49,0x4b,0x4d,0x4e, 0x50,0x52,0x54,0x55,0x57,0x59,0x5b,0x5d, 0x5f,0x61,0x63,0x65,0x67,0x69,0x6b,0x6d, 0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7d, };uchar code Triangletab[58]={0x1a,0x21,0x28,0x2f,0x36,0x3d,0x44,0x4b, 0x52,0x59,0x60,0x67,0x6e,0x75,0x7c,0x83,0x8a,0x91,0x98,0x9f,0xa6,0xad,0xb4,0xbb,0xc2,0xc9,0xd0,0xd7,0xde,0xe5,0xde,0xd7,0xd0,0xc9,0xc2,0xbb,0xb4,0xad,0xa6,0x9f,0x98,0x91,0x8a,0x83,0x7c,0x75,0x6e,0x67,0x60,0x59,0x52,0x4b,0x44,0x3d,0x36,0x2f,0x28,0x21,};uchar code Squaretab[2]={0x56,0xaa};uchar code disp1[]={&quot;Sine Wave &quot;&quot;Triangle Wale &quot;&quot;Square Wave &quot;};uchar idata disp2[16]={&quot;Frequency:Hz&quot;};uchar code Coef[3]={10,100,200};uchar idata WaveFre[3]={1,1,1};uchar code WaveTH[]={0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, };uchar code WaveTL[]={0xf2,0x78,0xfb,0x3c,0x63,0x7d,0x8f,0x9d,0xa8,0xb1, 0x17,0x0b,0xb2,0x05,0x37,0x58,0x70,0x82,0x90,0x9b, 0x4d,0xa7,0xc4,0xd3,0xdc,0xe2,0xe6,0xea,0xec,0xee };uchar Wavecount,THtemp,TLtemp;uchar Waveform;sbit rs=P2^5;sbit rw=P2^6;sbit e=P2^7;sbit DA=P2^0;sbit KEY=P3^2;void delay(uchar i){uchar j;for(;i>;0;i--)for(j=20;j>;0;j--);}void busy(){uchar temp;temp=0x00;rs=0;rw=1;while((temp&0x80)==0x80) {P0=0xff;e=1;temp=P0;e=0;}}void WR_Com(uchar temp) {busy();rs=0;rw=0;P0=temp;e=1;e=0;}void WR_Data(uchar num){busy();rs=1;rw=0;P0=num;e=1;e=0;}void disp_lcd(uchar addr,uchar *temp1) {uchar i;WR_Com(addr);delay(100);for(i=0;i;0;i--){P0=0x30;rs=0;rw=0;e=1;e=0;delay(100);P0=0x38;rs=0;rw=0;e=1;e=0;delay(100);}void lcd_Reset(){WR_Com(0x01);delay(100);WR_Com(0x06);delay(100);WR_Com(0x0c);delay(100);}void SineOUT(uchar Wavecount) {DAdata=Sinetab[Wavecount++]; Wavecount=0;DA=0;}void TriangleOUT(uchar Wavecount) {DAdata=Triangletab[Wavecount++]; if(Wavecount>;57)Wavecount=0;DA=0;DA=1;}void SquareOUT(uchar Wavecount) {DAdata=Squaretab[Wavecount++];if(Wavecount>;1)Wavecount=0;DA=0;DA=1;}void timer() interrupt 1{TH0=THtemp;TL0=THtemp;if(Waveform==0)SineOUT(Wavecount); else if(Waveform==1)TriangleOUT(Wavecount); else if(Waveform==2)SquareOUT(Wavecount); }void key_int() interrupt 0 {uchar keytemp,keytemp1;uint WaveCoef;EA=0;TR0=0;keytemp1=0;delay(10);while(!KEY);keytemp=~P2&0x1e; keytemp>;>;=1;while(keytemp!=8){keytemp=~P2&0x1e;keytemp>;>;=1;if(keytemp!=keytemp1){keytemp1=keytemp;switch(keytemp){case 1:if(++Waveform==3)Waveform=0;break;case 2:if(++WaveFre[Waveform]==11)WaveFre[Waveform]=1;break;case 4:if(--WaveFre[Waveform]==0)WaveFre[Waveform]=10;break;}THtemp=WaveTH[Waveform*16+(WaveFre[Waveform]-1)]; TLtemp=WaveTL[Waveform*16+(WaveFre[Waveform]-1)];WaveCoef=WaveFre[Waveform]*Coef[Waveform]; disp2[13]=WaveCoef%10+0x30;WaveCoef/=10;disp2[12]=WaveCoef%10+0x30;WaveCoef/=10;disp2[11]=WaveCoef%10+0x30;WaveCoef/=10;disp2[10]=WaveCoef%10+0x30;WaveCoef/=10;disp_lcd(0x80,&disp1[Waveform*16]);disp_lcd(0xc0,disp2);}}TH0=THtemp;TL0=THtemp;Wavecount=0;TR0=1;}void main(){uint WaveCoef;uchar i;lcd_ini();lcd_Reset();WaveCoef=WaveFre[Waveform]*Coef[Waveform]; disp2[13]=WaveCoef%10+0x30;WaveCoef/=10;disp2[12]=WaveCoef%10+0x30;WaveCoef/=10;disp2[11]=WaveCoef%10+0x30;WaveCoef/=10;disp2[10]=WaveCoef%10+0x30;WaveCoef/=10;disp_lcd(0x80,&disp1[Waveform*16]);disp_lcd(0xc0,disp2);i=0;DAdata=0x00;DA=0;TMOD=0x01;IT0=1;ET0=1;EX0=1;EA=1;while(1);}。

基于51单片机的多功能信号发生器

基于51单片机的多功能信号发生器

河南理工大学《微机原理与单片机接口技术》课程设计报告多功能信号发生器设计2013年1月10 日摘要本次设计是一个多功能信号发生器,可以产生、方波、锯齿波和三角波。

函数信号发生器的设计方法有多种,利用单片机设计的函数信号发生器具有编程灵活,功能更以扩充等实际的优点。

设计原理图如下图所示,其中单片机通过软件对键盘输入的频率数值进行处理,处理结果送与D/A转换部分实现数/模转换,输出的电流再经过电流/电压转换环节,进而形成模拟电压波形,最后经过过载保护电路输出。

同时在数码管内显示该频率数值。

波形的切换可以通过按键直接实现。

在编程语言上,我们选择自身比较熟悉的C语言,这样在后期波形的调试及与硬件衔接方面更容易发挥出自身优势。

根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中。

在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。

经过设计及后期长时间的调试,设计的所有功能均已实现:(1)具有产生方波、锯齿波、三角波三种周期性波形的功能。

(2)输出波形的频率范围为100Hz~1kHz;频率步进间隔≤100Hz。

(3)输出波形幅度范围0~5V,可按步进0.1V(峰-峰值)调整。

(4)具有显示输出波形的类型、周期和幅度的功能。

关键词:单片机,函数发生器,共阴极数码管目录第一章绪论 (5)1.1选题背景及其意义 (5)信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。

各种波形曲线均可以用三角函数方程式来表示。

能够产生多种波形,如方波、锯齿波、三角波、正弦波的电路被称为函数信号发生器。

在通信、广播、电视系统,在工业、农业、生物医学领域内,函数信号发生器在实验室和设备检测中具有十分广泛的用途。

(5)1.2单片机概述 (5)1.3信号发生器的分类 (5)1.4 研究内容 (6)第二章方案的设计与选择 (6)2.1 方案的比较 (6)2.2 设计原理 (6)2.3 设计思想 (6)2.4 设计功能 (7)(1)具有产生方波、锯齿波、三角波三种周期性波形的功能。

基于51单片机的简易函数信号发生器资料

基于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、对实验现象、数据及观察结果的分析与讨论:经过观察调试,再观察,再调试,最终输出的波形较为理想。

此次试验经过一系列的调试,最终输出的波形为正弦波、方波、三角波。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

低频信号发生器-------期末课程设计学院:班级:学号:姓名:指导老师:2010-6-12第0章实验室基础 ........................................................ 错误!未定义书签。

第1章交换机基本配置 ..................... 错误!未定义书签。

1.1 使用交换机的命令行管理界面................. 错误!未定义书签。

1.2 交换机的全局配置.......................... 错误!未定义书签。

1.3 交换机端口的基本配置...................... 错误!未定义书签。

1.4 查看交换机的系统和配置信息................. 错误!未定义书签。

第2章虚拟局域网VLAN................... 错误!未定义书签。

2.1 交换机端口隔离 ........................... 错误!未定义书签。

2.2 跨交换机实现VLAN........................ 错误!未定义书签。

第3章提供交换网络中的冗余链路.......... 错误!未定义书签。

3.1 端口聚合提供冗余备份链路................... 错误!未定义书签。

3.2 快速生成树配置 ........................... 错误!未定义书签。

第4章路由器的基本配置................... 错误!未定义书签。

4.1 使用命令行界面 ........................... 错误!未定义书签。

4.2 路由器的全局配置.......................... 错误!未定义书签。

4.3 路由器端口的基本配置...................... 错误!未定义书签。

4.4 查看路由器的系统和配置信息............. 错误!未定义书签。

一、实验目的1、学习和运用keilC的C语言;2、学习通过proteus软件画原理图,并利用keilC软件形成的HEX文件运行;3、实现利用单片机AT98C51和8位D/A转换芯片DAC0832共同实现方波、三角波、锯齿波、梯形波这四种常见波形的发生4、进一步学习和利用protel软件,画出实验原理图,并生成PCB图;5、AT89S51为核心的单片机系统的软硬件开发过程;6、基本信号的产生原理及函数发生器系统的设计流程二、实验要求设计一个低频信号发生器:1、查阅相关资料,完成原理图设计;2、编写软件,使该系统能输出方波、三角波、锯齿波和梯形波;波形频率均为1khz,双极性输出。

3、用protel软件完成系统的硬件设计,并通过电器规则检查;4、仿真实现;5、画pcb图;6、写综合课程设计报告。

三、器件清单1、AT80C51一个;2、DAC0832一个;3、OPAMP两个;4、数码管一个;5、按键开关一个;6、电阻、电感若干;四、实验原理#include <AT89X51.H>unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66}// 0 1 2 3 4unsigned char time1; //////延时函数参数////////////////////////////////////变量说明//////////////////////////////////////unsigned char time2;unsigned char time3;unsigned char count;unsigned char ms;////////////////////////////////////////函数说明////////////////////////////////void initial(void); ////初始化函数//////void initial_time0(void); //////定时器0初始化///////void anjian(void);////////////按键函数////void delay(unsigned char time1,time2,time3); ////延时函数////void disp(unsigned char count); /////静态显示子函数/////void delay1(char ms);void fangbo(void); //方波函数//void sanjiaobo(void); //三角波函数//void juchibo(void); //锯齿波函数//void tixingbo(void); //正弦波函数//void main (void){initial();while(1){anjian();}}/****************************************************************** *******//函数名称:void anjian(void)//函数说明:按键函数//函数功能:// 注意:******************************************************************* ******/void anjian(void){if(P3_7==0){delay(1,50,248);if(P3_7==0){count=1;disp(count);fangbo();}}while(P3_7==0);count=0;disp(count);anjian();}/****************************************************************** *******//函数名称:void fangbo(void)//函数说明:方波函数//函数功能:// 注意:******************************************************************* ******/void fangbo(void){while(1){unsigned char fangbo_1;fangbo_1+=8;if(fangbo_1>128&fangbo_1<256) {P0=0x00;}if(fangbo_1<128) {P0=0xff;}if(P3_7==0){delay(1,50,248);if(P3_7==0){ count=2;disp(count);sanjiaobo();}}while(P3_7==0);}}/****************************************************************** *******//函数名称:void sanjiaobo(void)//函数说明:三角波函数//函数功能:// 注意:******************************************************************* ******/void sanjiaobo(void){while(1){unsigned char sanjiaobo_2;if(sanjiaobo_2<=128){P0=sanjiaobo_2;}else{P0=255-sanjiaobo_2;}sanjiaobo_2+=5;if(sanjiaobo_2>=255){sanjiaobo_2=0x00;}if(P3_7==0){delay(1,50,248);if(P3_7==0){count=3;disp(count);juchibo();}}while(P3_7==0);}}/****************************************************************** *******//函数名称:void juchibo(void)//函数说明:锯齿波函数//函数功能:// 注意:******************************************************************* ******/void juchibo(void){while(1){unsigned char juchibo_3;if(juchibo_3<180) {P0=juchibo_3;}juchibo_3+=4;if(juchibo_3>=180) {juchibo_3=0x00;}if(P3_7==0){delay(1,50,248);if(P3_7==0){count=4;disp(count);tixingbo();}}while(P3_7==0);}}/****************************************************************** *******//函数名称:void tixingbo(void)//函数说明:梯形波函数//函数功能:// 注意:******************************************************************* ******/void tixingbo(void){while(1){unsigned char tixingbo_4;if(tixingbo_4<120){P0=tixingbo_4;}else if(tixingbo_4==120)delay1(1);else if(tixingbo_4<240){P0=240-tixingbo_4;}if(tixingbo_4==240){delay1(1);}if(tixingbo_4>240){tixingbo_4=0x00;}tixingbo_4+=10;if(P3_7==0){delay(1,50,248);if(P3_7==0){ count=0;disp(count);anjian();}}while(P3_7==0);}}/****************************************************************** *******//函数名称:void initial(void)//函数说明:初始化函数//函数功能:// 注意:******************************************************************* ******/void initial(void){P0=0xff;P1=0xff;P2=0xff;P3=0xff;}/****************************************************************** *******//函数名称:delay(unsigned char time1,time2,time3)//函数说明:延时函数//函数功能://入口参数:unsigned char time1,time2,time3//出口参数:// 注意:延时时间的计算:(time1*time2*time3*8us)ustime1,time2,time3可以不进行变量说明******************************************************************* ******/void delay(unsigned char time1,time2,time3){unsigned char i,j,k;for(i=time1;i>0;i--){ for(j=time2;j>0;j--){for(k=time3;k>0;k--);}}}/****************************************************************** *******//函数名称:disp(unsigned char count)//函数说明:静态显示子函数//函数功能://入口参数:unsigned char count//出口参数:// 注意:******************************************************************* ******/void disp(unsigned char count){P2=table[count];delay(1,5,248);}void delay1(char ms){char ti;while(ms--){for(ti=0;ti<16;ti++){}}}实验心得通过该课题的设计掌握以AT89S51为核心的单片机系统的软硬件开发过程和基本信号的产生原理、测量及误差分析方法,同时掌握函数发生器系统的设计流程;培养我们综合运用所学的基本知识、基本理论和基本技能的能力,学习解决一般工程技术和有关专业问题的能力,学习工程设计和科学研究的基本方法,完成对所学知识的综合训练。

相关文档
最新文档