C51通过INT0控制定时器的问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 08:56:14
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^1; //0_Keep,1_Release
sbit ls=P2^0;
uchar code table[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f};
uint sign=0; //0_Stop,1_Run
uint temp=10000;
uint num=0;
void updata (uint num);
void main ()
{
TMOD=0x2; //工作方式为自动加载
EA=1;
ET0=1;
IT0=1;IT1=1; //外中断均为脉冲激发
EX0=1;EX1=1; //外中断0与1允许
TL0=0x38;
TH0=0x38;
updata (0); //刷新显示
// TR0=1;
while (1)
{
}

}

void updata (uint num)
{
uint l,r;
if (num<100&&num>=0)
{
r=num/10; //取模
l=num%10; //取余
rs=1;
ls=0;
P1=table[r];
rs=0;
ls=1;
P1=table[l];
ls=0;
}
}

void start () interrupt 0
{
if (sign==0)
{
sign=1; //置位记号
TR0=1;; //启动定时器 ????????
}

1,在函数updata (uint num) 里
...
P1=table[r];
rs=0;
ls=1;
P1=table[l];
...
这里是不是显示得过快了,中间没有延时,显示很混乱的。

2,在void start() interrupt 0里
第二个if(sign==1)改为else
下面的interrupt 2也是这样改

111