用TLC549ADC和ZLG7290设计一个简易数字电压表

2019-07-16 05:26发布

/*电压表程序设计*/
#include <REG51.h>
#include <intrins.h>
#include <absacc.h>
#include "VIIC_C51.h"
#include "ZLG7290.h"
#define uchar  unsigned char
#define uint   unsigned int
#define ulong  unsigned long
#define ZLG7290 0x70 //定义器件地址
//定义TLC549串行总线操作端口
sbit CLK=P1^5;
sbit DAT=P1^1;
sbit CS=P1^2;
//定义I2C总线控制端口
sbit SDA=P1^7;
sbit SCL=P1^6;
sbit RST=P3^1;
//显示缓冲区初始化:DP-51PRO
uchar disp_buf[8]={0x15,0x18,0x16,0x01,0x05,0x1f,0x16,0x0d};
uchar bdata ADCdata;
sbit ADbit=ADCdata^0;
/***************************************************
**函数名称: TLC549ADC()
**函数功能: 读取上一次A/D转换的数据,启动下一次A/D转换
****************************************************/
uchar TLC549ADC(void)
{
uchar  i;
CLK=0;
DAT=1;
CS=0;
for(i=0;i<8;i++)
{
  CLK=1;
  _nop_();
  _nop_();
  ADCdata<<=1;
  ADbit=DAT;
  CLK=0;
  _nop_();  
}
return (ADCdata);
}
/****************************************
**函数名称: delay()
**函数功能: 硬件延时50MS程序
**入口参数: i
****************************************/
void delay(uchar i)
{ uchar j;
  for(j=0;j<i;j++)
    {
     TMOD=0x01;
     TH0=0X3C;
     TL0=0XB0;
     TF0=0;ET0=0;
     TR0=1;
     while(!TF0);
     TR0=0;TF0=0;
    }
}
/*A/D数据转换处理和输出显示功能函数*/
/*******************************************
**函数名称: display()
**函数功能: 处理A/D转换后的数据并输出显示
********************************************/
void display(uchar advalue)
{
ulong  ad_disp;
ad_disp=((ulong)advalue)*500/255;
    disp_buf[2] =(uchar)(ad_disp/100%10)+0x80;
    disp_buf[1] =(uchar)(ad_disp/10%10);
    disp_buf[0] =(uchar)(ad_disp/1%10);
    ZLG7290_SendBuf(disp_buf,8);
}
/*****************************
**主程序函数
*****************************/
void main()
{
uchar ad_sample;
RST=0;
delay(1);
RST=1;
ZLG7290_SendBuf(disp_buf,8);
ZLG7290_SendData(0X15,0X02);
   disp_buf[7] =0x1f;   
    disp_buf[6] =0x1f;  
    disp_buf[5] =0x1f;
    disp_buf[4] =0x1f;
    disp_buf[3] =0x1f;
delay(50);
while(1)
{
  ad_sample=TLC549ADC();
  display(ad_sample);
  delay(6);
}
}
这是单片机的一段源程序,但是连接到周立功实验箱时,LED就是不亮,求指导呀!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。