微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机练习 - DA数模转换DAC0832的应用

单片机练习 - DA数模转换DAC0832的应用

时间:10-02 整理:3721RD 点击:
写DA转换比写AD转换容易多了, 写了一个使用DAC0832的数模转换程序.
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. sbit wela = P2^7;  //数码管位选
  5. sbit dula = P2^6;  //数码管段选
  6. sbit dawr = P3^6;  //DA写
  7. sbit dacs = P3^2;  //DA片选

  8. unsigned char j, k;
  9. //延时函数, 例i=10,则大概延时10ms.
  10. void delay(unsigned char i)
  11. {
  12.     for(j = i; j > 0; j--)
  13.     {
  14.         for(k = 125; k > 0; k--);
  15.     }
  16. }

  17. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
  18.     0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F数码管的编码(共阴极)

  19. unsigned char count;
  20. unsigned char datas[] = {0, 0, 0};
  21. void display(unsigned char value)
  22. {
  23.     datas[0] = value / 100;
  24.     datas[1] = value % 100 / 10;
  25.     datas[2] = value % 10;
  26.     for(count = 0; count < 3; count++)
  27.     {
  28.         //片选
  29.         wela = 0;
  30.         P0 = ((0xfe << count) | (0xfe >> (8 - count))); //选择第(count + 1) 个数码管
  31.         wela = 1; //打开锁存, 给它一个下降沿量
  32.         wela = 0;
  33.         //段选
  34.         dula = 0;
  35.         P0 = table[datas[count]];  //显示数字
  36.         dula = 1;  //打开锁存, 给它一个下降沿量
  37.         dula = 0;
  38.         delay(5); //延时5ms, 即亮5ms
  39.         //清除段先, 让数码管灭, 去除对下一位的影响, 去掉高位对低位重影
  40.         //若想知道影响效果如何, 可自行去掉此段代码
  41.         //因为数码管是共阴极的, 所有灭的代码为: 00H
  42.         dula = 0;
  43.         P0 = 0x00;  //显示数字
  44.         dula = 1; //打开锁存, 给它一个下降沿量
  45.         dula = 0;
  46.     }
  47. }

  48. unsigned char v, icount;
  49. void main()
  50. {
  51.     wela = 0;  //关闭数码管
  52.     dula = 0;
  53.     dacs = 0;  //打开DA片选
  54.    v = 255;
  55.     while(1)
  56.     {
  57.         dawr = 0;  //向DA写数据
  58.         P0 = v;
  59.         dawr = 1;  //关闭DA写
  60.         for(icount = 0; icount < 10; icount++)
  61.         {
  62.            display(v);
  63.         }
  64.         v--;
  65.     }
  66. }

复制代码


真的不错 谢谢小编

真是说曹操,曹操到。真是太好了

  顶顶顶顶

顶,学习啦

无陈旭无很想

那个发光管能亮吗?  DAC0832总的输出电流才330ua,,,,是不是应该加个放大器转成电压形式

这是郭天祥的图

感谢分享,感谢小编的无私奉献!
这真的是非常好的东西啊,太感谢了!

再次感谢,嗯,就是这样。

那个 哥哥 把 电路图画好了  给我一份  仿真一下吧

二极管能亮吗?330uA,怎么去驱动需要10mA的电流

谢谢。

不错不错,,,,,,

水水水水水水水水水水水水水水

真是说曹操,曹操到。真是太好了

真是说曹操,曹操到。真是太好了,来看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top