#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. GOF23-工厂模式

    1.什么是工厂模式 就是实现创建者与调用者分离,工厂模式的核心(灵魂)其实就是:分工.   2.工厂模式有哪些 简单工场模式(静态工厂) 简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法,通过 ...

  2. springboot 项目的https的发布

    1.生成密钥证书 生成命令: keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize -keystore keysto ...

  3. 关于原生js中函数的三种角色和jQuery源码解析

    原生js中的函数有三种角色: 分两大种: 1.函数(最主要的角色)2.普通对象(辅助角色):函数也可以像对象一样设置属于本身的私有属性和方法,这些东西和实例或者私有变量没有关系两种角色直接没有必然的关 ...

  4. 2019年7-8月Leetcode每日训练日志

    2019-08-29 #274 H指数 2019-08-28 #287 寻找重复数 #875 爱吃香蕉的珂珂 #704 二分查找 2019-08-27 #744 寻找比目标字母大的最小字母 #225 ...

  5. 前端开发-Web标准

    Web标准 1理解:结构 => html表现 => css行为 => js(dom + es) WEB标准(结构.表现.行为分离)有哪些优点呢? 易于维护:只需更改CSS文件,就可以 ...

  6. 转载-springboot缓存开发

    转载:https://www.cnblogs.com/wyq178/p/9840985.html   前言:缓存在开发中是一个必不可少的优化点,近期在公司的项目重构中,关于缓存优化了很多点,比如在加载 ...

  7. Java内部类使用注意事项

    Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...

  8. 牛客 136G-指纹锁 set容器重载

    136G-指纹锁 题意: 设计一个容器,支持插入x,若与容器中的值最小相差为k,则自动忽略.删除操作,把与x相差为k的值都从容器中删除.查询操作,问容器中有没有和x相差为k的数值. 思路: 一个stl ...

  9. BZOJ1878[SDOI2009]HH的项链+莫队算法模板

    题意:多次询问,求在一个区间中,有多少种珠子: 思路:莫队算法模板题目: 参考:https://www.cnblogs.com/RabbitHu/p/MoDuiTutorial.html #inclu ...

  10. 洛谷P3951 小凯的疑惑 - 数学 /扩展欧几里得

    传送门 题意:求出a和b不能通过线性组合(即n*a+m*b)得到的最大值: 思路:摘自洛谷: 不妨设 a<b 假设答案为 x 若 x≡m*a ( mod b )(1≤m≤b−1) (mod3)什 ...