#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P2^4;
sbit lcden=P2^6;
sbit lcdrw=P2^5;
sbit ADDO = P2^0;
sbit ADSK = P2^1;
uchar code table[] = { 0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x8 0,0x90,};
void delay_ms(uint z)
{
uint x; uchar y; for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
unsigned long get_ADValue(void)
{
uchar i;
unsigned long value=0;
ADDO=1;//51 CPU I/O input enable
ADSK=0;//enable AD
while (ADDO);
_nop_();//delay T1>0.1us
for (i=0;i<24;i++)
{
ADSK=1;
_nop_();//delay T3>0.2us
if (ADDO)
value++;
value=value<<1; ADSK=0;
_nop_();//delay T4>0.2us
}
ADSK=1;
_nop_();//delay T3>0.2us
ADSK=0;
_nop_();//delay T4>0.2us
value=value&0x007FFFFF;
return (value);
}
void display(uchar qian,uchar bai,uchar shi,uchar ge)
{
P0=table[qian];
P2=0xFE;//1111_1110,display bit[qian] delay_ms(100);
P0=table[bai];
P2=0xFD;//1111_1101,display bit[bai] delay_ms(100);
P0=table[shi];
P2=0xFB;//1111_1011,display bit[shi] delay_ms(100);
P0=table[ge];
P2=0xF7;//1111_0111,display bit[ge] delay_ms(100);
}
void main()
{
unsigned long num;
float num_f;
uchar qian,bai,shi,ge;
while (1)
{
num=get_ADValue();
num_f=num/8388607.0*4.80;//(2^13-1)*Power V oltage num=(num_f*1000-64.044)*1/0.763;
qian=num%10000/1000;
bai=num%1000/100;
shi=num%100/10;
ge=num%10;
display(qian,bai,shi,ge); }
} |