• 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: 模拟信号到数字信号的转换。
    
    
    


    每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛
  • 相关阅读:
    C++入门经典-例3.4-根据成绩划分等级
    C++入门经典-例3.3-if-else语句的奇偶性判别
    C++入门经典-例3.2-根据分数判断是否优秀
    C++入门经典-例3.1-判断输入的数字是否为奇数
    C++入门经典-例2.17强制类型转换
    C++入门经典-例2.16-隐式类型转换
    C++入门经典-例2.15-逗号表达式的应用
    C++入门经典-例2.14-使用移位运算
    C++入门经典-例2.13-左移运算
    Spring之Bean管理------注解方式
  • 原文地址:https://www.cnblogs.com/zhai1997/p/9066078.html
Copyright © 2020-2023  润新知