找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1398|回复: 1
打印 上一主题 下一主题
收起左侧

串行DA TLC5615的单片机驱动源程序

[复制链接]
跳转到指定楼层
楼主
ID:773431 发表于 2020-6-8 23:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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);
        }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2020-6-9 16:26 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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