找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

DAC渐暗渐明的灯

[复制链接]
admin 发表于 2012-9-2 07:44:16 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
5_25254_76ffa0b70b00752.jpg



通过改变DA转换数值,控制PCF8591,使发光二级管由亮逐渐熄灭,再由灭渐变亮,如此循环。

如上图(略去最小系统)

通过调整PWM占空比也可让灯实现渐明渐暗效果,此贴自然与其不可同日而语,但鉴于本人刚学c(以前是用汇编的),较少成功。。特此拿出晒晒

程序如下

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define PCF8591_WRITE 0x90 //PCF8591地址选择字

sbit sda=P1^2;
sbit scl=P1^1;
uchar dacdata,value;
bit flag;

void delay()
{;;}
void delayms(uint xms) //延时xms子程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void start() //IIc开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //IIC停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons() //应答信号
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<255))
i++;
scl=0;
delay();
}
void iicinit() //IIc总线初始化
{
sda=1;
delay();
scl=1;
delay();
}
void write_byte(uchar dacdata) //写一个DAC数据
{
uchar i,temp;
temp=dacdata;
for (i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
void data_process() //DAC数据
{
if(flag==0)
{
value+=5;
dacdata=value;
if(value==255)
{
flag=1;
}
delayms(50);
}
else
{
value-=5;
dacdata=value;
if(value==0)
{
flag=0;
}
delayms(50);
}
}

void main()
{
value=0;
flag=0;

while(1)
{
data_process();
iicinit();
start();
write_byte(PCF8591_WRITE);
respons();
write_byte(0x40); //0x40---PCF8591转换控制字
respons();
write_byte(dacdata);
respons();
stop();
}
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 07:35 , Processed in 0.059529 second(s), 14 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表