#include<reg52.h>
#include <intrins.h>
#include <stdio.h>
#define uint unsigned int
#define uchar unsigned char
sbit ADDO=P1^1;
sbit ADSK=P1^0;
/////////数码管位选控制端/////////////////////////
sbit w1=P2^4;
sbit w2=P2^5;
sbit w3=P2^6;
sbit w4=P2^7;
/////四位共阴数码管段选//////////////////////////////////////////////
uchar table[22]={0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x45,
0xDF,0xD7,0xCF,0xDA,0x1B,0xDC,0x9B,0x8B,//0-F, 0-15
0x80,0x1a,0xce,0x00,0xff,0x4f};//'-',L,H,灭,全亮,n 16-21
long Lheight,Lheight1;
float j;
long k;
void delay(uint i)
{
uchar j;
for(i;i>0;i--)
for(j=110;j>0;j--);
}
//读711 AD数据子程序
unsigned long ReadCount(void)
{
unsigned long Count;
unsigned int ADval;
unsigned char i;
ADDO=1;
ADSK=0;
Count=0;
while(ADDO);
for(i=0;i<24;i++) //读24个bit
{
ADSK=1;
Count=Count<<1;
ADSK=0;
if(ADDO)Count++;
}
ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
ADSK=0;
ADval=(int)(Count>>8);
return(ADval);
}
//重量值数码管显示子程序
void display(void)
{
w1=0;P0=table[Lheight1%10000/1000];delay(10);
w1=1;P0=0x00;delay(1);
w2=0;P0=table[Lheight1%1000/100];delay(10);
w2=1;P0=0x00;delay(1);
w3=0;P0=table[Lheight1%100/10];delay(10);
w3=1;P0=0x00;delay(1);
w4=0;P0=table[Lheight1%10];delay(10);
w4=1;P0=0x00;delay(1);
}
void main()
{
uchar i;
for(i=0;i<10;i++)k=ReadCount();
while(1)
{
Lheight=ReadCount();
Lheight1=Lheight-k;
if(Lheight1<=2)Lheight1=0;
Lheight1=Lheight1*2;
for(i=0;i<20;i++)display();
}
}
如果想知道更多的东西,建议看一本书:吴鉴鹰单片机实战精讲,网上能找到,代码我给你了。
/******************************************************