这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » TLC1549驱动

共1条 1/1 1 跳转至

TLC1549驱动

助工
2014-10-14 20:34:59     打赏

.概述


TLC1549是德州仪器公司生产的一款单通道10A/D转换器。该产品采用应用非常广泛的逐次渐进型的A/D转换技术,转换速度快,最大转换时间为21微妙,误差为±1LSB(大约±0.1%),采用串行通信,时钟频率最大可达2.1MHZ,读取数据操作简单,是一款性价比较高的模数转换芯片。


.电路设计


WSF-51DB开发板上,用一个10K的电位器实现0-5V电压可调输出,作为TLC1549的模拟信号输入,参考电压直接取电源电压DC5V


 


           


 


 .软件设计


/**************************************************************************


*程序名称:TLC1549驱动


*程序功能:将模拟信号值在数码管上显示


*


* MCU型号:AT89S52-24PU


*时钟频率:12MHZ




**************************************************************************/


#include<reg52.h>


unsigned char code segmcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,


                           0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴极数码管段码


unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};


//8位共阴极数码管位码


sbit ser=P2^0;//74HC595串行数据输入


sbit oe=P2^1;//74HC595使能


sbit rclk=P2^2;//74HC595数据锁存


sbit srclk=P2^3;//74HC595串行时钟


 


sbit clock=P1^3;//TLC1549时钟


sbit dataout=P0^6;//TLC1549数据


sbit cs=P1^2;//TLC1549片选


 


//延时毫秒函数:


void Delayms(unsigned int t)


{


         unsigned int x,y;


         for(x=t;x>0;x--)


                 for(y=120;y>0;y--);


}


 


//任意位数码管显示一个字符函数:


void DTDisplayChar(unsigned char segmd,unsigned char bitd)//数码管段码和数码管位码


{


        unsigned char i;


        unsigned int dat;


        oe=1;//74HC595禁止


        dat=bitd;


        dat=dat<<8|segmd;//位码段码合并为一个int型数据


        for(i=0;i<16;i++)//16位数据从高位依次移入74HC595


        {


                 ser=(dat&0x8000)?1:0; //判断最高位,为真取1,为假取0


                 srclk=1;//上升沿送数据


                 srclk=0;


                 dat<<=1;//左移取下一位


        }


        rclk=1;//74HC595锁存数据


        rclk=0;


        oe=0;//74HC595使能


}


 


//TLC1549函数:


unsigned int ReadTLC1549(void)


{


         unsigned int rdat=0;


         unsigned char i;


         cs=0;//片选使能


         for(i=0;i<10;i++)


         {


              clock=0;


                 clock=1;//上升沿读数据


                 rdat<<=1;


                 if(dataout==1) rdat|=0x0001;//从高位读取


                 //else rdat|=0x0000;//如果是0,可不做处理


         }


         cs=1;//片选禁止


         return rdat;


}


 


//显示TLC1549转换值函数:


void DisplayTLC1549Value(void)


{


         float temp;


         unsigned char v1,v2,v3,v4;


         temp=ReadTLC1549();


         temp=4.88*temp;


//参考电压为5v10位有1024个刻度,每个刻度为5000/1024=4.88mv


         v1=((unsigned int)temp)/1000;


         v2=((unsigned int)temp)%1000/100;


         v3=((unsigned int)temp)%100/10;


         v4=((unsigned int)temp)%10;


         DTDisplayChar(segmcode[v1]|0x80,bitcode[0]);//显示整数和小数点


         Delayms(1);


         DTDisplayChar(segmcode[v2],bitcode[1]);//显示第一位小数


         Delayms(1);


         DTDisplayChar(segmcode[v3],bitcode[2]);//显示第二位小数


         Delayms(1);


         DTDisplayChar(segmcode[v4],bitcode[3]);//显示第三位小数


}


 


//主函数:


int main(void)


{


    while(1)


        DisplayTLC1549Value();//显示输入的模拟信号值


    return 0;


}


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]