请教一个89c52 中断延时的问题
时间:10-02
整理:3721RD
点击:
我是新手,请教一个89c52 中断延时的问题.红外线传感器 跳变延 进中断 ,想要红外线在一定的时间内操作无效,一定时间后,给个中断, 数码管计数才可以加1,同时数码管还可以正常的显示
程序如下:
#include<reg52.h>
sbit T=P3^7; //位控制端
sbit R=P3^6; //段控制端
void delay(unsigned int sm);
unsigned char a=0;
unsigned int w[10]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0--9
unsigned int i,ti,ti1,ti2,ti3,ti4,ti5,ti6,ti7,ti8,j,x,y,tt;
unsigned int n=0;
unsigned int m=0;
void exter0() interrupt 0
{
n=n++;
}
void exter1() interrupt 2
{
m=m++;
}
void main()
{
ti=0;
EA=1,EX0=1,EX1=1;
IT0=1,IT1=1;
tt=0;
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
ti1=n/1000; //千位
ti2=(n-ti1*1000)/100;//百位
ti3=(n-ti2*100-ti1*1000)/10; //十位
ti4=n-ti3*10-ti2*100-ti1*1000;//个位
ti5=m/1000; //千位
ti6=(m-ti5*1000)/100;//百位
ti7=(m-ti6*100-ti5*1000)/10; //十位
ti8=m-ti7*10-ti6*100-ti5*1000;//个位
T=1;
P0=0xfe;
T=0;
R=1;
P0=w[ti1];
R=0;
delay(2);
T=1;
P0=0xfd;
T=0;
R=1;
P0=w[ti2];
R=0;
delay(2);
T=1;
P0=0xfb;
T=0;
R=1;
P0=w[ti3];
R=0;
delay(2);
T=1;
P0=0xf7;
T=0;
R=1;
P0=w[ti4];
R=0;
delay(2);
T=1;
P0=0xef;
T=0;
R=1;
P0=w[ti5];
R=0;
delay(2);
T=1;
P0=0xdf;
T=0;
R=1;
P0=w[ti6];
R=0;
delay(2);
T=1;
P0=0xbf;
T=0;
R=1;
P0=w[ti7];
R=0;
delay(2);
T=1;
P0=0x7f;
T=0;
R=1;
P0=w[ti8];
R=0;
delay(2);
}
}
void delay(unsigned int sm)
{
for(i=sm;i>0;i--)
for(j=70;j>0;j--);
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
程序如下:
#include<reg52.h>
sbit T=P3^7; //位控制端
sbit R=P3^6; //段控制端
void delay(unsigned int sm);
unsigned char a=0;
unsigned int w[10]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0--9
unsigned int i,ti,ti1,ti2,ti3,ti4,ti5,ti6,ti7,ti8,j,x,y,tt;
unsigned int n=0;
unsigned int m=0;
void exter0() interrupt 0
{
n=n++;
}
void exter1() interrupt 2
{
m=m++;
}
void main()
{
ti=0;
EA=1,EX0=1,EX1=1;
IT0=1,IT1=1;
tt=0;
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
while(1)
{
ti1=n/1000; //千位
ti2=(n-ti1*1000)/100;//百位
ti3=(n-ti2*100-ti1*1000)/10; //十位
ti4=n-ti3*10-ti2*100-ti1*1000;//个位
ti5=m/1000; //千位
ti6=(m-ti5*1000)/100;//百位
ti7=(m-ti6*100-ti5*1000)/10; //十位
ti8=m-ti7*10-ti6*100-ti5*1000;//个位
T=1;
P0=0xfe;
T=0;
R=1;
P0=w[ti1];
R=0;
delay(2);
T=1;
P0=0xfd;
T=0;
R=1;
P0=w[ti2];
R=0;
delay(2);
T=1;
P0=0xfb;
T=0;
R=1;
P0=w[ti3];
R=0;
delay(2);
T=1;
P0=0xf7;
T=0;
R=1;
P0=w[ti4];
R=0;
delay(2);
T=1;
P0=0xef;
T=0;
R=1;
P0=w[ti5];
R=0;
delay(2);
T=1;
P0=0xdf;
T=0;
R=1;
P0=w[ti6];
R=0;
delay(2);
T=1;
P0=0xbf;
T=0;
R=1;
P0=w[ti7];
R=0;
delay(2);
T=1;
P0=0x7f;
T=0;
R=1;
P0=w[ti8];
R=0;
delay(2);
}
}
void delay(unsigned int sm)
{
for(i=sm;i>0;i--)
for(j=70;j>0;j--);
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
你的红外怎么控制的
就是红外避障传感器 在一定距离内给低电平