基于51单片机的信号发生器 完整电路程序
STC51单片机的函数信号发生器(c语言)

STC51单片机的函数信号发生器(c语言)————————————————————————————————作者:————————————————————————————————日期:基于51单片机的函数信号发生器设计报告摘要本系统利用单片机AT89C52采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,能产生10Hz—10kHz的波形。
通过键盘来控制四种波形的类型选择、拨码开关控制频率的变化,并通过液晶屏1602显示其各自的类型以及数值,系统大致包括信号发生部分、数/模转换部分以及液晶显示部分三部分,其中尤其对数/模转换部分和波形产生和变化部分进行详细论述。
关键词:单片机AT89S52、DAC0832、液晶1602目录1. 系统设计1.1 设计要求1.2方案设计与论证1.2.1 信号发生电路方案论证 1.2.2 单片机的选择论证1.2.3 显示方案论证1.2.4 键盘方案论证1.3 总体系统设计1.4 硬件实现及单元电路设计1.4.1 单片机最小系统的设计1.4.2 波形产生模块设计1.4.3 显示模块的设计1.4.4 键盘模块的设计1.5 软件设计流程1.6 源程序2. 输出波形的种类与频率的测试2.1 测试仪器及测试说明2.2 测试结果3、附录3.1 参考文献3.2 附图1、系统设计经过考虑,我们确定方案如下:利用AT89C52单片机采用程序设计方法产生锯齿波、三角波、正弦波、方波四种波形,再通过D/A转换器DAC0832将数字信号转换成模拟信号,滤波放大,最终由示波器显示出来,通过键盘来控制四种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。
1.1、设计要求1)、利用单片机采用软件设计方法产生四种波形2)、四种波形可通过键盘选择3)、波形频率可调4)、需显示波形的种类及其频率1.2方案设计与论证1.2.1 信号发生电路方案论证方案一:通过单片机控制D/A,输出四种波形。
基于51单片机信号发生器

基于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在进过滤波放大之后输出。
图3锯齿波产生流程图锯齿波产生首先将DAC0832口地址置为4000H ,然后将00H 送入寄存器A 中,DAC0832输出A 的内容,当A 中的内容等于F0H 返回开始,当A 中的内容不为0FH 时,A 的内容累加,从而输出波形。
图4 三角波产生流程图三角波产生首先将DAC0832口地址置为4000H,通过A中数值的加1递增,当A中的内容为0FFH时,A中的内容减1递减,从而循环产生三角波。
图5 正弦波产生流程图正弦波的设计通过查表得图6方波产生流程图首先将DAC0832口地址置为4000H,通过A中内容为0时,输出对应模拟量,然后延时,当A中的内容为0FF时,同样输出对应模拟量,再延时,从而得到方波。
信号发生器51适合的程序

波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。
本次课程设计使用的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单片机的低频信号发生器(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单片机的多功能信号发生器

河南理工大学《微机原理与单片机接口技术》课程设计报告多功能信号发生器设计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单片机的简易信号发生器

/****************简易信号发生器****************************程序功能:输出正弦波、锯齿波、方波、三角波涉及芯片:TLC5615**********************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit din=P3^0;sbit scl=P3^1;sbit cs1=P3^2;sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;//sbit w2= P1^0;uchar code sine_tab[256]={//输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab, 0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4, 0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,//输出电压从最大值到0(正弦波1/4部分)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba, 0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d, 0x89,0x86,0x83,0x80,//输出电压从0到最小值(正弦波1/4部分)0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55, 0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b, 0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e, 0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,//输出电压从最小值到0(正弦波1/4部分)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20, 0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45, 0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72, 0x76,0x79,0x7c,0x80};uchar bdata date; //位寻址sbit date7=date^7;sbit date6=date^6;sbit date5=date^5;sbit date4=date^4;sbit date3=date^3;sbit date2=date^2;sbit date1=date^1;sbit date0=date^0;void delay(uint t){while(t--);}void write_sip5615(uchar k) {date=k;din=date7;scl=0;scl=1;din=date6;scl=0;scl=1;din=date5;scl=0;scl=1;din=date4;scl=0;scl=1;din=date3;scl=0;scl=1;din=date2;scl=0;scl=1;din=date1;scl=0;scl=1;din=date0;scl=0;}void write_5615(uint k){k<<=2;cs1=0;write_sip5615(k>>8);//送高八位write_sip5615(k);//送低八位cs1=1;}void main(){uint k1=0,k2=0,k3=0,k4=0,i=0,j=0,x=0,z,p;while(1){/* w2=0;delay(500);w2=1;delay(500); */if(key1==0)//按键1检测{k1=1;k2=0,k3=0,k4=0;while(!key1);}if(key2==0) //按键2检测{k2=1;k3=0,k1=0,k4=0;while(!key2);}if(key3==0)//按键3检测{k3=1;k1=0,k2=0,k4=0;while(!key1);}if(key4==0)//按键4检测{k4=1;k1=0,k2=0,k3=0;while(!key2);}if(k1==1)//正弦波write_5615(sine_tab[i]);i++;delay(100);if(i==256)i=0;}if(k2==1)//锯齿波{write_5615(j);j++;delay(100);if(j==250)j=0;}if(k3==1)//方波(次处用单片机的I/O效果更好){write_5615(10);delay(10000);write_5615(200);delay(10000);}if(k4==1)//三角波{for(z=0;z<301;z++){delay(50);write_5615(z);if(z==300){for(p=300;p>0;p--){if(p==0)break;write_5615(p);delay(50);}}}}}}。
基于51单片机的信号发生器

哈尔滨工业大学(威海)课程设计报告
图 3-3 DAC0832 与单片机的接口电路
图 3-4 键盘和单片机的连接电路图
3.6 显示电路
(1)运算放大电路 运算放大器型号为 UA741,它是一种高增益运算放大器,用于军事、工业和商
7
哈尔滨工业大学(威海)课程设计报告
业应用。这类单片硅整集成电路器件提供输出短路保护和闭锁自由运作。 运算放大器与 DAC0832 接口电路如图 3-5 所示。
信号发生器是一种经常使用的设备,若按照传统的设计方法,由纯粹的物理 器件构成,存在许多弊端,如:体积较大、重量较沉、移动不方便、信号失真较 大、波形形状调节过于死板,无法满足用户对精度、便携性、稳定性等要求。研 究设计出一种具有频率稳定、准确,波形质量好,便携性好等特点的波形发生器 来满足工业领域对信号源的要求,具有较好的市场前景。
(1)电流稳定时间 1us; (2)可单缓冲、双缓冲或直接数字输入; (3)单一电源供电(+5V~+15V); (4)低功耗,200mW。 DAC0832 结构: (1)D0~D7:8 位数据输入线,TTL 电平,有效时间应大于 90ns(否则锁 存器的数据会出错);
5
哈尔滨工业大学(威海)课程设计报告
CS
VCC
WR1 ILE(BY1/BY2)
GND
WR2
DI3
XFER
DI2
DI4
DI1
DI5
DI0
DI6
VREF
DI7
RFB
IOUT2
GND
IOUT1
20 19 18 17 16 15 14 13 12 11
U3
A
DAC0832
B OP1P
基于51单片机的函数发生器和示波器

《智能仪器仪表设计基础》课程设计报告单位:自动化学院学生姓名:汪连升专业:测控技术与仪器班级: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运放把电流信号转换为电压信号。
基于51单片机的信号发生器-完整电路、程序.

摘要
本文以STC89C51单片机为核心设计了一个低频函数信号发生器。信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。波形和频率的改变通过软件控制,幅度的改变通过硬件实现。本文介绍了波形的生成原理、硬件电路和软件部分的设计原理。本系统可以产生最高频率798.6HZ的波形。该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。
2.1.2改变幅度方案:
将输出电压通过一个运算放大器的放大挺简单。
2.2工作原理
数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成系统框图如下图所示。
主程序流程图
3.2.2中断服务程序:
本程序中两个外部中断分别起到了控制波形和频率的作用。在程序中还加入了消抖部分。
4.软件仿真
4.1系统仿真波形:
5设计总结
基于单片机的信号发生器设计,这个信号发生器的设计中涉及到一个典型的控制过程。通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM324可以将其电流输出线性地转换成电压输出,再将电压经过运算放大器的放大,可以得到足够幅度的信号。通过程序的控制,可以产生一系列有规律的波形。这样一个信号发生装置在控制领域有相当广泛的应用范围。
基于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、对实验现象、数据及观察结果的分析与讨论:经过观察调试,再观察,再调试,最终输出的波形较为理想。
此次试验经过一系列的调试,最终输出的波形为正弦波、方波、三角波。
单片机MC51函数信号发生器

目录1.系统总体方案选择与说明.............. (1)2.系统结构框图与工作原理.............. . (1)3.各单元硬件设计说明及计法.............. .. (1)4.软件设计与说明(包括流程图).............. . (8)5.调试结果与必要的调试说明.............. . (14)6.使用说明.............. .............. .. (18)7.程序清单.............. .............. . (18)8.总结.............. .............. .. (34)9.参考文献.............. .............. .. (36)附录.............. .............. .. (36)附录A 系统原理图一、系统总体方案选择与说明为了实现低频信号的产生和频率以及移相角度的显示我们采用的用D/A数模转换电路进行波形的输出。
并通过数码管进行显示。
通过按键进行波形的选择以及频率和移相的调整。
二、系统结构框图与工作原理系统选用AT89S52作为CPU;波性选择及频率和移相角调整:通过按键来选择来产生中断0,以实现波形的选择,通过按键来产生中断1,实现频率和移相角度的选择,通过另外两键的是实现加减;数模转换及波形输出:通过DAC0832来实现模数转换,并通过两级运放实现双极性输出。
系统结构框图如图1所示图1 系统结构框图三、各单元硬件设计说明及计算方法1)主电路如图2所示图2 主电路2)功能键电路通过建S1来产生外部中断1(INT1),由中断1 的中断程序来记录按键的次数(CNT_EX1(0-2))。
不同键数代表的功能不一样。
相应的处理程序根据CNT_EX1,实现调频和移相。
通过S2键来产生外部中断0(INT0),由中断0 的中断程序来记录按键的次数(CNT_EX0(0-5))。
毕业设计--基于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单片机C语言代码

/**************************************//* 信号发生器(正弦波,方波,三角波)*/ /*************************************/#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit cs=P2^0;sbit clk=P2^1;sbit din=P2^2;sbit key1=P1^0;sbit key2=P1^1; uchar keydat;uchar flag;被置零立马停止发信号//tlc5615 片选端口//tlc5615 时钟线//tlc5615 传输端口//按键的单片机接口//波形发生终止信号的标志位一旦uchar m,num; uchar dat=0xff;uchar code tosin[141]={//正弦波的编码0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08, 0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16, 0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b, 0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45, 0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75, 0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e, 0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79, 0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69, 0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c, 0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30, 0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a, 0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a, 0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01, 0x00};uchar flagsqu; 中断控制)// 方波高低电平控制为 (运用定时器 1void delay(uchar z) //延时函数{uchar x,y;for(x=0;x<110;x++)for(y=z;y>0;y--);}void prepare() {cs=1;din=1;clk=0;cs=0; 为低时进? //tlc5615 的初始化//cs 的上升沿和下降沿必须在clk}/* 用中断来产生方波void Squtranslator(){TR1=1;的持续时间占空比//启动定时器 1 控制高低电平do{do{_wave=0;}while((!flagsqu) && flag==1);// 如果一旦终止信号的//产生可以立马退出循环flagsqu=0;do{_wave=1;}while((!flagsqu) && flag==1); flagsqu=0; }while(flag);flag=1;TR1=0;}*/void Squtranslator() //方波函数{uchar j;uchar dat1=0x7f;while(flag){do{}prepare();dat=dat1;for(j=0;j<12;j++) { din=(bit)(dat>>7);clk=1;dat=dat<<1; clk=0;}cs=1;为低时进行delay(200);if(dat1==0)dat1=0x7f;elsedat1=0;}while(flag);}//将数据的最高位赋给din//一位位的传输//cs 的上升沿和下降沿必须在//使高低电平持续一段时间//完成了0和0x7f 之间的替换clkvoid Tratranslator() //锯齿波的发生函数{uchar j;uchar dat1=0x7f;while(flag){do{prepare();dat=dat1;for(j=0;j<12;j++){din=(bit)(dat>>7);clk=1;dat=dat<<1;clk=0;}cs=1;为低时进行delay(2);dat1--;}while(flag && dat1);do{//将数据的最高位赋给din//一位位的传输//cs 的上升沿和下降沿必须在//稍加延时//一旦有终止信号就可以停止clk{uchar i,j;prepare(); dat=dat1; for(j=0;j<12;j++){din=(bit)(dat>>7); //将数据的最高位赋给 dindelay(2); dat1++;}while(flag && (!(dat1==0x7f)));}}void Sintranslator(uchar wave[],uchar num )//正弦波的转换函数clk=1; dat=dat<<1; clk=0;}cs=1;为低时进行//一位位的传输//cs 的上升沿和下降沿必须在clk//稍加延时uchar dat1;do{for(i=0;i<num;i++){prepare();dat1=wave[i]; //打开片选开始工作for(j=0;j<12;j++){din=(bit)(dat1>>7); //将数据的最高位赋给dinclk=1;dat1=dat1<<1; //一位位的传输clk=0;if(flag==0)break;}cs=1; //cs 的上升沿和下降沿必须在clk 为低时进行delay(1); //稍加延时if(flag==0)break;}}while(flag); //等待控制键的暂停}void keyscan() //切换功能按键返回键值函数{uchar i;for(i=0;i<4;i++){if(key1==0){delay(10);if(key1==0){keydat++;do{}while(!key1); //松手检测if(keydat==4)keydat=1;//加满回零处理}}}}void keycountrl() // 切断输出控制函数{if(key2==0){delay(10);{case 1:if(key2==0)flag=0;do{}while(!key2); //松手检测}}}void main (){uchar temp;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;while(1){do{switch(keydat)//确定定时器的工作方式 //给定时器 0 赋予初值 //开总中断 //开启定时器 0 中断flag=1;do{Sintranslator(tosin,141);}while(flag);break;case 2: flag=1;do{Tratranslator();}while(flag);break;case 3: flag=1;do{Squtranslator();}while(flag);break;default:break;}}while(flag);temp=keydat; // 装载键值while(keydat==temp); // 在这里等待键值的改变}}void Time0() interrupt 1{TH0=(65536-50000)/256; //定时器0 用来扫描按键不断地扫描dTL0=(65536-50000)%256;num++;if(num==4){keyscan();keycountrl();num=0;}}。
基于单片机的多功能信号发生器的源程序及电路图

程序源代码#include <REGX52.H>#include <lcd1602.H>#include <AD9833_Serial.H>void Delay1ms(WORD count);//软件延时函数void display_freq(void); //更新频率函数BYTE code Cursor[]={0xC3,0XC4,0XC6,0XC7,0XC8,0XCA,0XCB,0XCC,0x85};//换算光标位置unsigned int a; //控制长时间不操作隐藏光标unsigned char step=4;//移动光标bit flag=0;//控制光标闪烁unsigned long int code Data []={10000000,1000000,100000,10000,1000,100,10,1}; //换算加减值unsigned long int Freqency_Out=1000; //初始化频率输出值unsigned char Wave_Out=1;unsigned char data DY[3] = {0x00,0x00,0x00} ;unsigned char DA;unsigned long int XS;sbit KEY1 = P1^0;sbit KEY2 = P1^1;sbit KEY3 = P1^2;sbit KEY4 = P1^3;sbit KEY5 = P1^4;sbit KEY6 = P1^5;sbit BEEP = P3^7;sbit din = P3^4;sbit clk = P3^5;sbit cs = P3^6;/*us级延时函数*//*******************************************************************/void DelayuS(unsigned int num){while( --num ) ;}/* 软件延时1*m毫秒*/void Delay1ms(WORD count){BYTE i, j;for( ; count>0; count--)for(i=2; i>0; i--)for(j=248; j>0; j--);}void display_freq(void) //显示频率{unsigned char j;unsigned long int temp;temp=Freqency_Out;tab2[3]=temp/10000000+0x30;//tab2[4]=temp%10000000/1000000+0x30;tab2[6]=temp%10000000%1000000/100000+0x30;tab2[7]=temp%10000000%1000000%100000/10000+0x30;tab2[8]=temp%10000000%1000000%100000%10000/1000+0x30;tab2[10]=temp%10000000%1000000%100000%10000%1000/100+0x30;tab2[11]=temp%10000000%1000000%100000%10000%1000%100/10+0x30;tab2[12]=temp%10000000%1000000%100000%10000%1000%100%10+0x30;WriteLCD(0,0xC0);// 设置显示位置为第二行第一个字for(j=0; j<15; j++){WriteLCD(1,tab2[j]);}switch(Wave_Out){case 1:Load_wave(0x2000,Freqency_Out,0xD000);break;case 2:Load_wave(0x2002,Freqency_Out,0xD000);break;case 3:Load_wave(0x2028,Freqency_Out,0xD000);break;}}void display_Wave(void) //变换波形{unsigned char j;switch(Wave_Out){case 1:WriteLCD(0,0x80);Load_wave(0x2000,Freqency_Out,0xD000);for(j=0; j<10; j++){WriteLCD(1,tab1_1[j]);}break;case 2:WriteLCD(0,0x80);Load_wave(0x2002,Freqency_Out,0xD000);for(j=0; j<10; j++){WriteLCD(1,tab1_2[j]);}break;case 3:WriteLCD(0,0x80);Load_wave(0x2028,Freqency_Out,0xD000);for(j=0; j<10; j++){WriteLCD(1,tab1_3[j]);}break;}// 设置显示位置为第二行第一个字}void initTimer(void) //定时器初始化初值{TMOD=0x2; //方式二TH0=0x49; //200usTL0=0x49;}/*******************************************************************/ /* 蜂鸣器响一声*//*******************************************************************/ void beep(){unsigned char y ;for (y=0 ;y<100 ;y++){DelayuS(60) ;BEEP=!BEEP ; //BEEP取反}BEEP=1 ; //关闭蜂鸣器DelayuS(40000) ;}void TLC5615(DA){unsigned char y;DA<<=6; //舍弃前6 位for(y=0;y<12;y++) //从高到低发送{if((DA&0x8000)==0)din=0;else din=1;//din = x&0x8000; //此处不能用din = x&0x8000;cs=0;clk=1;;;;clk=0;DA = DA<<1;}cs=1;}/* 电压转换与显示*//*******************************************************************/Disp_dianya(){DY[2]=XS/100+0x30 ;DY[0]=XS%100 ;DY[1]=DY[0]/10+0x30 ;DY[0]=DY[0]%10+0x30 ;WriteLCD(0,0x8B);WriteLCD(1,DY[2]);//十位数显示WriteLCD(0,0x8D);WriteLCD(1,DY[1]);//个位数显示WriteLCD(0,0x8E);WriteLCD(1,DY[0]);//小数显示}void main(void) //主函数{unsigned char i;initTimer();//定时器初始化TR0=1;ET0=1;DA=175;//DA初始电压XS=5;//显示初始电压TLC5615(DA);LCD_Initial(); //液晶初始化WriteLCD(0,0x80);// 设置显示位置为第一行第一个字for(i=0; i<16; i++){WriteLCD(1,tab1_1[i]);}//每行16个字,且光标自动右移WriteLCD(0,0xC0);// 设置显示位置为第二行第一个字for(i=0; i<16; i++){WriteLCD(1,tab2[i]);} //每行16个字,且光标自动右移Disp_dianya();DDSIni();//初始化AD9833Load_wave(0x2000,Freqency_Out,0xD000);//1KHz正弦信号display_freq();EA=1; //开启总中断WriteLCD(0,Cursor[step]);// 设置显示位置为第二行第一个字while(1){if(KEY2==0)//Right 光标右移{Delay1ms(50);if(KEY2==0){if(a!=0)//在没有光标时,第一次按下向左,向右按键时,光标不移动,只是显示出光标,并闪烁{step++;if(step==9) step=0;}WriteLCD(0,0x0F); // 开显示,开光标,闪烁WriteLCD(0,Cursor[step]);//显示出当前光标的位置EA=1;a=0; //当有按键按下时,开启定时器,计时开始。
基于51单片机的信号发生器

基于51单片机的信号发生器[摘要] 信号发生器是一种常用的信号源,广泛的应用于电子电路,自动控制统和教学实验等领域。
目前使用的信号发生器大部分是利用分立元件组成的体积大,可靠性差,准确度低。
本系统以51单片机为控制核心,由电源模块、DAC转换模块和按键控制与显示模块构成,可以输出较为稳定的正弦波、方波、三角波、锯齿波等,按键模块是在单片机上加外围器件独立开关,通过开关控制波形的选择。
当波形进行选择时,通过一块显示屏来确认当前所选波形,方便查询。
DAC转换模块在单片机的输出端口接DAC0832进行DA转换,再通过运放进行波形调整,最后输出波形接在示波器上显示.该系统用C语言编写模块化程序,增强了可读性,以便于89C51对各模块的控制,实现各功能的设置。
本设计结构清晰简单,性能优越。
[关键词] 信号发生器;单片机;波形调整;Function Generator Design Based on 51 MCU[Abstract] Signal generator is a kind of common signal source,widely used in electronic circuits, automatic control system and the teaching experiment, etc. Currently use most of the signal generator is the use of discrete component of large volume, poor reliability and low accuracy.This system with 51 single-chip microcomputer as control core, by the power supply module, DAC conversion module and key control and display modules, which can output sine wave, square wave, triangle wave, sawtooth wave, etc., key modules on the single chip microcomputer and peripheral device independent switch, switch control waveform selection. When the waveform selection, through a screen to confirm the current selected waveform, convenient query. DAC conversion module in the MCU output port after DA conversion DAC0832,again through the op-amp waveform adjustment, the output waveform in the oscilloscope display. The system is modularized program written in C language, to enhance the readability, so that the 89 c51 control of the module,the realization of each function Settings.This design clear and simple in structure, superior performance.[Key Words] single-chip;waveform;signal generator;前言单片机的论述随着大规模集成电路技术的发展,中央处理器、随机存取存储器、只读存储器、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称单片机。
基于51单片机高频函数信号发生器

函数信号发生器设计报告参赛人员:朱秋王嘉文房开兰指导教师:漆晶二0 0 九年七月十四日摘要波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。
本函数发生器采用STC89C52 单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(uA741)、倍频电路(CD4046)、按键和LCD显示电路等。
电路采用STC89C52单片机和一片DAC0832数模转换器组成数字式低频信号发生器。
函数信号发生器,它具有价格低、性能高和在低频范围内稳定性好、操作方便、体积小、耗电少等特点。
由于采用了uA741运算放大器和滤波电路,使其电路更加具有较高的稳定性能,性能比高。
此电路清晰,出现故障容易查找错误,操作简单、方便。
通过按键控制可产生方波、三角波、正弦波,同时用LCD1602显示幅值和频率。
所产生的波形V P-P范围为0~5 V,由倍频电路使频率范围为100Hz~ 1MHz,波形准确并且平滑。
本系统设计简单、性能优良,具有一定的实用性。
关键词:单片机;倍频;调频;调幅;LCD1602AbstractWaveform generator is a common signal source, widely used in electronic circuits, automatic control systems and experiments in areas such as teaching .Function generator used as a control core STC89C52 single-chip, external digital / analog converter circuit (DAC0832),operational amplifier circuit (uA741), frequency-doubling circuit (CD4046), and buttons and LCD display circuit. STC89C52 circuit and a single-chip digital DAC0832 Digital to Analog component of low-frequency signal generator. Function signal generator, it has a low price, high-performance and low-frequency range of good stability, convenient operation, small size, low power consumption and so on. UA741 As a result of the operational amplifier and filter circuit to circuit with high stability and more performance, high performance. This circuit clears, easy to find failure error, simple and convenient.Keys can be generated through control of square wave, triangle wave, sine wave, LCD display at the same time with the amplitude and frequency. Waveform generated by VP-P range of 0 ~ 5 V, so that by the multiplier circuit for frequency range 92.592593Hz ~ 217.3913Hz, accurate and smooth waveform. The system is designed to be simple, excellent performance, with a certain degree of practicality.Key words:microcomputer; frequency; FM; AM; LCD1602目录一、系统方案 (5)1、1 信号发生部分 (5)1、2显示部分 (6)二、系统设计 (6)2、1 总体设计思路 (6)2、2总体框图 (6)三、硬件电路 (7)3、1单片机电路 (7)3、1、1 功能与基本原理 (7)3、1、2 资源分配 (8)3、2波形转换(D/A)电路 (8)3、3显示接口电路 (9)3、4倍频电路 (9)四、软件设计及流程 (10)五、调试与测试结果 (11)5、1 硬件调试 (11)5、2 软件调试 (11)六、结束语 (11)七、参考文献 (12)八、附录 (12)8、1 元件清单 (12)8、2 电路原理图 (13)8、3 程序清单 (14)一、系统方案题目要求实现的任务是设计并制作一个函数信号发生器,能产生正弦波,方波,三角波,要求不用DDS和专用的波形产生芯片,频率范围100Hz~1MHz,幅度0~5V,方波占空比可调,实时显示频率和幅度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的低频信号发生器设计曹晖 0945531215 电子信息工程二班摘要本文以STC89C51单片机为核心设计了一个低频函数信号发生器。
信号发生器采用数字波形合成技术,通过硬件电路和软件程序相结合,可输出自定义波形,如正弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的频率和幅度在一定范围内可任意改变。
波形和频率的改变通过软件控制,幅度的改变通过硬件实现。
本文介绍了波形的生成原理、硬件电路和软件部分的设计原理。
本系统可以产生最高频率798.6HZ的波形。
该信号发生器具有体积小、价格低、性能稳定、功能齐全的优点。
关键词:低频信号发生器;单片机;D /A转换;11.设计任务1.设计题目:基于51单片机的信号发生器的设计与实现2.任务与要求:设计一个由单片机控制的信号发生器。
运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。
信号发生器所产生的波形的频率、幅度均可调节。
并可通过软件任意改变信号的波形。
3.基本要求:1).产生三种以上波形。
如正弦波、三角波、矩形波等。
2).最大频率不低于500Hz。
并且频率可按一定规律调节,如周期按1T,2T,3T,4T 或1T,2T,4T,8T变化。
3).幅度可调,峰峰值在0——5V之间变化。
2.系统概述2.1设计方案2.1.1总体方案:采用AT89C51单片机和DAC0832数模转换器生成波形,加上一个低通滤波器,生成的波形比较纯净。
它的特点是可产生任意波形,频率容易调节,频率能达到设计的500HZ以上。
性能高,在低频范围内稳定性好、操作方便、体积小、耗电少。
既可满足基本要求又能充分发挥其优势,电路简单,易控制,性价比高,所以采用该方案.2.1.2改变幅度方案:将输出电压通过一个运算放大器的放大。
这样还有个优点是幅度连续可调。
既可满足基本要求,并且电路也挺简单。
2.2工作原理数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。
89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及、数模转换及波形输出、放大电路等部分,即可构成所需的波形发生器,其信号发生器构成如下图所示。
系统框图波形数模转换电路单片机按键电路表RO放大电电低通滤波形输出系统框图是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各89C51当数字并从键盘接收数据,进行各种功能的转换和信号幅度的调节。
样的信号,信号电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。
内。
RON64个点,储存在单片机得波形ROM表是将信号一个周期等间距地分离成生成的程序如下:MATLAB生成的,例如正弦表,MATLAB具体ROM表是通过x=0:2*pi/64:2*pi; y=round(sin(x)*127)+128单元电路设计与分析3单元电路设计3.1主控电路3.1.1)拥有完善的外(1型单片机,它具有如下优点:设计中主要采用STC89C51)该单片机(2部扩展总线,通过这些总线可方便地扩展外围单元、外围接口等。
数据存储空间,字节的RAMROM程序存储器空间和256内部拥有4K字节的FLASH 如果更改程序故可重复使用。
完全可以满足程序的要求。
由于该芯片可电擦写,型机的指令51MCS-(内容,可将芯片拿下重新烧写。
3)该单片机与工业标准的集和输出引脚兼容。
当中央处理中断系统是使处理器具有对外界异步事件的处理能力而设置的。
暂停当前的工作,要求CPU器CPU正在处理某件事的时候外界发生了紧急事件,转而去处理这个紧急事件。
的管脚相连,10和外部中断在波形发生器中,用两个开光直接与外部中断开光用来改变频率。
在程序主函数中,写了个死开光用来改变波形,S2其中S1按下又抬起时,程序会暂时跳出死或S1S2循环一直输出一个默认的波形,当循环,进入中断处理程序,从而对波形和频率进行改变。
时钟电路。
由于频率较大时,三角波、正弦波、方波等波中每一点延时时间3为几微秒,故延时时间还要加上指令时间即可得到指定频率的波形,该电路用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的负跳变时将输入数据锁存。
4数模转换电路3.1.3运算放大电路和低通滤波电路管脚6管脚相连,LM324的管脚与DAC0832的(IOUT2)12LM324的5)9REF (7管脚与DAC0832的的DAC0832与的(IOUT1)11管脚相连,LM324 管脚相连。
输出的电流信号转化为电压信号第一级运算放大器的作用是将DAC0832 R2/R1)倍。
通过反向放大电路-(V1V1,第二级运算放大器的作用是将选择R1的电压大约是5V,所以0-5V题目要求输出的电压在可调,而V1,最)=1010/5选择10K的电位器,这样最大的输出电压为5*(5K的电阻,R2 0-5V。
小电压为0,可以实现题目要求的在第二个运算放大器的输出端连了一个低通滤波器。
如果不加低通滤波器,加一个低通滤波器不仅起到的滤但是产生的信号中噪声很多,也能够生成波形,这F=1/(2*pi*R3*C6),波的作用,还起到了平滑的作用。
低通滤波器的截止频率。
实验表电容,截止频率F=16KHZ104C6100R3 里我们选择为欧姆电阻,为明,此时的输出波形效果不错。
5串口通信电路3.1.4是一种串行接口,一般微处理器中都包含这种外设接(UART)通用异步收发器口。
异步串行接口提供了一种简单的途径,使两个器件无需共享同一个时钟信号就RS232MAX232,串口就能能用在能进行通信。
如果再加入一个合适的电平转换器端口连接。
串口只需两根信号等网络中实现通信,或者与计算机的COM和RS485即可实现,而且只要两端器件都采用同样的位格式和波特率,那么它和TX)线(RX们无需其它任何对方的信息就可以成功传输数据。
串口通信电路图3.2系统软件设计软件设计上,根据功能分了几个模块编程。
模块主要有:主程序模块、外部中断0模块,外部中断1模块。
3.2.1主程序:主程序先是进行一些初始化的工作,然后根据波形标志a,b,c,d,e的值进入相应的while 循环。
这样写的好处是输出的波形频率可以790多HZ。
在while循环中,单片机根据地址标志位不停低查表,然后把查得的值赋给DAC0832的数据口,然后地址标志位加一,并判断地址标志位是否等于64,如果是就置0再往下执行,如果不是直接往下执行。
然后根据频率标志位进行相应的延时。
6开输出数字量数据DAC083初始地址标志位的值进入a,b,c,d,根循whil应地址标志位6否等循whil地址标志位根据地址标志位查相应延时(对应率)主程序流程图3.2.2中断服务程序:在程序中还加入了消本程序中两个外部中断分别起到了控制波形和频率的作用。
抖部分。
根据波形标志做0波形标志位置相应处理否是否有中断信波形标志位是是是0波形标志位加1外部中断号否等于5否根据频率标志做0频率标志位置相应处理否频率标志位是是否有中断信是是1外部中断频率标志位加18否等于号否74.软件仿真4.1系统仿真波形:85设计总结基于单片机的信号发生器设计,这个信号发生器的设计中涉及到一个典型的控制过程。
通过单片机控制一个模数转换器DAC0832产生所需要的电流,然后使用运算放大器LM324可以将其电流输出线性地转换成电压输出,再将电压经过运算放大器的放大,可以得到足够幅度的信号。
通过程序的控制,可以产生一系列有规律的波形。
这样一个信号发生装置在控制领域有相当广泛的应用范围。
最终做出来的信号发生器满足了题目中的所有要求:1.产生五种波形。
正弦波、三角波、矩形波、梯形波,锯齿波。
2.最大频率为798.6HZ。
并且频率可按按1T,2T,3T,4T,5T,6T,7T,8T变化。
3.幅度可调,峰峰值在0——5V之间变化。
当然还是存在不足的地方,比如不能实现频率的按一个小的步进调整。
并且当频率太小时矩形波会有些失真。
参考文献:[1] 郭天翔.新概念51单片机C语言教程入门、提高、开发、拓展全.北京.电子工业出版社2009.1[2] 童诗白.模拟电路技术基础[M].北京:高等教育出版社,2000.171~202. 9总电路图10附录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,230,22 2,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,114,12 8};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,255,25 5,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,121,12 5,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,235,23 9,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,2 47,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,21,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,4 8,40,32,24,16,8,0};void delay1()11{ p=0;int a,b; switch(p)for(a=1;a>0;a--) {for(b=122;b>0;b--); case 1 :}pinglv=3;void int0() interrupt 0 break;{ case 2 :EX0=0; pinglv=6;delay1(); break;case 3 : if(s1==0){pinglv=9; bxxz++;break; if(bxxz==5)bxxz=0; case 4 :switch(bxxz) pinglv=12;{ break;case 0 : case 5 :pinglv=15; {a=1,b=0,c=0,d=0,e=0;} break; break;case 6 : case 1 :{a=0,b=1,c=0,d=0,e=0;} pinglv=18;break; break;case 2 : case 7 :{a=1,b=0,c=1,d=0,e=0;} pinglv=21;break; break;default : case 3 :pinglv=0; {a=0,b=0,c=0,d=1,e=0;} break; break;} case 4 :delay1(); {a=0,b=0,c=0,d=0,e=1;}while(!s2); break;} }delay1(); while(!s2);EX1=1; while(!s1);}}void main() while(!s1);{ EX0=1;csda=0; }wr=0; void int1() interrupt 2EA=1; {IT0=1; EX1=0;EX0=1; delay1();IT1=1; if(s2==0){EX1=1; p++;while(1)if(p==8)12{ P0=sanjiao[k];k++; while(a)if(k==64) {k=0;delay=pinglv;while(delay) P0=sin[k]; delay--; 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;13。