ADC0804无法进行模数转换!请教高手!!!

2024-10-28 18:29:46
推荐回答(1个)
回答1:

这样的问题不好查 我的知识也有限 个人觉得有可能是Vin Vref 那的问题 还有可能是程序里wr和rd赋值顺序的问题 我给你看一下我的程序吧 我的程序仿真没问题 稍微有点复杂 你挑重点看
#include

#define RD P3_0
#define WR P3_1

code unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned int max,change,timer0_tick;
int result[]={0,0,0,0};

void delay(void)
{
unsigned i,j;
for(i=0;i<30;i++)
for(j=0;j<10;j++);
}

void display(void)
{
unsigned char i;
P1=0x01;
for(i=0;i<4;i++)
{
P3=P1;
P1=0x00;
P2=table[result[i]];
P1=P3;
delay();
P1=P1<<1;
}
}

static void timer0_initialize(void)
{
EA=0;
timer0_tick=0;
TR0=0;
TMOD&=0x05;
TL0=11;
TH0=0xDC;
PT0=0;
ET0=1;
TR0=1;
EA=1;
}

static void timer0_isr(void) interrupt 1 using 1
{
TR0=0;
TL0=11;
TH0=0xDC;
TR0=1;
timer0_tick++;
if(timer0_tick==50)
{
WR=0;
timer0_tick=0;
WR=1;
}
}

void calculation(void)
{
if(change>99)
{
change=99;
}
result[2]=change/10%10;
result[3]=change%10;
if(change>max)
{
max=change;
result[0]=max/10%10;
result[1]=max%10;
}
}

static void int0_isr(void) interrupt 0 using 0
{
P0=0xff;
RD=0;
change=P0;
RD=1;
calculation();
display();
}

void main(void)
{
timer0_initialize();
IT0=1;
EX0=1;
while(1);
}