51单片机练习:DA转换篇(C语言)

51单片机练习:DA转换篇(C语言)

  • 题目
  • 代码
  • 接口连接情况
  • 心得/经验分享

题目

  用单片机控制DAC0832芯片输出电流,让发光二极管D12由灭均匀变到最亮,再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别警报一声,完成整个周期时间控制在5s左右,循环变化。(来自郭天祥老师的51单片机练习)

代码

初始化函数:

void Init()
{
	//关闭数码管的段选和位选,防止P0口数据变化使其闪烁
	DLE = 0;
	WLE = 0;
	
	CSDA = 0;//打开DA转换器的片选
	WRDA = 0;//打开输入寄存器的写选通输入端
	P0 = 0;
	
	num = 0;
	flag = 0;
}

延时1ms函数:

void delay_1ms(uint z)
{
	uint x,y;
	for(x = z;x > 0;x--)
	{
		for(y =110;y > 0;y--){}
	}
}

DA转换的数据输入函数:

void DATransform()
{
	//灯由暗到亮
	if(flag == 0)
	{
		while(num < 256)
		{
			num = num + 5;
			P0 = num;
			delay_1ms(50);
		}
		beep =  0;
		delay_1ms(100);
		beep =  1;
		flag = 1;//换方向
	}
	else //灯由暗到亮
	{
		while(num > 0)
		{
			num = num - 5;
			P0 = num;
			delay_1ms(50);
		}
		beep =  0;
		delay_1ms(100);
		beep =  1;
		flag = 0;//换方向
	}
}

整个项目代码:

#include <reg52.h>
//【例5.5.1】用单片机控制DAC0832芯片输出电流,让发光二极管D12由灭均匀变到最亮,再由最亮均匀熄灭。
//在最亮和最暗时使用蜂鸣器分别警报一声,完成整个周期时间控制在5s左右,循环变化。
//11.0529MHz

#define uint unsigned int
#define uchar unsigned char
	
sbit CSDA = P3^2;//DA片选信号
sbit WRDA = P3^6;//输入寄存器的写选通输入端
sbit beep = P2^3;//蜂鸣器
sbit DLE = P2^6;//数码管段选
sbit WLE = P2^7;//数码管位选
uint flag,num;//标志往哪个数据往哪个方向走

void Init();
void delay_1ms(uint z);
void DATransform();
	
void main()
{
	Init();
	while(1)
	{
		DATransform();
	}
}

//初始化函数
void Init()
{
	//关闭数码管的段选和位选,防止P0口数据变化使其闪烁
	DLE = 0;
	WLE = 0;
	
	CSDA = 0;//打开DA转换器的片选
	WRDA = 0;//打开输入寄存器的写选通输入端
	P0 = 0;
	
	num = 0;
	flag = 0;
}

//延时1ms函数
void delay_1ms(uint z)
{
	uint x,y;
	for(x = z;x > 0;x--)
	{
		for(y =110;y > 0;y--){}
	}
}

//DA转换的数据输入函数
void DATransform()
{
	//灯由暗到亮
	if(flag == 0)
	{
		while(num < 256)
		{
			num = num + 5;
			P0 = num;
			delay_1ms(50);
		}
		beep =  0;
		delay_1ms(100);
		beep =  1;
		flag = 1;//换方向
	}
	else //灯由暗到亮
	{
		while(num > 0)
		{
			num = num - 5;
			P0 = num;
			delay_1ms(50);
		}
		beep =  0;
		delay_1ms(100);
		beep =  1;
		flag = 0;//换方向
	}
}

接口连接情况

DAC转换-连接图
51单片机练习:DA转换篇(C语言)_第1张图片

心得/经验分享

  1. DA的转换和AD的转换正好相反。因为本实验P0口要一直向DA传输数据,所以就讲CS片选一直打开,同时输入寄存器的写选通输入端WR也一直打开。
  2. 要让发光二极管在5s左右的时间里,均匀地由暗到亮(或者由亮到暗),可以在传输数据时,均匀地增加或减少数据并予以一定的延时即可。
  3. DA转换的数据输入是P0口,而数码管显示的数据输入也是P0口,所以要在一开始关闭数码管的位选和段选。

你可能感兴趣的:(51单片机学习,51单片机,c语言,嵌入式硬件)