【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单片机】七段数码管和矩阵键盘的综合实验——计算器

推荐阅读最新更新时间:2026-03-24 18:18

51单片机DAC0832制作信号发生器(方波,三角波,锯齿波)
1 A/D与D/A 将模拟量转换为数字量称为模数转换(A/D转换),模拟量是连续的,比如电压、电流等,可以连续变化的量;数字量是离散的,对应于计算机中的位,每一个位只能是0或1,是不存在中间状态的。通过模数转换原件将模拟量转化为数字量输入计算机,以便计算机进行计算、存储等(这里说的计算机指具有cpu芯片的计算系统)。 模数转换中运用到了微分思想。如下图所示: 将连续的信号转换成一系列接近的离散的值,分割的越窄,就能表现得越精确。 数模转换(D/A转换)与模数转换的效果相反,是输入控制的数字量,经过D/A转换器输出模拟量。 2 电路与元器件 80C51芯片是intel公司开发的MCS-51系列单片机中的经典的一种。 DAC0
[单片机]
【<font color='red'>51单片机</font>】<font color='red'>DAC0832</font>制作<font color='red'>信号发生器</font>(方波,三角波,锯齿波)
通过DAC0832实现信号发生器设计
根据下图连接,通过DAC0832实现正弦波信号发生器设 1. 正确连接电路 2、只能显示非正弦波等其他波形(10分) 3、正确显示正弦波波形(20分) 4、正确完整的程序代码(10分) #include reg52.h unsigned char zheng ={0,23,84,159,228,255,230,172,89,26,}; unsigned int k=0; delay() { unsigned int i; for(i=0;i 50;i++); } main() { while(1) { P1=zheng ,k++; if(k==11){k=0;}delay(
[测试测量]
通过<font color='red'>DAC0832</font>实现<font color='red'>信号发生器</font>设计
51单片机使用DAC0832编程输出方波,锯齿波,三角波,正弦波
#include reg51.h #include math.h #define uchar unsigned char #define uint unsigned int #define PI 3.1415925 float alph; void delayms(uint x) { uchar i; while(x--); { for(i=0;i 123;i++); } } main() { uchar i; while(1) { for(alph=0;alph 2*PI;alph+=0.1) { P2=1
[单片机]
<font color='red'>51单片机</font>使用<font color='red'>DAC0832</font>编程输出方波,锯齿波,三角波,正弦波
51单片机DAC0832—06—①
DAC0832~相信大家都不陌生,想整理整理这个,三种方法吗~~所以这个也得两三篇吧~~慢慢来~~ 这一篇还是比较简单的介绍,不过也有注意的~~ 1、DAC0832的简介 1)DAC0832的引脚 当然第一就得是引脚,由于网上的这个东西比较多,那我就粘贴了~~ 2)DAC0832的内部结构(这个对于理解1还是很重要的~~ ,呵呵,这个应该放在1处) 这里一定注意了: 8位输入寄存器用于存放CPU送来的数字量,使得输入的数字量得到缓冲和锁存,由/LE1来控制。 8位DAC寄存器用于存放待转换的数字量,由/LE2控制 都是低电平有效啊~~ (当他们所对应的引脚都有效的时候,它们俩是高电平~~
[单片机]
<font color='red'>51单片机</font>—<font color='red'>DAC0832</font>—06—①
51单片机的函数信号发生器设计
设计要求 1. 以MCS-51系列单片机为控制器件,用C语言进行程序开发,结合外围电子电路,设计一款函数信号发生器系统; 2. 能够产生正弦波、方波、三角波和锯齿波4种波形; 3. 扩展键盘输入电路,用于切换波形类型、设定频率大小和步进值; 4. LCD1602显示电路实时显示当前波形类型、频率值等信息; 5. 波形频率值调节范围:10~100Hz; 6. 频率步进值调节范围:0.1~10Hz; 系统概述 本文基于51单片机设计的函数信号发生器系统,能够产生正弦波、方波、三角波和锯齿波4种波形,且波形频率可调,调节幅度为10~100Hz。 系统由5V供电模块、AT89C51单片机最小系统、DAC0832模数转换电路、LM358放大
[单片机]
基于51单片机的三角波信号发生器设计
一、任务要求: 设计内容 选择51单片机,晶振采用12MHz。 设计一个能产生50HZ至100HZ的三角波信号。通过0832/A芯片完成数模转换。 频率值由LED数码管键盘输入。 将频率由LED数码管显示(4位) 设计要求 按照任务书的要求完成系统分析及方案设计。 完成硬件原理图的设计,并设计相关元器件。 完成控制软件流程图的设计,编写相应的单片机控制程序。 撰写设计报告。 二、仿真过程展示 程序烧录仿真界面: K1第一次按下界面 按3次K1后界面 K2、K3可对波形频率进行调整;K4、K5可对占空比进行调整。 频率的值是可以通过这里改的
[单片机]
基于FPGA和51单片机信号发生器设计
信号发生器又称为波形发生器是一种常用的信号源并且广泛应用于电子电路、通信、控制和教学实验等领域的重要仪器之一。为了降低传统函数信号发生器成本,改善信号发生器低频稳定性。笔者结合FPGA和51单片机产生0.596 Hz频率精度函数信号。笔者设计通过51单片机控制函数信号类型以及相关参数,用户可通过按键设置需要的波形、波形幅度、波形频率以及方波的占空比、相位。本文设计方案不仅具有良好的经济前景,也可以为当代高等教育深化改革做一个参考方向。 1 系统设计方案 1.1 系统硬件设计 本文中设计中硬件包括EP2C8Q20818N芯片和C8051F0201单片机、DAC0800芯片,T6963的LCD。本文中主要利用FPGA(EP
[单片机]
基于FPGA和<font color='red'>51单片机</font>的<font color='red'>信号发生器</font>设计
51单片机信号发生器实例编程
//用51单片机做信号发生器,同时输出四种频率的方波。 //要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: // P1.3 = 1.25kHz、P1.2 = 2.5kHz、P1.1 = 5kHz、P1.0 = 10kHz //另外,上述四个频率要求用一个四选一数据选择器,再选出其中的一个输出出去。 //P1.6、P1.7的输出用来控制四选一数据选择器的选择位,它们由P3.0按键控制。 //=================================================== //现在增加了PROTEUS仿真图片发上博客。 //题目要求在相邻四条接口线输出的四种频率,恰有二倍的关系,这就
[单片机]
<font color='red'>51单片机</font>做<font color='red'>信号发生器</font>实例编程
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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