标题:
串行DA TLC5615的单片机驱动源程序
[打印本页]
作者:
sok
时间:
2020-6-8 23:21
标题:
串行DA TLC5615的单片机驱动源程序
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCL = P1^1;
sbit CS = P1^2;
sbit SDA = P1^0;
uchar bdata dat_in_h;
uchar bdata dat_in_l;
sbit h_7 = dat_in_h^7;
sbit l_7 = dat_in_l^7;
void delayms(uint j)
{
uchar i=250;
for(;j>0;j--)
{while(--i);
i=249;
while(--i);
i=250;
}
}
/*******************************************************************************
*** 函 数 名: void Write_12Bits()
*** 功能描述: 一次向TLC中写入12bit数据;
/******************************************************************************/
void Write_12Bits(void)
{
uchar i;
SCL = 0; //置零SCL,为写bit做准备;
CS = 0;
for(i=0;i<2;i++)//循2次,发送高两位;
{
if(h_7) //高位先发;
{
SDA = 1; //将数据送出;
SCL = 1; //提升时钟,写操作在时钟上升沿触发;
SCL = 0; //结束该位传送,为下次写作准备;
}
else
{
SDA = 0;
SCL = 1;
SCL = 0;
}
dat_in_h <<= 1;
}
for(i=0;i<8;i++)//循环八次,发送低八位;
{
if(l_7)
{
SDA = 1; //将数据送出;
SCL = 1; //提升时钟,写操作在时钟上升沿触发;
SCL = 0; //结束该位传送,为下次写作准备;
}
else
{
SDA = 0;
SCL = 1;
SCL = 0;
}
dat_in_l <<= 1;
}
for(i=0;i<2;i++)//循环2次,发送两个虚拟位;
{
SDA = 0;
SCL = 1;
SCL = 0;
}
CS = 1;
SCL = 0;
}
/*******************************************************************************
*** 函 数 名: void TLC5615_Start(uint dat_in)
*** 功能描述: 启动DAC转换;
/******************************************************************************/
void TLC5615_Start(uint dat_in)
{
dat_in %= 1024;
dat_in_h = dat_in/256;
dat_in_l = dat_in%256;
dat_in_h <<= 6;
Write_12Bits();
}
void main()
{
while(1)
{
TLC5615_Start(0xffff);
delayms(1);
}
}
作者:
admin
时间:
2020-6-9 16:26
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1