51单片机练习:DA转换篇(C语言)
2023-12-14 07:22:30
题目
??用单片机控制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转换-连接图
心得/经验分享
- DA的转换和AD的转换正好相反。因为本实验P0口要一直向DA传输数据,所以就讲CS片选一直打开,同时输入寄存器的写选通输入端WR也一直打开。
- 要让发光二极管在5s左右的时间里,均匀地由暗到亮(或者由亮到暗),可以在传输数据时,均匀地增加或减少数据并予以一定的延时即可。
- DA转换的数据输入是P0口,而数码管显示的数据输入也是P0口,所以要在一开始关闭数码管的位选和段选。
文章来源:https://blog.csdn.net/lucaihua/article/details/132738267
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!