| 下面这个程序是用定时器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--);
 }
 |