【51单片机】DAC0832制作信号发生器(方波,三角波,锯齿波)

发布者:CaptivatingGaze最新更新时间:2024-04-07 来源: elecfans关键字:51单片机  DAC0832  信号发生器 手机看文章 扫描二维码
随时随地手机看文章

1 A/D与D/A

将模拟量转换为数字量称为模数转换(A/D转换),模拟量是连续的,比如电压、电流等,可以连续变化的量;数字量是离散的,对应于计算机中的位,每一个位只能是0或1,是不存在中间状态的。通过模数转换原件将模拟量转化为数字量输入计算机,以便计算机进行计算、存储等(这里说的计算机指具有cpu芯片的计算系统)。

模数转换中运用到了微分思想。如下图所示:
请添加图片描述

将连续的信号转换成一系列接近的离散的值,分割的越窄,就能表现得越精确。

数模转换(D/A转换)与模数转换的效果相反,是输入控制的数字量,经过D/A转换器输出模拟量。

2 电路与元器件

  1. 80C51芯片是intel公司开发的MCS-51系列单片机中的经典的一种。

  2. DAC0832是D/A转换芯片,是专门用于数模转换的的芯片。

  3. 电路图如图:

请添加图片描述

3 源代码

3.1 程序开始

org   0000h

      jmp   Start

;====================================================================

; CODE SEGMENT

;====================================================================

      org   0100h

3.2 监视按钮操作

watchKey:;//监控按钮的操作

      jnb p1.0,squareWave;//p1.0口,方波

      jnb p1.1,sawtoothWave;//p1.1口,锯齿波

      jnb p1.2,triangleWave;//p1.2口,三角波

      ret

根据电路图,三个按钮接地,即按钮按下会产生低电平,所以检测三个口接受到的信号,出现低电平时跳转到波形的发生函数部分。


3.3 按钮控制显示波形

Start:

      mov A,#0FFh

      mov p1,A;//给p1口送高电平,按键按下为低电平

      call watchKey

      jmp start;

先给p1端口送高电平,然后调用按钮监控函数,没有键按下则一直在Start部分循环。


3.4 方波产生的方法

方波信号是有一段时间输出稳定的高电平,一段时间输出稳定的低电平。要实现这个功能,需要保持端口的输出值稳定,并启用延时或循环。


squareWave:

      mov R0,#0FFh;//存电位初值

      mov R1,#0F0h;//存高电平循环次数

      mov R2,#40h;//存低电平循环次数。调整R1和R2可以调整占空比

positive:

      mov A,R0;//取电位值

      mov p3,A;//输出数据电位,DA输出模拟电位

      call watchKey;//监控按钮的动作(可以用开中断代替),下同

      djnz R1,positive;//剩余的循环次数不为零,继续输出高电平,剩余循环次数为零则进入低电平

      mov R0,#00h;//存低电平

negative:

      mov A,R0;

      mov p3,A;

      call watchKey;

      djnz R2,negative;//循判断循环结束,往下执行。

      jmp squareWave;//进行下一周期

这里没有用延时,而是用循环代替,二者的区别在于延时中不会监控按钮动作,循环时每一次循环都会监控按钮。当延时短时二者效果没有太大区别,所以这里用那种都可以。


3.5 锯齿波产生的方法

锯齿波是在一个周期内逐渐增大,在下一周期开始时又会跳回零点。代码实现如下:


sawtoothWave:

      mov R0,#00h;//初值

      mov R1,#80h;//上升沿循环次数

sawup:

      mov A,R0;

      mov p3,A;

      inc A;//每次增加1,在下一次循环输出,出现逐渐增大的效果。

      mov R0,A;

      call watchKey;

      cjne R0,#0FFh,sawup;//循环未结束则继续增加,结束则跳回低电平

      jmp sawtoothWave;//下一周期

3.6 三角波产生的方法

三角波的一个周期分为上升沿和下降沿,都是线性变化的,可以利用锯齿波的方法做一个上升沿和一个下降沿。


triangleWave:

      mov R0,#00h;//初值

      mov R1,#80h;//上升沿循环次数,反映为上升沿宽度

      mov R2,#80h;//下降沿循环次数,反映为下降沿宽度

up:;//上升沿

      mov A,R0;

      mov p3,A;

      inc A;

      mov R0,A;

      call watchKey;

      cjne R0,#80h,up;

down:;//下降沿

      mov A,R0;

      mov p3,A;

      dec A;

      mov R0,A;

      call watchKey;

      cjne R0,#00h,down;

      jmp triangleWave;  

3.7 程序结束

Loop:

      jmp Loop

;====================================================================

      END

4 效果

4.1 方波

请添加图片描述

4.2 锯齿波

请添加图片描述

4.3 三角波

请添加图片描述

5 参考资料

[1] 80c51_百度百科 (baidu.com)

[2] DAC0832_百度百科 (baidu.com)

[3] 51单片机汇编指令集_宇宙379的博客-CSDN博客_51单片机指令集

[4] 【51单片机】矩阵键盘逐行扫描法仿真实验+超详细Proteus仿真和Keil操作步骤_cumt等等的博客-CSDN博客_矩阵键盘键码扫描程序设计实验


关键字:51单片机  DAC0832  信号发生器 引用地址:【51单片机】DAC0832制作信号发生器(方波,三角波,锯齿波)

上一篇:【51单片机】点阵LED的显示实验
下一篇:【51单片机】七段数码管和矩阵键盘的综合实验——计算器

推荐阅读最新更新时间:2024-11-11 18:22

MCS-51单片机,编程序,计算分段函数的函数值
MCS-51单片机,简单的一个汇编语言程序,计算分段函数的函数值。 已知25H单元中有一个变量X,要求编制程序,按下列函数关系式计算变量Y的值,并将Y的值送到31H、30H单元中。 X*X X 6 Y = 3X-5 2 =X =6 2X+1 X 2 ================================================= 最佳答案: 说明:为了便于网友进行功能测试,所以在下列程序中,比网页上的答案增加了一个测试用的程序段和一些注释。 org 0000H mov 25H, #7 ;这里的数字,可以写 0~255,进行全面调试 call fen_zhi ;调用子程序
[单片机]
8051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED
1 原理图 以点亮单片机P2.2端口的LED为例: 从图中不难看出,LED的右边是通过电阻接到VCC,如果要点亮LED就得把LED左边的端口进行拉低,根据二极管的单向导电性,LED正向导通从而LED发光。 2 代码 main.c文件的代码: #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 sbit led=P2^2; //将单片机的P2.2端口定义为led /******************************************************************************* * 函 数 名 : main * 函数功能 :
[单片机]
80<font color='red'>51单片机</font>实战分析(以STC89C52RC为例) | 01 - 点亮一个LED
基于51单片机设计的家庭防盗报警系统
  从实际出发,设计一种家庭用、与电话线连接、操作简单、工作稳定可靠的远程智能防盗报警装置。 当人们外出时,往往希望实施自动监测报警以使家庭财产免受损失。针对这一需求,研制出了一系列自动报警系统,如门磁式、触摸式和红外线监测自动报警系统等。本文将介绍的远程智能防盗报警装置,可同时监视多个重要点(如门、窗等),发现盗情及时拨叫号码,并能利用普通电话线进行告警信号呼叫,其性能稳定可靠,实用性、适用性强,且具有较高的灵活性。 基本工作原理 如图1所示,远程智能防盗报警装置由信号检测电路、复位电路、电话号码输入电路、89C51单片机、语音电路、模拟摘机挂机电路、DTMF编码发送电路、铃流信号检测电路和忙音信号检测电路等构成。 DTM
[单片机]
基于<font color='red'>51单片机</font>设计的家庭防盗报警系统
51单片机如何模拟串口之计数法
简介:51的计数器在每指令周期加1,直到溢出,同时硬件置溢出标志位。这样我们就可以通过预置初值的方法让机器每96个指令周期产生一次溢出,程序不断的查询溢出标志来决定是否发送或接收下一位。 计数法 分 析: 51的计数器在每指令周期加1,直到溢出,同时硬件置溢出标志位。这样我们就可以通过预置初值的方法让机器每96个指令周期产生一次溢出,程序不断的查询溢出标志来决定是否发送或接收下一位。 接收的程序,可以参考下一种方法,不再写出。这种办法个人感觉不错,接收和发送都很准确,另外不需要计算每条语句的指令周期数。 view plaincopy to clipboardprint? //计数器初始化 void S2INI(voi
[单片机]
Proteus仿真51单片机C语言-单片机向主机发送字符串
简介:单片机向主机发送字符串:单片机按一定的时间间隔向主机发送字符串,发送内容在虚拟终端显示。
[单片机]
Proteus仿真<font color='red'>51单片机</font>C语言-单片机向主机发送字符串
51单片机系列连载12-串行总线
今天介绍I2C串行总线,相比较之前的一些内容,这个相对难理解一些。常用的串行总线有很多,现只简单地说一下I2C总线。 I2C总线总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。 I2C总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。 I2C总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线 与 关系。 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为
[单片机]
51单片机中断系统详解(定时器、计数器)
51单片机中断级别 中断源 默认中断级别 序号(C语言用) INT0---外部中断0 最高 0 T0---定时器/计数器0中断 第2 1 INT1---外部中断1 第3 2 T1----定时器/计数器1中断 第4 3 TX/RX---串行口中断 第5 4 T2---定时器/计数器2中断 最低 5 中断允许寄存器IE 位序号 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 符号位 EA ------- ET2 ES ET1 EX1 ET0 EX0 EA---全局中允许位。 EA=1,打开全局中断控制,在此条件下,由
[单片机]
基于AT89C2051单片机的电子导游系统
   引 言   随着生活水平的提高,越来越多的人把旅游当成了一种时尚的消费方式,而有些问题也随之产生,如导游人员的缺乏及其素质不高,加之大批喜欢独立自由的旅游者的出现,这些促使了电子导游系统的产生。电子导游系统发展有个过程,最开始时是一种半自动化系统,功能是把景点信息以语音文件格式存储在导游机里,一般通过键盘直接键入景点代码,选择播放。这种类型的导游机,缺点是要输入景点代码,很不方便。发展到现在,出现了全自动化的导游机,它在景点先安放无线发射模块,这些发射模块可以控制工作范围,这样在各个景点就有不同的编码信号。游客到达景点后,游客手上的导游机会自动接收编码信号,经过解码后,由控制中心控制语音播放即可。本文介绍了这一全自动化导游
[单片机]
基于AT89C20<font color='red'>51单片机</font>的电子导游系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved