1 A/D与D/A
将模拟量转换为数字量称为模数转换(A/D转换),模拟量是连续的,比如电压、电流等,可以连续变化的量;数字量是离散的,对应于计算机中的位,每一个位只能是0或1,是不存在中间状态的。通过模数转换原件将模拟量转化为数字量输入计算机,以便计算机进行计算、存储等(这里说的计算机指具有cpu芯片的计算系统)。
模数转换中运用到了微分思想。如下图所示:
将连续的信号转换成一系列接近的离散的值,分割的越窄,就能表现得越精确。
数模转换(D/A转换)与模数转换的效果相反,是输入控制的数字量,经过D/A转换器输出模拟量。
2 电路与元器件
80C51芯片是intel公司开发的MCS-51系列单片机中的经典的一种。
DAC0832是D/A转换芯片,是专门用于数模转换的的芯片。
电路图如图:
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单片机】点阵LED的显示实验
下一篇:【51单片机】七段数码管和矩阵键盘的综合实验——计算器
推荐阅读最新更新时间:2024-11-11 18:22
设计资源 培训 开发板 精华推荐
- 用于 CRT 显示器的 15W、5V DC 至 DC 单路输出电源
- LTC2256-12 演示板,12 位 25Msps ADC,LVDS 输出,5-170MHz
- CH55x系列简易下载器
- LTC4214 负电压热插拔控制器的典型应用
- ADA4841-2YCPZ-RL 低功耗、低噪声运算放大器的典型应用电路,用于两极 500kHz 重构滤波器原理图
- TA7280P双极线性集成电路硅单片典型应用
- LTC3855EUJ 演示板,双路输出,VIN = 4.5V 至 25V,VOUT1 = 3.3V @ 5A,VOUT2 = 2.5V @ 5A
- NCV4279B 5V 微功率 150mA LDO 线性稳压器的典型应用,具有延迟、可调复位和监控标志
- FRDM-K64F: 面向Kinetis® K64、K63和K24 MCU的Freedom开发平台
- 【CW32】基于CW32无刷电机控制系统