题目:用ADC0808设计一个电压表,采用中断方式检测外部模拟电压(0-5V),并用数字量将其电压值表示出来(精确到小数点后两位)。
问题:有些数据会有0.01的误差,如何更改呢
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code TABLE[]={
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
// black - H J K L N o P U t G Q r M y
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
// 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
uchar code T_COM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar count,p,flag,i;
sbit START=P3^0;
sbit E0C=P3^2;
sbit OE=P3^1;
uint temp;
uchar address[3];
void init()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
EX0=1;
IT0=1;
}
void timer_0() interrupt 1 //定时器显示数码管
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
count++;
if(count%2)
{
P2=T_COM[p];
P1=TABLE[address[p]];
p++;
if(p==3)
p=0;
}
}
void INT_0() interrupt 0
{ uchar i;
OE=1;
temp=P0;
temp=temp*1.0/255*500;
OE=0;
for(i=0;i<3;i++)
{
address[i]=temp%10;
temp/=10;
}
address[2]+=32;
START=1;START=0;
}
void main()
{
START=0;
OE=0;
init();
START=1;
START=0; //启动A/D转换
while(1);
}