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

  • 1 A/D与D/A
  • 2 电路与元器件
  • 3 源代码
    • 3.1 程序开始
    • 3.2 监视按钮操作
    • 3.3 按钮控制显示波形
    • 3.4 方波产生的方法
    • 3.5 锯齿波产生的方法
    • 3.6 三角波产生的方法
    • 3.7 程序结束
  • 4 效果
    • 4.1 方波
    • 4.2 锯齿波
    • 4.3 三角波
  • 5 参考资料

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   0000hjmp   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,#0FFhmov p1,A;//给p1口送高电平,按键按下为低电平call watchKeyjmp 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制作信号发生器(方波,三角波,锯齿波)相关推荐

  1. 【Proteus仿真】【51单片机】简易信号发生器设计

    文章目录 一.主要功能 二.使用方法 三.硬件资源 四.软件设计 1.主要代码 五.实验现象 联系作者 一.主要功能 1.可生成常用波形,方波.锯齿波.三角波.阶梯波.正玄波: 2.可通过按键切换不同 ...

  2. 编写51单片机程序,输出方波,at89s52的单片机

    编写51单片机程序,输出方波. 要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = 5kHz.P1.0 ...

  3. 【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

    [Proteus仿真]51单片机+DAC0832+LM358放大电路波形发生器 Proteus仿真 主程序代码 #include<reg52.h> //包含头文件 #include< ...

  4. 51单片机+ESP8266制作的门锁,含电路图、制板文件。支持密码、人脸、语音。

    51单片机+ESP8266制作的门锁,含电路图.制板文件.支持密码.人脸.语音. 硬件部分 软件部分 功能 第三方API.SDK 原理图 主要代码 程序执行流程 硬件部分 Esp-8266-01S(3 ...

  5. 基于51单片机的函数信号发生器

    函数信号发生器和函数信号识别器是一直想做的两个项目,但是一直苦于没时间才做的拖拖拉拉. 这一次的项目是个第一版项目,总共可以产生四种波形,分别为方波.三角波.锯齿波及梯形波.每种波形可以通过按键改变占 ...

  6. 占空比输出程序c语言,关于51单片机输出频率和占空比可调的PWM波程序问题

    //------------------------------------------------------------------------------------ //程序功能简介:本程序产 ...

  7. 电子时钟单片机c语言程序,一款51单片机电子钟制作(C语言)

    //主程序/ void main()//主程序开始 { chushi();//初始化 while(1)//大循环 { if(g!=1)//如果g不等于1,就执行下一句,否则跳过下一句 disy(fen ...

  8. 基于stm32单片机的四种波形发生器正弦波、方波、三角波、锯齿波

    基于stm32单片机的四种波形发生器(源程序+仿真+设计报告)全套资料 资料编号:010 具体功能: (1) 可以实现四种波形:正弦波.方波.三角波.锯齿波: (2) 通过按键进行选择,频率可以调整: ...

  9. 用51单片机做信号发生器,同时输出四种频率的方波

    //编写51单片机程序,输出方波. //要求:晶振为12MHz,用T0做定时器,在P1的低四位输出四种频率的方波: //    P1.3 = 1.25kHz.P1.2 = 2.5kHz.P1.1 = ...

最新文章

  1. AIX系统Memory性能评估
  2. 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式
  3. VS中的路径宏:OutDir、ProjectDir、SolutionDir等各种路径的说明
  4. 创新视角下的复盘 | 2021/08/01-2021/09/30
  5. jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用
  6. 【需求对接】ATR“春雨”博士后联合基金指南
  7. 北大青鸟的班主任好当吗_北大青鸟学校怎么样靠谱吗?
  8. 1016day3:city查询系统json模块、餐厅点菜系统、点餐系统(class类)
  9. 西门子g120变频器接线图_西门子G120变频器怎么样?好用吗?
  10. MyBatis官网下载步骤
  11. 大型项目前端架构浅谈(8000字原创首发)
  12. 卷积神经网络(conv2d参数含义、卷积层、池化层)
  13. DirectUI界面编程(零)简介
  14. SEAY代码审计系统源码
  15. XP 小技巧( 隐藏文件、mp3转换WMA )
  16. mysql DISTINCT去重,返回去重后的所有字段
  17. 如何彻底卸载ArcGis
  18. 红旗linux修改时间,RedFlag官方公布红旗Linux V11版最早的下载体验时间
  19. 微博开放平台应用构想:互粉率应用
  20. Fallen Art 堕落的艺术

热门文章

  1. 智慧医疗助力健康养老服务
  2. 交叉编译sysstat
  3. 考虑不周和指针越界1156: 单数变复数
  4. 【敬伟ps教程】蒙版和通道的基础知识
  5. CTF—Python爬虫-WEB目录爆破和指纹识别
  6. SpringBoot + laypage分页 + 模糊查询
  7. Tp5 前后端分离 模糊查询
  8. Redis 通用命令(keys,help,mset,exists,expire,ttl,tab补全)
  9. 玛拉工艺计算机科学博士申请,顾老师助力新鲜出炉马来西亚玛拉工艺大学博士一枚!...
  10. 宝塔面板使用WWW用户执行计划任务命令 解决laravel日志权限问题 宝塔设置计划任务执行用户