tlc1543串行AD转换

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char              湖北中医学院学报
sbit  clock=P0^1;    //显示时钟线    能源污染
sbit  data1=P0^0;    //显示数据线   
sbit CS=P2^1;        //TLC1543与89c52的接口连接线路         
sbit DOUT=P2^3;        //AD串行数据线     
sbit ADIN=P2^2;        //AD地选择端    张思来
sbit CLOCK=P2^0;    //AD时钟线   
sbit EOC=P3^2;        //AD转换结束端     
uint  a,i,j,k,m,ad,mileage,cost;
unsigned char code szi[]={0X11,0X7D,0X23,0X29,0X4D,0X89,0X81,0X3D,0X01,0X09};//控制字0~9
void delay(uint z)    //延时程序       
{
    uint x,y;
    for(x=10;x>0;x--)
    for(y=z;y>0;y--);
}
void  display(uint x,uint y) //显示子程序   
{
    uchar a;
    uint c;
    m=y%10; //一个十位数  变成两个个位数显示         
    k=y/10;
    j=x%10;
    i=x/10;
    for (c=0;c<4;c++)    //每次送四个数字         
        {
          if(c==0) a=szi[i]; //调用数组中的控制字         
          else  if(c==1) a=szi[j] ;                         
          else  if(c==2) a=szi[k] ;
          else  a=szi[m];
          for(i=0;i<8;i++) //每个数字需要送8位         
          {
            clock=0; //clock=0和clock=1是给74ls164一个下降沿,每次下降沿送一个位
            data1=a&1;
            a=a>>1;
            clock=1;
          }
        }
    delay(10000);
}
uint readTLC1543(uchar port)    //调用串行AD转换子程序       
{
    uint i;
    uchar datah,datal; //datah表示十位有效数字中的高两位,datal表示十位数据中的低八位数据               
    CLOCK=0;      //根据时序图分别设置CS,CLOCK,EOC         
    CS=0;          //片选端
    //EOC=1;          //表明数据转换中
    port<<=4;      //用port的值来选择是哪个AD芯片的哪个通道                     
    for(i=0;i<4;i++)//把通道写入TLC1543芯片中
    {
        ADIN=(bit)(port&0x80);
经济研究导刊
        CLOCK=1;
        CLOCK=0;  //只需要CLOCK一个下降沿就能写入,其他接口的电平不变化
阻尼线        port<<=1; //根据时序图,先写入MSB即最高位,需要左移,然后继续写下一位
    }
    for(i=0;i<6;i++)//填充6个CLOCK         
    {
        CLOCK=1;
        CLOCK=0;
    }
    CS=1;
    delay(10);
    CS=0;    //等待AD转换
    for(i=0;i<2;i++)  //取D9和D8位       
    {
        CLOCK=1;
        datah<<=1;
        if(DOUT) datah|=0x01;
        CLOCK=0;
    }   
    for(i=0;i<8;i++)//取D7~D0位         
    {
        CLOCK=1;
        datal<<=1;
        if(DOUT) datal|=0x01;
        CLOCK=0;
    }   
    //EOC=0; //表明数据转换传输完毕
    CS=1;//片选关闭
    ad=datah;//高两位值赋给变量ad
    ad<<=8;//数据左移8加上一步的两位,构成是十位有效数字
    ad|=datal;// 把datal的值赋给ad的第八位,这样构成十位有效数字,由datah和datal组成
    ad=(ad*0.004887)*1000;//输出端数据十位二进制转换成对应的电压值,即0~1023对应0~5V电压
    return(ad) ;
}
 
void main()
{
 
    while(1)
      {
          a=readTLC1543(0x01);//这里送的0x01表示采样端口为第二端口    AND1
        mileage=ad/100; //去前两位数字
湖北理工学院人文社科部        cost=ad%100;//去后两位数字
        display(mileage,cost);//调用显示函数
      }
   
}

本文发布于:2024-09-23 06:28:34,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/588054.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:转换   数据   显示   调用   下降   接口   写入   湖北
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议