单片机控制adc0809读取电压值,用数码管显示,不正常,只显示0;加输入后还是显示0

P1口做数据口

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define disdata P0 //显示数据码输出口
unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

sbit ST=P3^0;
sbit EOC=P3^1;
sbit OE=P3^2;
sbit CLK=P3^3;
/**********延时函数************/
void delaynms(uchar i)
{
uchar j;
while(i--)
{
for(j=125;j>0;j--)
;
}
}
/*********系统初始化***********/
void Init_Time()
{
EA = 1; //开总中断
TMOD = 0x02; //设定定时器T0工作方式2
TH0=0xff; //利用T0中断产生CLK信号
TL0=0xff;
TR0=1;//启动定时器T0
ET0=1;
}
/***********T0中断服务程序************/
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
/***********AD转换函数**********/
void Init_AD()
{
OE=0;
ST=0;
ST=1; //启动AD转换
ST=0;
delaynms(2);
}
/*******数码管显示******/
void display(uint ad_data)
{
P0=tab[ad_data/100];
P2=0xfe;
delaynms(1);
P0=tab[ad_data%100/10];
P2=0xfd;
delaynms(1);
P0=tab[ad_data%10];
P2=0xfb;
delaynms(1);
P2=0xff;
}
/**********主函数*******/
void main()
{
uint ad_data=0;
Init_Time();
Init_AD();
P1=0x00;
while(1)
{
while(EOC==0);
OE=1;
ad_data=P1;
OE=0;
display(ad_data);
}
}

我感觉有一下问题:
1是显示延时时间太短,你将延时参数改为5试试
2是定时器中断工作可能不正常吧,1个机器周期就溢出但你的中断服务程序时间就不可能1个机器周期完成。(响应,取反,返回)
温馨提示:答案为网友推荐,仅供参考
相似回答