#include <reg51.h>
#include "TLC5615.c"
code uchar seven_seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //数码管显示
uchar cp,j; // 、、定义 变量
uint Data, imitate; /*模拟电压V = 5 / 1024 = 0.00488 */ void timer0_init(void); /*声明中断初始化函数*/
void timer0_isr(void); /*声明中断服务函数 */ /*********************************主函数********************************/
void main()
{
timer0_init(); //中断初始化函数
while(); //循环
} /*******************************中断服务函数****************************/
/*当TLC5615接收10位数据全为1时,理论上,OUT端输出电压5V,但实际应用时最高
输出电压4.7V。即TLC5615输入数据超过961时,输出电压将不再增加。**********/
void timer0_isr(void) interrupt
{
TH0 = 0xf8;
TL0 = 0x2f;
cp++;
if(cp >= ) /*半秒时间*/
{
cp = ;
tlc5615(Data);
if(Data >= ) // TLC5615输入数据超过961时,输出电压将不再增加。
Data = ; //归零
imitate = Data * 0.489; //数组数据转换为模拟数据
Data = Data + ; //变换数据
}
P0 = 0xff; //清屏
switch(j)
{ case : P0 = seven_seg[imitate % ]; P2 = ~0x01; break; //模拟电压
case : P0 = seven_seg[imitate % / ]; P2 = ~0x02; break;
case : P0 = seven_seg[imitate / ] & 0x7f; P2 = ~0x04; break;
case : P0 = seven_seg[Data % ]; P2 = ~0x08; break; //数字信号
case : P0 = seven_seg[Data % / ]; P2 = ~0x10; break;
case : P0 = seven_seg[Data / ]; P2 = ~0x20; break;
}
j++;
if(j >= ) //六位显示
j = ; }
/*****************************中断初始化函数****************************/
void timer0_init(void)
{
TMOD = 0x01; //工作方式1
TH0 = 0xf8;
TL0 = 0x2f;
EA = ;
ET0 = ;
TR0 = ;
} /*****************************************************************************************/
/*************************************TLC5615的驱动程序***********************************/
/*TLC5615模数转换将离散的数字信号转换为连续变化的模拟信号V = 5 / 256 = 0.01953v = 19.53mv*/
/*****************************************************************************************/ #define uchar unsigned char //宏定义 用uchar 代替 unsigned char
#define uint unsigned int //宏定义 用uint 代替 unsigned int sbit DIN = P3^;
sbit SCLK = P3^;
sbit CS = P3^;
/************************TLC5615的初始化**************************/
void tlc5615_init(void)
{
CS = ;
SCLK = ;
CS = ;
}
/************************TLC5615的初始化**************************/
/**********由于TLC5615是十位转换位,定义一个16位的变量************/
void tlc5615(uint Data)
{
uchar i;
Data <<= ; //两个字节有16位,去掉高六位剩下十位有效位
tlc5615_init(); //初始化函数
for(i = ; i < ; i++) //根据PDF文档可知,要送的只有十位数但是后面要跟着多加两位零才能将一个数据送出去
{
DIN = (bit)(Data & 0x8000); //当dat与0x8000相与然后强制转换后有一位,这时只就只可以直接送给DA端进行发送
SCLK = ; //前面一句亦可用DA=CY来代替,但后面的顺序要调换才行
Data <<= ;
SCLK = ;
}
CS = ;
SCLK = ;
}
TLC5615应用
() TLC5615的作用
DIN: 串行数据输入端;TLC5615引脚图
SCLK: 串行时钟输入端;
CS: 芯片选用通端,低电平有效;
DOUT: 用于级联时的串行数据输出端;
AGND: 模拟地;
REFIN:基准电压输入端, 2V~ (VDD - );
OUT: DAC 模拟电压输出端;
VDD: 正电源端,4.5~.5V ,通常取 5V。
将数字信号转化为模拟信号
() 对TLC5615的认识
TLC5615 为美国德州仪器公司 年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。带有上电复位功能,即把 DAC 寄存器复位至全零。性能比早期电流型输出的 DAC 要好。只需要通过 根串行总线就可以完成 位数据的串行输入, 易于和工业标准的微处理器或微控接口, 适用于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。
() 工作原理
只有当片选 CS 为低电平时, 串行输入数据才能被移入 16位移位寄存器。当 CS 为低电平时,在每一个 SCLK 时钟的上升沿将 DIN 的一位数据移入 位移寄存器。注意, 二进制最高有效位被导前移入。接着,CS 的上升沿将 位移位寄存器的 位有效数据锁存于 位 DAC 寄存器, 供 DAC 电路进行转换; 当片选 CS 为高电平时,串行输入数据不能被移入 位移位寄存器。注意, CS 的上升和下降都必须发生在 SCL K 为低电平期间。
() 仿真器件作用
respack_8:驱动,电流不够,加排阻增加电流,排阻一般有九个脚,
个脚接VCC,其他脚接单片机I/o口,比如说P0口,一般需要加排阻。
7404反相器:增大电流
TLC5615:数字信号转化为模拟信号
数码管:实现信号的显示

TLC5615的更多相关文章

  1. 基于FPGA的通信信号源的设计

    通信信号源设计原理 通过设计一个DDS信号源,然后将该信号作为载波信号,再对基带信号进行2ASK.2FSK.2PSK.2DPSK调制,进而产生多种通信信号. 设计框图如下: 将PN序列进行2ASK.2 ...

  2. 基于DDS的任意波形发生器

    实验原理 DDS的原理 DDS(Direct Digital Frequency Synthesizer)直接数字频率合成器,也可叫DDFS. DDS是从相位的概念直接合成所需波形的一种频率合成技术. ...

  3. 学习AD、DA的体会

    AD转换器的转换是指模拟信号输入转化为数字信号输出,而DA转换器是把数字信号转换为模拟信号,在ADC0832.TLC549和TLC5615程序设计中,通过使用中断服务函数每0.5s对ADC0832进行 ...

  4. Programmed Adjustable Power

    Programmed Adjustable Power I just explored an easy scheme to design a high precision programmed adj ...

  5. AVR单片机教程——DAC

    本文隶属于AVR单片机教程系列.   单片机的应用场景时常涉及到模拟信号.我们已经会使用ADC把模拟信号转换成数字信号,本讲中我们要学习使用DAC把数字信号转换成模拟信号.我们还将搭建一个简单的功率放 ...

随机推荐

  1. trec 2019 fair ranking track

    trec 2019 fair ranking track     最近实验室要求参加trec 2019新出的track:fair ranking track.这里整理一下该任务的思想和要求.这次tra ...

  2. 设计一个完美的http缓存策略

    1.前言 作为一个前端,了解http缓存是非常必要,它不仅是面试的必要环节,也更是实战开发中必不可少需要了解的知识点,本文作者将从缓存的概念讲到如何在业务中设计一个合理的缓存架构,带你一步一步解开ht ...

  3. Day 03--设计与完善(一)

    1.今天我们把软件原型基本完成了,功能流程一套下来,像一个真正的软件了.这是几个主要模块: 首先是首页,登入小程序后可以直观地看到各个食堂,并显示自己的定位.屏幕下方还可以时刻切换查看自己以前的订单. ...

  4. ajax方法请求成功后,没有执行success的方法

    $.ajax( { type: "POST", url: "AddSupplier.aspx", dataType:"text", data ...

  5. GLFW+GLAD OpenGL Mac开发环境搭建

    前言 OpenGL 是什么?The Industry Standard for High Performance Graphics 这是官方解释.说白了他就是一套标准接口.对,是接口,并没有实现具体的 ...

  6. unity游戏开发_对象池

    现在假设游戏中我们需要实现一个这样功能,按下鼠标左键,发射一颗子弹,3秒之后消失.在这个功能中,我们发射了上百上千发子弹,就需要实例化生成上百上千次.这时候,我们就需要使用对象池这个概念,每次实例化生 ...

  7. Java基础之Collection与Collections浅析

    Java基础之Collection与Collections浅析 一.前言: 位于Java.util包下的Collection与Collections都是Java中重要的工具类,它们都是Java集合框架 ...

  8. centos6在安装wdcp以后,导入MySQLdb报错问题

    为了方便linux的使用,会先安装好wdcp对服务器进行管理.在装好wdcp会对一些nginx,mysql等自动安装,但是mysql的安装目录会在/www/wdlinux这个目录下,跟一般的mysql ...

  9. 使用docker快速搭建Permeate渗透测试系统实践

    一.背景 笔者最近在做一场Web安全培训,其中需要搭建一套安全测试环境:在挑选渗透测试系统的时候发现permeate渗透测试系统比较满足需求,便选择了此系统:为了简化这个步骤,笔者将系统直接封装到了d ...

  10. 【转载】Windows api数据类型

    最近在接触windows api函数,看到了很多之前没有看到过的数据类型,发现“个人图书馆”中有个帖子说的挺详细的,特地搬运过来 Windows 数据类型 Delphi 数据类型 描述 LPSTR P ...