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