TLC549AD仿真求助

2019-07-18 14:17发布

求大神查看我的仿真图是否正确,为什么总显示乱码。我搜了好多没看到关于TLC549 的仿真图!
附程序: #include<reg51.h>
//定义显示数组d[4]以及一个变量n用于动态显示
unsigned char d[4],n;
//定义显示用的查找表
unsigned char code table[11]={0x3f,6,0x5b,0x4f,
                   0x66,0x6d,0x7d,7,0x7f,0x6f,0}; //0--9 最后再有一个空
unsigned char code digit[4]={0xf7,0xf6,0xf5,0xf4};
//定义TLC549转换接口
sbit tlc549_cs=P1^4;
sbit tlc549_clk=P1^3;
sbit tlc549_data=P1^5;
//定义可位寻址的变量adc用于存放ad转换值,
//以及一个bit变量用于移位,它指示了ad的最最低一位
unsigned char bdata adc;
sbit  adclow=adc^0;

//ad转换函数
unsigned char adconvert()
{   unsigned char i;
    tlc549_cs=1;
    tlc549_cs=0;
    tlc549_clk=0;
    for(i=0;i<8;i++)
    {   tlc549_clk=1;
        adclow=tlc549_data;
        tlc549_clk=0;
        if(i<7) adc=adc<<1;
    }
    tlc549_clk=0;
    tlc549_cs=1;
    return(adc);
}

/******将ad转换BCD码值显示出来**********/
vtobcd(unsigned int hexs)
{      
        d[0]=hexs/1000;
        hexs=hexs % 1000;
        d[1]=hexs/100;
        hexs=hexs % 100;
        d[2]=hexs/10;
        hexs=hexs % 10;
        d[3]=hexs;
  return 0;
}

/*******延时函数***********/
void delay(unsigned char dy)
{
   while(--dy);
}

/*****定时器初始化函数********/
void Init_timer (void)
{
    TMOD=0X21;
    TR0=1;
    ET0=1;
    EA=1;
}

/**********定时器0中断服务函数*****************/
void timer0() interrupt 1 using 1
{
    TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
    n=n++;
    if(n>3) n=0;
    P0=0;
    P2=digit[n];
    P0=table[d[n]];
}

/******主函数main*************/
//效果就是显示测量的电压值;
//电压值用mv为单位,范围 0--5000mv
//由于测量值的范围为0--255,所以中间要乘一个系数19.6
/*****************************/
void main()
{   
unsigned char ad,j;
Init_Timer();
    //变量初始化
    n=0;
    while(1)
     {
     ad=adconvert();  //ad转换
  vtobcd(ad*19.6);    //将ad转换BCD码
        for(j=0;j<200;j++)  delay(250);
     }
}

TLC549AD转换图 TLC549AD转换图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。