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

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

基于51系列单片机的多功能波形发生器及特定波形幅值调节

基于51系列单片机的多功能波形发生器及特定波形幅值调节

基于51系列单片机的多功能波形发生器及特定波形幅值调节概述:随着科技的不断进步,波形发生器在各种测量、调试和实验中发挥着重要的作用。

本文将介绍一种基于51系列单片机的多功能波形发生器,并且可以对特定波形的幅值进行调节。

设计原理:本波形发生器采用51系列单片机作为核心控制器,并通过DAC芯片将数字信号转换为模拟信号输出。

通过LCD显示模块显示当前所选的波形类型和幅值,并通过按键来切换和调节相应的参数。

主要功能:1.多波形输出:本波形发生器可以输出多种波形,如正弦波、方波、三角波、锯齿波等。

用户可以通过按键选择所需的波形类型。

2.幅值调节:本波形发生器还可以根据用户的需求,对特定波形的幅值进行调节。

3.频率调节:用户可以通过按键来调节波形的频率,以满足不同的实验需求。

4.输出控制:用户可以通过按键选择启用或停用输出信号。

硬件设计:1.单片机控制电路:使用51系列单片机作为核心控制器,通过控制IO口的状态来实现波形选择和参数调节。

2.DAC芯片:将单片机输出的数字信号转换为模拟信号,实现波形的输出。

3.LCD显示模块:用于显示当前所选的波形类型和幅值。

4.按键模块:用于选择波形类型、调节幅值和频率等参数。

5.输出控制电路:通过控制开关,使得输出信号可以被启用或停用。

软件设计:1.系统初始化:包括设置IO口的状态、初始化LCD显示模块、初始化按键模块等。

2.波形选择:通过按键选择所需的波形类型,并将相应的参数传递给DAC芯片。

3.幅值调节:根据用户的需求,通过按键调节特定波形的幅值,并通过DAC芯片实现相应的调节。

4.频率调节:通过按键调节波形的频率,并通过定时器来实现相应的调节。

5.输出控制:根据用户选择的开关状态,控制输出信号的启用或停用。

总结:基于51系列单片机的多功能波形发生器及特定波形幅值调节是一种灵活、实用的设计方案。

它可以满足各种不同波形的输出需求,并且可以根据用户的需求对波形的幅值进行调节。

基于51单片机的三角波信号发生器设计论文

基于51单片机的三角波信号发生器设计论文

基于51单片机的三角波信号发生器设计【内容摘要】单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

单片机我感觉很重要,现在自动控制在各个领域被广泛应用,这少不了单片机的功劳。

目前使用的信号发生器是函数信号发生器,且特殊波形发生器的价格昂贵。

所以使用我设计单片机构成的发生器,可产生三角波、方波、正弦波等多种特殊形和任意波,波形的频率可以用程序控制、在单片机上外围器件距阵式键盘,通过其控制波形并选择,并用显示器显示频率大小。

在单片机的输出端口进行转换,再通过运放进行波形调整,最后输出波在示波器上显示。

本设计性能优越、价格低廉、结构紧凑、线路简单,希望能在以后产品上能广泛的应用。

【关键词】单片机三角波信号发生器性能优越目录:第一章绪论1.1课题背景……………………………………….3--41.2课题意义 (5)第二章系统设计2.1三角波的产生 (6)2.2 设计思路 (7)2.3结构模块划分 (8)第三章硬件电路的设计3.1基本原理………………………………………………………9--103.2 显示电路 (11)3.3、D/A电路 (12)第四章软件设计...........................................................................13--16 论文总结..............................................................................17--18 参考文献 (19)第一章绪论1.1课题背景单片机诞生于20世纪70年代末,经历了SCM、MCU、soc三大阶段。

基于51单片机的波形发生器的设计汇总

基于51单片机的波形发生器的设计汇总

基于51单片机的波形发生器的设计汇总波形发生器是电子领域中常用的一种设备,用于产生各种不同形式的波形信号。

本文将基于51单片机的波形发生器的设计进行汇总。

设计思路如下:一、基本原理波形发生器的基本原理是通过控制数字信号的高低电平来产生不同的波形。

在这个设计中,我们将使用51单片机作为控制器来产生波形信号。

二、硬件部分1.时钟电路:使用一个晶体振荡器作为时钟源,提供稳定的时钟脉冲给51单片机。

2.电源电路:使用稳压电源提供稳定的电压给51单片机和其他电路。

3.单片机电路:将51单片机与其他电路进行连接,包括输入输出端口和相应的外部电路。

4.波形输出电路:根据需要产生不同的波形,设计相应的输出电路,包括滤波器、电阻、电容等元器件。

三、软件部分1.系统初始化:在系统上电后,进行相应的初始化工作,包括设置引脚功能、中断,设置计时器等。

2.波形生成算法:根据用户的选择,使用合适的算法生成相应的波形信号。

常见的波形有正弦波、方波、三角波等。

3.输出控制:根据生成的波形信号,通过设置相应的输出引脚,将波形信号输出到波形输出电路中。

4.用户界面:设计一个简单的用户界面,让用户可以选择不同的波形、调整频率、幅度等参数。

5.中断处理:使用中断功能来处理波形输出频率的控制,实现较高的输出稳定性。

四、设计考虑1.精度要求:根据具体应用场景,确定波形发生器的精度要求。

如果需要较高的精度,可能需要采用更复杂的算法和更精密的输出电路。

2.输出负载:考虑波形发生器的输出负载情况,选择合适的输出电路,以确保波形信号的准确性和稳定性。

3.电源稳定性:电源的稳定性对波形发生器的性能也有影响,需要注意电源供电的稳定性。

五、测试与优化完成波形发生器设计后,进行相应的测试与优化。

包括波形信号的频率、幅度等测试,以及对输出电路、算法等进行优化。

最后,通过以上的设计思路,我们可以完成基于51单片机的波形发生器的设计。

根据具体的应用需求,可能需要对硬件和软件进行相应的调整和优化。

基于51单片机控制的函数波形发生器

基于51单片机控制的函数波形发生器
2.6
复位电路的作用是在上电或复位过程中,控制CPU的复位状态。这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象,这主要是单片机的复位电路设计不可靠引起的。复位电路如图7所示。
由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。如图5所示。
中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件,要求CPU暂停当前的工作,转而去处理这个紧急事件。在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51输出一个波形采样点信号后,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着输出下一个采样点信号,如此循环产生所需要的信号波形【4】。
方案三:采用单片机编程的方法来实现。该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。

基于51单片机波形发生器课程设计

基于51单片机波形发生器课程设计

任务名称:基于51单片机波形发生器课程设计项目背景和目标波形发生器是电子学中常用的实验设备之一,用于产生不同形状和频率的电信号。

在本课程设计中,我们将使用51单片机设计和实现一个基本的波形发生器。

该波形发生器将具备以下功能: 1. 发生正弦波、方波和三角波等不同形状的波形。

2. 支持用户输入频率和幅度参数。

3. 以可视化的方式显示波形输出。

硬件需求在实现波形发生器的过程中,我们需要以下硬件设备: 1. 51单片机开发板:用于运行波形发生器的程序,控制波形的生成和输出。

2. 信号发生器电路:用于将数字信号转换为模拟信号输出。

3. 示波器:用于验证波形输出的准确性和稳定性。

软件设计软件设计方案1.编写主程序:利用51单片机的C语言开发环境编写主程序,实现波形的生成和输出。

2.设计波形生成模块:根据用户输入的频率和幅度参数,生成对应形状的波形。

3.设置输出端口:将波形数据通过51单片机的输出端口发送给信号发生器电路。

4.配置信号发生器电路:将51单片机生成的数字信号转换为模拟信号输出。

5.连接示波器:将信号发生器的输出连接到示波器,验证波形输出的准确性和稳定性。

主程序设计以下是主程序的设计思路:#include <reg51.h>// 定义波形类型的枚举enum WaveType {Sine,Square,Triangle};// 定义全局变量enum WaveType waveType; // 波形类型int frequency; // 波形频率int amplitude; // 波形幅度// 定义函数原型void generateWave();void setOutputPort();void configureSignalGenerator();void connectOscilloscope();void main() {// 获取用户输入的波形参数// TODO: 实现获取用户输入的函数// 波形类型可以通过按键切换,频率和幅度可以通过调节旋钮获取// 生成波形generateWave();// 设置输出端口setOutputPort();// 配置信号发生器电路configureSignalGenerator();// 连接示波器connectOscilloscope();while (1) {// 循环执行波形生成和输出generateWave();setOutputPort();}}// 生成波形函数void generateWave() {switch (waveType) {case Sine:// 生成正弦波形的代码break;case Square:// 生成方波形的代码break;case Triangle:// 生成三角波形的代码break;}}// 设置输出端口函数void setOutputPort() {// 设置51单片机的输出端口的代码}// 配置信号发生器电路函数void configureSignalGenerator() {// 配置信号发生器电路的代码}// 连接示波器函数void connectOscilloscope() {// 连接示波器的代码}波形生成模块设计波形生成模块根据用户输入的频率和幅度参数生成对应形状的波形。

基于51单片机的函数信号发生器的设计

基于51单片机的函数信号发生器的设计

111 前言波形发生器,是一种作为测试用的信号源,是当下很多电子设计要用到的仪器。

现如今是科学技术和设备高速智能化发展的科技信息社会,集成电路发展迅猛,集成电路能简单地生成各式各样的波形发生器,将其他信号波形发生器于用集成电路实现的信号波形发生器进行对比,波形质量、幅度和频率稳定性等性能指标,集成电路实现的信号波形发生器都胜过一筹,随着单片机应用技术的不断成长和完善,导致传统控制与检测技术更加快捷方便。

2 系统设计思路文章基于单片机信号发生器设计,产生正弦波、方波、三角波,连接示波器,将生成的波形显示在示波器上。

按照对作品的设计研究,编写程序,来实现各种波形的频率和幅值数值与要求相匹配,然后把该程序导入到程序存储器里面。

当程序运行时,一旦收到外界发出的指令,要求设备输出相应的波形时,设备会调用对应波形发生程序以及中断服务子程序,D/A转换器和运放器随之处理信号,然后设备的端口输出该信号。

其中,KEY0为复位键,KEY1的作用是选择频率的步进值,KEY2的作用是增加频率或增加频率的步进值,KEY3的作用是减小频率或减小频率的步进值,KEY4的作用是选择三种波形。

103为可调电阻,用于幅值的调节。

自锁开关起到电源开关的作用。

启动电源,程序运行的时候,选择正弦波,红色LED灯亮起;选择方波,黄色LED灯亮起;选择三角波,绿色LED灯亮起。

函数信号发生器频率最高可达到100Hz,最低可达到10Hz,步进值0.1-10Hz,幅值最高可到3.5V。

系统框图如图1所示。

3 软件设计选用AT89C51单片机编写程序。

这种方法控制信号波形的频率和幅值是通过编写程序来实现,通过改变程序来实现频率的变化,且这种方法无需改变硬件电路。

这种方法可以使信号的精度很高(编程产生的是数字信号),并可使电路得到一定程度上的简化。

主程序和生成波形的子程序共同组成了系统软件设计,生成波形的子程序的编程是软件设计的主要内容,各种波形通过编程来得到。

基于51单片机的多功能信号发生器设计word格式

基于51单片机的多功能信号发生器设计word格式

基于51单片机的多功能信号发生器设计一、设计目的和意义随着电子技术的发展,信号发生器经常要用在各种科学技术领域和工程实践中。

选择适当的嵌入式处理器、DA转换芯片,放大器,设计出一种基于单片机的多功能信号发生器的设计,能够实现键盘控制下输出正弦波、方波、三角波等波形。

二、设计原理利用51单片机采用程序设计方法产生锯齿波、正弦波、矩形波三种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产1Hz—3kHz的波形。

通过键盘来控制三种波形的类型选择、频率变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分。

三、详细设计步骤1.总体框架图1 系统总体框架2.单片机最小系统设计51单片机是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单﹑可靠。

用80C51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图2所示。

由于集成度的限制,最小应用系统只能用作一些小型的控制单元。

其应用特点:(1) 有可供用户使用的大量I/O口线。

(2) 内部存储器容量有限。

(3) 应用系统开发具有特殊性。

图2 51单片机最小系统3.波形产生模块由单片机采用编程方法产生三种波形、通过DA转换模块DAC0832在进过滤波放大之后输出。

开始置DAC0832口地址4000HA赋值为#00H(A)0823输出A=F0H A=A+1图3锯齿波产生流程图锯齿波产生首先将DAC0832口地址置为4000H,然后将00H送入寄存器A中,DAC0832输出A的内容,当A中的内容等于F0H返回开始,当A中的内容不为0FH时,A的内容累加,从而输出波形。

图4 三角波产生流程图三角波产生首先将DAC0832口地址置为4000H,通过A中数值的加1递增,当A中的内容为0FFH时,A中的内容减1递减,从而循环产生三角波。

基于51单片机的波形发生器设计

基于51单片机的波形发生器设计

基于51单片机的波形发生器设计本次课程设计旨在设计一个波形发生器,能够产生单极性、幅度可调、周期可调的方波、锯齿波、三角波和正弦波信号。

设计采用AT89C51单片机为核心,通过与8279芯片、38译码器和锁存器的配合,实现对键盘状态的检测和LED显示的控制。

通过D/A转换器、运算放大器和示波器,实现对波形的输出,并在8位LED显示器上显示波形类型的代号、幅值和频率。

键盘为4*8键盘,通过键盘摁键实现对波形种类、幅值和频率等的调节。

为了实现上述功能,我们需要选择合适的硬件。

首先,我们选择AT89C51单片机作为核心芯片。

AT89C51具有4k字节Flash闪速存储器、128字节内部RAM、32个I/O口线、两个16位定时/计数器、一个5向量两级中断结构、一个全双工串行通信口、片内振荡器及时钟电路等标准功能。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

因此,AT89C51芯片具有优良的性能,符合题目的要求。

除了AT89C51单片机外,我们还需要选择其他硬件设备。

通过与8279芯片、38译码器和锁存器的配合,实现对键盘状态的检测和LED显示的控制。

D/A转换器、运算放大器和示波器用于实现波形的输出。

8位LED显示器用于显示波形类型的代号、幅值和频率。

键盘为4*8键盘,通过键盘摁键实现对波形种类、幅值和频率等的调节。

三.软件设计本次课程设计需要编写相应的软件程序,以实现波形发生器的各项功能。

软件设计主要涉及到以下几个方面:1.键盘扫描程序设计键盘扫描程序需要实现对键盘状态的检测,以获取用户输入的波形种类、幅值和频率等参数。

我们采用轮询的方式进行键盘扫描,即不断地检测键盘状态,直到用户输入了有效的参数为止。

  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为核心的单片机系统的软硬件开发过程和基本信号的产生原理、测量及误差分析方法,同时掌握函数发生器系统的设计流程;培养我们综合运用所学的基本知识、基本理论和基本技能的能力,学习解决一般工程技术和有关专业问题的能力,学习工程设计和科学研究的基本方法,完成对所学知识的综合训练。

相关文档
最新文档