#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. Linux 目录递归赋权,解决 Linux权限不够

    如你要操作一个目录下的文件时,系统提示 “权限不够”,可用以下方法解决. 如 test 文件目录. 1.用root账号登陆系统. 2.输入如下命令: chmod 777 test -R 这样访问.修改 ...

  2. Python笔记_初级语法

    1.标识符与变量 1.1 标识符 规范 只能由数字,字母,_(下划线)组成 不能以数字开头 不能是关键字 区分大小写 命名约束 下划线分隔法(推荐): 多个单词组成的名称,使用全小写字母书写,中间使用 ...

  3. 《Effective Java第二版》总结

    第1条:考虑用静态工厂方法代替构造器 通常我们会使用 构造方法 来实例化一个对象,例如: // 对象定义 public class Student{ // 姓名 private String name ...

  4. python 15 带参装饰器

    目录 2. 带参数的装饰器 3. 多个装饰器装饰一个函数 2. 带参数的装饰器 #在装饰器的基础上再套一层 def auth(argv): def wrapper(func): def inner(* ...

  5. Java基础之Comparable与Comparator

    Java基础之Comparable与Comparator 一.前言: Java中实现对对象的排序一般情况下主要有以下两种实现方式(万物皆对象嘛): 对象所在的类实现Comparable 接口 定义比较 ...

  6. JS-对象的深浅拷贝及其新增方法测试

    我们在了解数据类型的时候,都知道一般的字符,数值,undefined和布尔值等都为一般数据类型,它们在进行数据传输的时候,进行的是值传递,当我们修改新数据,是不影响老数据的.但是我们今天要讲的是数据类 ...

  7. Jmeter 之测试片段、Include Controller、模块控制器应用

    一.测试片段是什么? 应用在控制器上的一个特殊线程组,与线程组处于同一层级,必须与Include Controller或模块控制器一起使用才被执行. 二.应用场景 1.当jmeter脚本非常复杂的时候 ...

  8. 大型互联网公司分布式ID方案总结

    ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并 ...

  9. 刨死你系列——HashMap(jdk1.8)

    本文的源码是基于JDK1.8版本,在学习HashMap之前,先了解数组和链表的知识. 数组:数组具有遍历快,增删慢的特点.数组在堆中是一块连续的存储空间,遍历时数组的首地址是知道的(首地址=首地址+元 ...

  10. 五大典型场景中的API自动化测试实践

    一.API 测试的基本步骤 通常来讲,API 测试的基本步骤主要包括以下三大步骤: 1.准备测试数据: 2.通过通用的或自己开发的API测试工具发起对被测API的request: 3.验证返回结果的r ...