tlc549

#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(1);            //循环
}
/**********************中断初始化函数***********************/
void timer0_isr(void) interrupt 1
{
    TH0 = 0xf8; 
    TL0 = 0x2f;
    cp++;
    if(cp >= 250)                                    //  0.5秒让ADC0832转换一次
    {
        cp = 0;
        dat_ad = tlc549_ad() * 1.96;                // ,模拟信号转化为数字信号
    }
    P0 = 0xff;
    switch(j)
    {
        case 0: P0 = seven_seg[dat_ad % 10]; P2 = ~0x01; break;              //模拟信号
        case 1: P0 = seven_seg[dat_ad % 100 / 10]; P2 = ~0x02; break;
        case 2: P0 = seven_seg[dat_ad / 100] & 0x7f; P2 = ~0x04; break;      //模拟信号三位
        case 3: P0 = seven_seg[tlc549_ad() % 10]; P2 = ~0x08; break;      //数字信号
        case 4: P0 = seven_seg[tlc549_ad() % 100 / 10]; P2 = ~0x10; break;
        case 5: P0 = seven_seg[tlc549_ad() / 100]; P2 = ~0x20; break;      //数字信号三位
    }
    j++;
    if(j >= 6)                                                              //共六位
    j = 0;
}

void timer0_init(void)            //中断初始化函数
{
    TMOD = 0x01;                //方式一
    TH0 = 0xf8;
    TL0 = 0x2f;                    //对机器脉冲计数,2000个计满溢出引发中断
    EA = 1;                          //总中断
    ET0 = 1;                     //T0中断
    TR0 = 1;                     //启动定时器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^7; //I/O时钟
sbit CS = P3^4;      //片选
sbit SDO = P3^5;  //数据线
/***********************TLC549初始化**************************/
void tlc549_init(void)
{
    CS = 1;      //初始化,启动
    SCLK = 0;
    CS = 0;
}
/**********************TLC549数据转换*************************/
uchar tlc549_ad(void)
{
    uchar i, dat_temp = 0;
    tlc549_init();
    for(i = 0; i < 8; i++) //读取采集数据,读取的是上一次采集的数据
    {
        SCLK = 1;
        dat_temp <<= 1;
        if(SDO)dat_temp |= 0x01;
        SCLK = 0;
    }
    CS = 1;
    return(dat_temp);
}

TLC549应用
(1)    TLC的作用
TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,采用了CMOS工艺,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转换速率为 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。能够实现模拟信号到数字信号的转换。

(2)    对TLc549的认识
模拟信号到数字信号的转换。
(4)工作原理
当/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开始转换。转换时间为 36 个系统时钟周期,最大为 17us。直到 A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者 I/O CLOCK 时钟端保持36个系统时钟周期的低电平。由此可见,在自 TLC549的 I/OCLOCK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次 A/D转换开始。
(4)器件的作用
Pot-hg:产生0~5V的电压,作为模拟信号,传递给tlc549.
数码管:显示数字信号和模拟信号的数值
Respack_8:驱动,电流不够,加排阻增加电流,排阻一般有九个脚,一个脚接VCC,其他脚接单片机I/o口,比如说P0口,一般需要加排阻。
7404反相器:增大电流
Tlc549: 模拟信号到数字信号的转换。




每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
原文地址:https://www.cnblogs.com/zhai1997/p/9066078.html