下面这个程序是用定时器0自动计时动态扫描显示函数,并用数码管显示,显示的数值是DA0804转换来的数值。但是在外部旋转DA的可变电阻时,数码管不实时改变数值,请问是什么问题?
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar dspflag,tflag,a,ad;
sbit dula=P2^6;
sbit wela=P2^7;
sbit dacs=P3^2;
sbit wr=P3^6;
sbit rd=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code table2[]={
0x7f,0x7b,0x7d,0x7e,
0x5f,0x6f,0x77};
void delay(uint z);
void display(uchar a);
void chushi();
void DA();
void main()
{
chushi();//定时器程序初始化
DA();
}
void DA()
{
wela=1;
P0=0x7f;
wela=0;
while(1)
{
wr=1;
_nop_();
wr=0;
_nop_();
wr=1;
for(a=10;a>0;a--)
display(ad);//显示测试电压值
P1=0xff;
rd=1;
_nop_();
rd=0;
_nop_();
ad=P1;
rd=1;
}
}
void chushi()//定时器程序初始化
{
TMOD=0X02;
TH0=0X48;//装初值,记一次199.65μm
TL0=0X48;
EA=1;
ET0=1;
TR0=1;
}
void time0() interrupt 1//中断动态扫描显示函数
{
tflag++;
if(tflag==10)
{
tflag=0;
dspflag++;
if(dspflag==3)
dspflag=0;
}
}
void display(uchar a)//显示函数
{
if((dspflag==0)&&(a>99))
{
P0=0;
dula=1;
P0=table[a/100];
dula=0;
P0=0xff;
wela=1;
P0=table2[1];
wela=0;
}
if((dspflag==1)&&(a>9))
{
P0=0;
dula=1;
P0=table[a%100/10];
dula=0;
P0=0xff;
wela=1;
P0=table2[2];
wela=0;
}
if(dspflag==2)
{
P0=0;
dula=1;
P0=table[a%10];
dula=0;
P0=0xff;
wela=1;
P0=table2[3];
wela=0;
}
}
void delay(uint z)//延迟函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
} |