您的位置:首页 > 其它

PIC16F883和TLC5615(DA)数模转化实验,呼吸灯

2012-07-06 00:00 288 查看
今天上课做了数模转换的实验。感觉很好玩,在这里写下。

器材:PIC16F883控制芯片、TLC5615、LED灯一个、电阻一个(1K)、PICkit2下载器

实验说明,本实验采用I/O模拟方法实现数模转换,转换结果输出到LED引脚。LED呈现呼吸似的缓慢闪烁。

实验电路图:



RC3连接SCLK、RC5连接Din、RC2连接CS。

输入DA的数字从0加到1024(DA为10位),再从1024减到0。中间最亮的时候做了一点儿延时。

LED灯接一个电阻到地,另一端接DA的模拟输出引脚。

实验中比较重要的时序图:



根据这个时序图,我周期性的给引脚的电位置1和置0。

代码如下:

#include<htc.h>
#define uchar unsigned char
#define uint unsigned int
#define CLK RC3
#define DATA_IN RC5
#define CS RC2
void delay(uint x)
{
uint a,b;
while(x--)
{
b = 0x00ff;
while(b--)
{
a = 0x00ff;
while(a--);
}
}
}
void main()
{
uint i,temp,k=0,kp;
TRISC=0x00;
void delay(uint x);
while(1)
{
i = 12;
CS = 0;
CLK = 0;
kp = k;
kp<<=4;
while(i--)
{
temp=kp&0x8000;
if(temp!=0)
{
DATA_IN = 1;
}
else
{
DATA_IN = 0;
}
CLK  = 1;
kp<< = 1;
CLK = 0;
}
CS  = 1;
CLK = 0;
k++;
if(k==0x0fff)
{
delay(1);
while(k--)
{
i = 12;
CS = 0;
CLK = 0;
kp = k;
kp<<=4;
while(i--)
{
temp = kp&0x8000;
if(temp!=0)
{
DATA_IN = 1;
}
else
{
DATA_IN = 0;
}
CLK  = 1;
kp<< = 1;
CLK = 0;
}
CS  = 1;
CLK = 0;
}
k = 0;
}
}
}


可以在每完成一个数据的输入后嘴一个延时来减慢LED灯的亮灭速度。看起来就是呼吸的效果。

如果有任何问题,请您跟我联系!感谢您的光临!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息