專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

51單片機(jī)驅(qū)動(dòng)12位AD轉(zhuǎn)換TLC2543電路圖+程序

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年11月05日   【字體:


下面是電路圖和仿真圖:



       TI公司的12位AD轉(zhuǎn)換TLC2543芯片比ADC0832的8位AD轉(zhuǎn)換芯片,精度要高很多,ADC0832的精度是255分之1,而TLC2543 由于二進(jìn)制數(shù)的位數(shù)是12bit,所以精度要高出很多,它的精度為4096分之一。以下為89C51單片機(jī)控制C語(yǔ)言程序和電路連接圖。完整的工程文件及hex文件下載:http://www.torrancerestoration.com/f/tlccadc.rar 是用stc89c51單片機(jī)制作的 成品正在使用中.
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit cs=P1^0;
sbit clk=P1^3;
sbit sdi=P1^4;
sbit sdo=P1^5;
sbit bit7=B^7;
sbit freq_out=P3^7;
bit cy;
uint adval,volt,froq;
uchar temp;
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,
             0x92,0x82,0xf8,0x80,0x90};
void delayms(uint ms)
{
uchar j;
while(ms--)
    {
 for(j=0;j<120;j++);
 }
}
void delay()
{
uint i=5;
while(i--);
}
void readADC(int ch)
{
uchar i;
clk=0;
cs=1;
delay();
cs=0;//CS=0開(kāi)始轉(zhuǎn)換
B=ch;
for(i=8;i>0;i--)
      {
   cy=sdo;
   sdi=bit7;
   clk=1;
   B=B<<1;
   clk=0;
   temp=temp<<1;
   if(cy==1)
     temp++; 
   }
    adval=temp;
 adval=adval<<4;
for(i=4;i>0;i--)
    {
    cy=sdo;
    temp=temp<<1;
    if(cy==1)
      temp++;
   clk=1;
   clk=0;
    }
   cs=1;//十二位讀數(shù)完畢,結(jié)束轉(zhuǎn)換。
   adval +=temp;
   volt=adval;
   froq=adval;
   }
void resultvolt()
   {
   volt=volt*5000.0/4334;//轉(zhuǎn)換成電壓顯示
   }
void resultfroq()
   {
    froq=1000000.0/froq*2/2.0;//轉(zhuǎn)換頻率數(shù)值
   }
void displayvolt(uint dat)
   {
   P2=0x10;
   P0=tab[dat/1000]&0x7f;
   delayms(1);
   P0=0xff;
   P2=0x20;
   P0=tab[dat%1000/100];
   delayms(1);
   P0=0xff;
   P2=0x40;
   P0=tab[dat%100/10];
   delayms(1);
   P0=0xff;
   P2=0x80;
   P0=tab[dat%10];
   delayms(1);
   P0=0xff;
   }
void displayfroq(uint dat)
   {
   P2=0x01;
   P0=tab[dat/1000]&0x7f;
   delayms(1);
   P0=0xff;
   P2=0x02;
   P0=tab[dat%1000/100];
   delayms(1);
   P0=0xff;
   P2=0x04;
   P0=tab[dat%100/10];
   delayms(1);
   P0=0xff;
   P2=0x08;
   P0=tab[dat%10];
   delayms(1);
   P0=0xff;
   }
void t0_int() interrupt 1
   {
   TH0=-froq/256;
   TL0=-froq%256;
   }
void t0_init(void)
   {
   TMOD=0x01;
   ET0=1;
   TR0=1;
   EA=1;
   }
void main()
{
   t0_init();
   P2=0xff;
   P0=0xff;
   while(1)
   {
   readADC(0);
   delayms(1);
   resultvolt();
   resultfroq() ;
  displayfroq(froq);
   displayvolt(volt);
   }
}

關(guān)閉窗口

相關(guān)文章