【单片机】D/A转换实验

一、操作目的

  • (1)了解D/A转换与单片机的接口方法;
  • (2)了解D/A转换芯片0832的性能及编程方法;
  • (3)了解单片机系统中扩展D/A转换芯片的基本方法;

二、操作内容

利用0832输出一个从0V开始逐渐升至5V再降至0V的可变电压。循环输出方波、三角波、锯齿波

三、接线图

在这里插入图片描述

四、程序清单

ORG 0000H
	LJMP SE13
	ORG 05E0H
SE13:
	MOV SP,#53H
	mov p2,#0ffh
	MOV A,#81H
	MOV DPTR,#0FF23H
	MOVX @DPTR,A
	MOV 7EH,#00H
	MOV 7DH,#08H
	MOV 7CH,#03H
	MOV 7BH,#02H                   ;显示缓冲区初值
LO20:
	MOV R6,#00H
LO21:
	MOV DPTR,#0FF80H
	MOV A,R6
	MOVX @DPTR,A                   ;送0832转换
	MOV R0,#79H
	LCALL PTDS
	LCALL SSEE                     ;显示
	MOV R2,#08H
	LCALL DELYA                    ;延时
	INC R6                         ;加1
	CJNE R6,#0FFH,LO21             ;不到FF继续加
LO22:
	MOV DPTR,#0FF80H
	DEC R6
	MOV A,R6                       ;减1送0832转换
	MOVX @DPTR,A
	MOV R0,#79H
	LCALL PTDS
	LCALL SSEE                     ;显示
	MOV R2,#08H
	LCALL DELYA                    ;延时
	CJNE R6,#00H,LO22              ;不为0继续减
	SJMP LO20                      ;循环
	;ORG 0620H
PTDS:
	MOV R1,A                       ;拆送显示缓冲区
	LCALL PTDS1
	MOV A,R1
	SWAP A
PTDS1:
    ANL A,#0FH
	MOV @R0,A
	INC R0
	RET
	ORG 0D50H
SSEE:
	SETB RS1                        ;换工作区
	MOV R5,#05H
SSE2:
	MOV 30H,#20H
	MOV 31H,#7EH
	MOV R7,#06H
SSE1:
	MOV R1,#20H
	MOV A,30H
	CPL A
	MOVX @R1,A                       ;字位送入
	MOV R0,31H
	MOV A,@R0
	MOV DPTR,#DDFF
	MOVC A,@A+DPTR                   ;取字形代码
	MOV R1,#21H
	MOVX @R1,A                       ;字形送入
	MOV A,30H
	RR A                             ;右移
	MOV 30H,A
	DEC 31H
	MOV A,#0FFH
	MOVX @R1,A                        ;关显示
	DJNZ R7,SSE1                      ;六位显示完了吗?
	DJNZ R5,SSE2                      ;五次显示完了吗?
	CLR RS1
	RET
DDFF:
	DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
	DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
DELYA: 
	PUSH 02H
DELYB:
 	PUSH 02H
DELYC:
 	PUSH 02H
DELYD:
 	DJNZ R2,DELYD
	LCALL SSEE                    ;调显示子程序
	POP 02H
	DJNZ R2,DELYC
	POP 02H
	DJNZ R2,DELYB
	POP 02H
	DJNZ R2,DELYA                 ;延时
	RET
	END

五、代码详解

/**********************************************************************************/
//设DAC0832的地址为OxFF80
#include <absacc.h>
#define uchar unsigned char
#define DAC0832 XBYTE[0xFF80]

void delay(void)
{
	uchar i;
	for (i = 0; i < 0xFF; i++)
	{
		;
	}
}

void main()
{
	uchar i;
	uchar n = 1000;
	while (1)
	{
		while (n > 0)
		{
			///锯齿波
			for (i = 0; i < 0xFF; i++)
			{
				DAC0832 = i;
			}
			n--;
		}
		n = 1000;
		while (n > 0)
		{
			///三角波
			for (i = 0; i < 0xFF; i++)
			{
				DAC0832 = i;
			}
			for (i = 0xFF; i > 0; i--)
			{
				DAC0832 = i;
			}
			n--;
		}
		n = 1000;
		while (n > 0)
		{
			///方波
			DAC0832 = 0;
			delay();
			DAC0832 = 0xFF;
			delay();
			n--;
		}
		n = 1000;
	}
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码两年半的练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值