找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1023|回复: 1
收起左侧

哪位大神帮忙看一下,我做的是TLC0834采集0-5V在数码管上显示两位数,但现在只显示0.0

[复制链接]
ID:523543 发表于 2019-5-15 11:00 | 显示全部楼层 |阅读模式
/********************************* 包含头文件 ********************************/
#include <reg52.h>
#include <intrins.h>
/********************************* 端口定义 **********************************/

#define uchar unsigned char
#define uint unsigned int

sbit CS = P1^4;
sbit Clk = P1^2;
sbit DATI = P1^3;
sbit DATO = P1^1;
sbit  AD_SARS = P1^6;

sbit led2 = P2^1;
sbit led3 = P2^2;


/******************************* 定义全局变量 ********************************/
unsigned char dat = 0x00; //AD 值
unsigned char count = 0x00; //定时器计数
unsigned char CH; //通道变量
unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值
unsigned char c=0;
/******************************* 共阳 LED 段码表 *******************************/
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/****************************************************************************
函数功能 :AD 转换子程序
入口参数 :CH
出口参数 :dat
****************************************************************************/
unsigned char adc0834(unsigned char CH)
{
  unsigned char i,AI_data;
  CS = 1;
  _nop_();
  DATO = 1;
  _nop_();
  _nop_();
  Clk = 0;
  _nop_();
  CS = 0;
  _nop_();

  //Start BIT
  DATI = 1;
  _nop_();
  Clk = 1;
  _nop_();
  Clk = 0;
  _nop_();

  //SGL/DIF BIT
  DATI = 1;
  _nop_();
  Clk = 1;
  _nop_();
  Clk = 0;
  _nop_();
  
  //ODD/EVEN BIT   
  if((CH == 0x00) || (CH == 0x02))
  {
    DATI = 0;
  }
  if((CH == 0x01) || (CH == 0x03))
  {
    DATI = 1;
  }
  _nop_();
  Clk = 1;
  _nop_();
  Clk = 0;
  _nop_();

  //SELECT BIT
  if((CH == 0x00) || (CH == 0x01))
  {
    DATI = 0;
  }
  if((CH == 0x02) || (CH == 0x03))
  {
   DATI = 1;
  }
  _nop_();
  Clk = 1;
  _nop_();
  Clk = 0;
  _nop_();
  Clk = 1;
  _nop_();
  Clk = 0;
  _nop_();

  //读取转换的8位数据
  for(i=0;i<8;i++)
  {
    AI_data <<= 1;
        _nop_();
    AI_data+=(uchar)DATO;
    _nop_();
        Clk = 1;
        _nop_();
        Clk = 0;
        _nop_();
  }

  CS = 1;
  DATI = 1;
  return dat;
}

/****************************************************************************
函数功能 :将 0-255 级换算成 0.00-5.00 的电压数值
入口参数 :i
出口参数 :
****************************************************************************/
void convdata(unsigned char i)
{
dis[0] = i/51; //个位
dis[1] = (i%51)*10/51*2; //小数点后第一位
dis[2] = ((i%51)*10%51)*10/51*2; //小数点后第二位
}
/****************************************************************************
函数功能 :数码管显示子程序
入口参数 :
出口参数 :
****************************************************************************/
void display(void)
{
        P0=0xff;
        switch(c)
        {
                case 0:led2=0;led3=1;c++;P0=tab[dis[0]]&0x7f;;break;
                case 1:led2=1;led3=0;c=0;P0=tab[dis[0]];break;
                default :break;
        }
}
/****************************************************************************
函数功能 :主程序
入口参数 :
出口参数 :
****************************************************************************/
void main(void)
{
        TMOD = 0x01; //设置中断
        TH0=(65536-50000)/256;// 定时器 1 初值定时 50ms
        TL0=(65536-50000)%256;
        IE = 0x82;
        TR0 = 1;
        while(1) //主循环
        {
                dat = adc0834(CH);
                convdata(dat); //数据转换
                display(); //显示数值
        }
}
/****************************************************************************
函数功能 :定时器中断延时程序 这一段的作用时隔一段时间抽样一次 否侧显示的最后一位
会不稳定
入口参数 :
出口参数 :
****************************************************************************/
void timer0(void) interrupt 1
{
       
        TH0=(65536-50000)/256;// 定时器 1 初值定时 50ms
        TL0=(65536-50000)%256;
        count++;
        if (count == 0x01)
        {
                count = 0x00;
                dat = adc0834(CH);
        }
}

回复

使用道具 举报

ID:517382 发表于 2019-5-15 15:04 | 显示全部楼层
可以用仿真软件看一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表