DAC0832:DAC0832是8位全MOS中速D/A 转换器,采用R—2RT 形电阻解码网络,转换结果为一对差动电流输出,转换时间大约为1us。使用单电源+5V―+15V 供电。参考电压为-10V-+10V。在此我们直接选择+5V 作为参考电压。DAC0832 有三种工作方式:直通方式,单缓冲方式,双缓冲方式;在此我们选择直通的工作方式,将XFER WR2 CS 管脚全部接数字地。管脚8 接参考电压,在此我们接的参考电压是+5V。我们在控制P0口输出数据有规律的变化将可以产生三角波,锯齿波,梯型波等波形了。
DAC0832与单片机实验板的连接电路图:

源代码:

1
#include<reg51.H>
2
//读取通过DAC0832将数字量转换成模拟量,并驱动二极管D12由亮渐变成暗地循环变化
3
//而数码管显示当前转换的数值
4
sbitwela=P2^7;//数码管位选
5
sbitdula=P2^6;//数码管段选
6
sbitdawr=P3^6;//DA写
7
sbitdacs=P3^2;//DA片选
8
9
unsignedcharj,k;
10
//延时函数,例i=10,则大概延时10ms.
11
voiddelay(unsignedchari)
12
{
13
for(j=i;j>0;j--)
14
{
15
for(k=125;k>0;k--);
16
}
17
}
18
19
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
20
0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F数码管的编码(共阴极)
21
22
unsignedcharcount;
23
unsignedchardatas[]={0,0,0};
24
voiddisplay(unsignedcharvalue)
25
{
26
datas[0]=value/100;
27
datas[1]=value%100/10;
28
datas[2]=value%10;
29
for(count=0;count<3;count++)
30
{
31
//片选
32
wela=0;
33
P0=((0xfe<<count)|(0xfe>>(8-count)));//选择第(count+1)个数码管
34
wela=1;//打开锁存,给它一个下降沿量
35
wela=0;
36
//段选
37
dula=0;
38
P0=table[datas[count]];//显示数字
39
dula=1;//打开锁存,给它一个下降沿量
40
dula=0;
41
delay(5);//延时5ms,即亮5ms
42
43
//清除段先,让数码管灭,去除对下一位的影响,去掉高位对低位重影
44
//若想知道影响效果如何,可自行去掉此段代码
45
//因为数码管是共阴极的,所有灭的代码为:00H
46
dula=0;
47
P0=0x00;//显示数字
48
dula=1;//打开锁存,给它一个下降沿量
49
dula=0;
50
}
51
}
52
53
unsignedcharv,icount;
54
voidmain()
55
{
56
wela=0;//关闭数码管
57
dula=0;
58
dacs=0;//打开DA片选
59
v=255;
60
while(1)
61
{
62
dawr=0;//向DA写数据
63
P0=v;
64
dawr=1;//关闭DA写
65
for(icount=0;icount<10;icount++)
66
{
67
display(v);
68
}
69
v--;
70
}
71
}