AT89C51小白的LTC1549 A/D转换器 电压表

来源:互联网 发布:mysql运行原理 编辑:程序博客网 时间:2024/04/29 15:56
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>


sbit CLK = P2^0;
sbit DATA = P2^1;
sbit CS = P2^2;
sbit BUZ_CON = P3^7;


unsigned int ADConvert(void);
void Delay(void);
void Display(void);


unsigned char DisplayBuf[5] = {0};            
unsigned char code CharCode1[] =        
{
    0xc0, 0xF9, 0xA4, 0xB0, 0x99,  
0x92, 0x82, 0xF8, 0x80, 0x90 
};
unsigned char code CharCode2[] =        
{
    0x40, 0x79, 0x24, 0x30, 0x19
};    


void main(void)
{
   unsigned int i,ad;
unsigned char pos;
float adf;
int j,zh,i1,i2;


while(1)
{
ad = ADConvert();
    ad = ADConvert();
adf = (ad*5.0)/1024.0;

zh = (int)(adf*100)/100;  
            i1 = (int)(adf*100)/10%10;  
            i2 = ((int)(adf*100))%10;


if(zh == 4)
{
   if(i1 == 9)
{
   if(i2 == 9)
{
   BUZ_CON = 0;
   for(j = 0; j < 1000; j++);
   BUZ_CON = 1;
}
}
}

P0 = 0;
P1 = 0xff;

DisplayBuf[0] =  0;  
DisplayBuf[1] = i2;
DisplayBuf[2] = i1;
DisplayBuf[3] = zh;




pos = 0x80;
for(i=0;i<3;i++)
            {
            P1=CharCode1[DisplayBuf[i]];
            P0=pos;
            pos>>=1;
            Delay();
            }
P1=CharCode2[DisplayBuf[3]];
            P0=pos;
            pos>>=1;
            Delay();


P1=CharCode1[0];
            P0=pos;
            pos>>=1;
            Delay();



}
}


unsigned int ADConvert(void)
{
    int i;
unsigned int ad;
ad = 0;
DATA = 1;
CS = 0;
for(i=0; i<10; i++)
{
   ad <<= 1;
CLK = 0;
_nop_ ();
_nop_ ();
_nop_ ();
      CLK = 1;
if(DATA) ad |= 0x01;
else ad &= 0xFFFE;
}
CS = 1;
return ad;
}


void Delay(void)  
{
    int i;
i= 100;
while(i--);
}
原创粉丝点击