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