#include <reg51.h>
#include "TLC549.c"
code uchar seven_seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //0--9
uchar cp, j;
uint dat_ad; //模拟信号
void timer0_init(void); //声明中断初始化函数
void timer0_isr(void); //声明中断服务函数
/**************************主函数***************************/
void main(void)
{
timer0_init(); // 中断初始化函数
tlc549_init(); //tlc549初始化函数
while(); //循环
}
/**********************中断初始化函数***********************/
void timer0_isr(void) interrupt
{
TH0 = 0xf8;
TL0 = 0x2f;
cp++;
if(cp >= ) // 0.5秒让ADC0832转换一次
{
cp = ;
dat_ad = tlc549_ad() * 1.96; // ,模拟信号转化为数字信号
}
P0 = 0xff;
switch(j)
{
case : P0 = seven_seg[dat_ad % ]; P2 = ~0x01; break; //模拟信号
case : P0 = seven_seg[dat_ad % / ]; P2 = ~0x02; break;
case : P0 = seven_seg[dat_ad / ] & 0x7f; P2 = ~0x04; break; //模拟信号三位
case : P0 = seven_seg[tlc549_ad() % ]; P2 = ~0x08; break; //数字信号
case : P0 = seven_seg[tlc549_ad() % / ]; P2 = ~0x10; break;
case : P0 = seven_seg[tlc549_ad() / ]; P2 = ~0x20; break; //数字信号三位
}
j++;
if(j >= ) //共六位
j = ;
} void timer0_init(void) //中断初始化函数
{
TMOD = 0x01; //方式一
TH0 = 0xf8;
TL0 = 0x2f; //对机器脉冲计数,2000个计满溢出引发中断
EA = ; //总中断
ET0 = ; //T0中断
TR0 = ; //启动定时器T0
} /****************************************************************************************/
/*************************************TLC549的驱动程序***********************************/
/*TLC549模数转换将连续变化的模拟信号转换为离散的数字信号V = 5 / 256 = 0.01953v = 19.53mv*/
/****************************************************************************************/
#define uchar unsigned char //宏定义用uchar 代替 unsigned char (0--255)
#define uint unsigned int //宏定义用uint 代替 unsigned int (0--65535) sbit SCLK = P3^; //I/O时钟
sbit CS = P3^;      //片选
sbit SDO = P3^; //数据线
/***********************TLC549初始化**************************/
void tlc549_init(void)
{
CS = ; //初始化,启动
SCLK = ;
CS = ;
}
/**********************TLC549数据转换*************************/
uchar tlc549_ad(void)
{
uchar i, dat_temp = ;
tlc549_init();
for(i = ; i < ; i++) //读取采集数据,读取的是上一次采集的数据
{
SCLK = ;
dat_temp <<= ;
if(SDO)dat_temp |= 0x01;
SCLK = ;
}
CS = ;
return(dat_temp);
}
TLC549应用
() TLC的作用
TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,采用了CMOS工艺,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转换速率为 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。能够实现模拟信号到数字信号的转换。 () 对TLc549的认识
模拟信号到数字信号的转换。
()工作原理
当/CS变为低电平后, TLC549芯片被选中, 同时前次转换结果的最高有效位MSB (A7)自 DATA OUT 端输出,接着要求自 I/O CLOCK端输入8个外部时钟信号,前7个 I/OCLOCK信号的作用,是配合 TLC549 输出前次转换结果的 A6-A0 位,并为本次转换做准备:在第4个 I/O CLOCK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个 I/O CLOCK 信号的下降沿使片内采样/保持电路进入保持状态并启动 A/D开始转换。转换时间为 个系统时钟周期,最大为 17us。直到 A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者 I/O CLOCK 时钟端保持36个系统时钟周期的低电平。由此可见,在自 TLC549的 I/OCLOCK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次 A/D转换开始。
()器件的作用
Pot-hg:产生0~5V的电压,作为模拟信号,传递给tlc549.
数码管:显示数字信号和模拟信号的数值
Respack_8:驱动,电流不够,加排阻增加电流,排阻一般有九个脚,一个脚接VCC,其他脚接单片机I/o口,比如说P0口,一般需要加排阻。
7404反相器:增大电流
Tlc549: 模拟信号到数字信号的转换。


tlc549的更多相关文章

  1. AD_TLC549采集模拟信号

    AD_TLC549采集模拟信号 实验原理 芯片介绍 TLC549是 TI公司生产的一种低价位.高性能的8位A/D转换器,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转 ...

  2. 基于FPGA的电压表与串口通信(上)

    实验原理 该实验主要为利用TLC549采集模拟信号,然后将模拟信号的数字量通过串口发送到PC上上位机进行显示,使用到的TLC549驱动模块在进阶实验已经使用到了,串口模块在基础实验也已经使用到了,本实 ...

  3. 目前常用AD/DA芯片简介

    目前生产AD/DA的主要厂家有ADI.TI.BB.PHILIP.MOTOROLA等,武汉力源公司拥有多年从事电子产品的经验和雄厚的技术力量支持,已取得排名世界前列的模拟IC生产厂家ADI.TI公司代理 ...

  4. verilog实验3:AD转换后串口输出到PC端

    一.实验任务 通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上.此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配.等待串口发送完后,再进行下一次AD转换. ...

  5. 学习AD、DA的体会

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

  6. FPGA/SOPC学习转载

    转自小時不識月http://www.cnblogs.com/yuphone/archive/2010/08/27/docs_plan.html 新网址为:http://andrewz.cn [连载计划 ...

随机推荐

  1. 安装Windows Server 2008

    下面介绍一下,Windows Server操作系统安装,以及在企业中的应用,在小型企业中可以使用不同的版本搭建不同类型的服务,小型企业中可以搭建Web服务,FTP服务,以及DNS和DHCP服务等,在大 ...

  2. 如何使用python records 库优雅的操作数据库

    今天要介绍的这个python第三方库非常厉害,完美操作各种数据库.名字叫 records, 在网上很少有这个库的相关资料,但是在开源社区可是很火热的哦.如果这还不能打消你的顾虑,再告诉你一件事:如果你 ...

  3. Mybatis 中的<![CDATA[ ]]>浅析

    在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]&g ...

  4. springboot 项目的https的发布

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

  5. js遍历API总结

    1.for 循环 普通遍历方法,可优化,存下数组的length,避免每次都去获取数组的length,性能提升 2.for-in 可遍历数组和对象, (for key in obj){} 该方法既可以读 ...

  6. unity编辑器扩展_02(分别在Hierarchy,Project中创建一个选项)

    在Hierarchy面板创建选项的代码: [MenuItem("GameObject/Test",false,1)]    static void Test1()    {     ...

  7. Codeforces 1008D/1007B

    题意略. 思路: 由于这个长方体是可以翻转的,所以我们不必考虑小长方体3个维度的出处,反正3条边一定有长有短能分出大小. 现在我们来考虑A,B,C三个数字,如果它们3个产生的因子互不相同,分别产生了a ...

  8. CSS 之Grid 网格知识梳理2

    继上篇的CSS 之Grid下半部分   14.将单元格划分到一个区域,使用grid-template-areas属性: ag: grid-template-areas: "header  h ...

  9. Delphi - 互斥对象下实现系统的单例模式

    使用CreateMutex函数创建互斥对象 利用Windows系统函数CreateMutex(),找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体. CreateMutex函数原型如下 ...

  10. Libs - 颜色生成网站

    介绍几个免费常用的颜色生成网站: 如下 对比色邻近色配色方案 http://www.peise.net/tools/web/ 渐变色方案 https://webgradients.com/ 随机搭配5 ...