单片机实验-DA实验

一、实验目的

1、了解 D/A 转换的基本原理。

2、了解 D/A 转换芯片 0832 的性能及编程方法。

3、了解单片机系统中扩展 D/A 转换的基本方法。

二.实验设备和器件

1.KEIL软件

2.实验箱

三.实验内容

利用 DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器观看。

  • 电路图及连线:

连线

连线孔1

连线孔2

1

DA_CS

CS2

2

-5V-+5V

电压表测量端

3

电压表地端

实验箱地

                                             

 

  • 代码:

#include<reg51.h>

#include<absacc.h>

#define uchar unsigned char

#define uint unsigned int

#define DAC0832 XBYTE[0x8000]

uchar sindata[64]=

{0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,0xda,0xe2,0xea,

 0xf0,0xf6,0xfa,0xfd,0xff,0xff,0xff,0xfd,0xfa,0xf6,0xf0,

 0xea,0xe3,0xda,0xd1,0xc7,0xbc,0xba,0xa5,0x99,0x8c,0x80,

 0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,0x25,0x1d,0x15,0xf,

 0x9,0x5,0x2,0x0,0x0,0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,

 0x2e,0x38,0x43,0x4e,0x5a,0x66,0x73};

 void delay(uchar m)//延时函数

{uchar i;for(i=0;i<m;i++) ;}

void juchi()   //锯齿函数

{uchar i1;

for (i1=0;i1<0xff;i1++)  DAC0832=i1;

i1=0;}

void sanjiao() //三角函数

{ uchar i2;

for(i2=0;i2<0xff;i2++)  DAC0832=i2;

for(i2=0xff;i2>0;i2--)  DAC0832=i2;

i2=0;}

void zhengxian() //正弦函数

{uchar k;

for(k=0;k<64;k++)

{DAC0832=sindata[k];delay(1);}}

void main()    //主函数

{uchar j=2;

while(1)

{

while(j--)

{juchi();}j=2;

while(j--)

{sanjiao();}j=2;

while(j--)

{zhengxian();}j=2;}}

  • 波形图:

 

  • 分析:
  1. 该实验中,运用DA转换来产生不同的波形,本实验选取的双极性电压(-5V~+5v)

8 位 D/A 转换器的输入数据与输出电压的关系为

U(-5V ~ +5V)=2·Uref/256×N-5V     (这里 Uref 为+5V)

2、本实验DA选择模块地址控制端口DA_CS与实验箱上的CS0相连,根据查实验箱相关资料可知,CS0提供的地址为8000H-8fffH,本实验选取的8000H作为地址

3、第一部分的实验图在本实验中右下角的部分不需要

4、锯齿的形成原理则是输入的数字量从0000到ffff,一直循环,可形成无数个锯齿波

   三角的形成原理则是输入的数字量从0000到ffff,,再从ffff到0000,一直循环,可形成无数个三角波

   正弦的形成原理则是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。

5、在本实验形成锯齿波时,用for(i1=0;i1<=0xff;i1++)这条语句时,这个循环跳不出来,会一直在示波器上一直显示锯齿波,改为for(i1=0;i1<0xff;i1++)之后,循环则跳出

6、本实验中,我们把每个波形的形成写为一个函数,然后在主函数中调用这三个函数,为防止波形转换的过快,在主函数中中,while再构成了一个循环,及每个波形图出现两个周期。

猜你喜欢

转载自blog.csdn.net/weixin_39569242/article/details/81155740
今日推荐