打印

STC单片机中断和显示冲突问题求解

[复制链接]
1884|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
虚怀若谷|  楼主 | 2011-8-17 16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面这个程序是用定时器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--);
}

相关帖子

沙发
goto0514| | 2011-8-21 12:00 | 只看该作者
瞻仰一下!

使用特权

评论回复
板凳
NE5532| | 2011-8-21 15:55 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

3

帖子

0

粉丝