单片机外部int0中断消除抖动
时间:10-02
整理:3721RD
点击:
#include<reg51.h>
#define n 700
void ys(int i);
void dxs();//LED灯显示
void xxs();//数码管显示
int k=1;
int qianwei=0,baiwei=0,shiwei=0,gewei=0;
void main()
{
EA=1;
EX0=1;
IT0=1;
P1=0x00;
while(1)
{
xxs();
}
}
void int_0() interrupt 0
{
ys(n);
qianwei=k/1000;
baiwei=(k-qianwei*1000)/100;
shiwei=(k-qianwei*1000-baiwei*100)/10;
gewei=(k-qianwei*1000-baiwei*100-shiwei*10);
k=k+1;
dxs();
}
void xxs()
{
char zs[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xff};//置数数组
P2=0x7f;
P0=zs[qianwei];
ys(n);
P2=0xbf;
P0=zs[baiwei];
ys(n);
P2=0xdf;
P0=zs[shiwei];
ys(n);
P2=0xef;
P0=zs[gewei];
ys(n);
}
void dxs()
{
P1++;
}
void ys(int i)
{
int j;
for(j=0;j<i;j++);
}这个程序我自己编写思路是:利用外部中断函数实现按键累加(用数码管显示十进制数),同时用8个LED表示二进制数(LED显示10进制数对应的二进制数),程序如上,但是有一个外部中断函数的按键消除抖动的问题一直不能解决!
问题如下:如果用延时消除抖动,延时时间过长,那么在数码管上显示的数字就要闪动的很厉害,上面的程序数码管显示的数字不会抖动(延时的时间刚好让它不闪烁) ,但是把程序烧录到芯片上,实际按下按键就会出现的抖动,(在仿真软件上不会)我想问问好心人怎么解决(外部中断)抖动的,(记得是外部中断)
#define n 700
void ys(int i);
void dxs();//LED灯显示
void xxs();//数码管显示
int k=1;
int qianwei=0,baiwei=0,shiwei=0,gewei=0;
void main()
{
EA=1;
EX0=1;
IT0=1;
P1=0x00;
while(1)
{
xxs();
}
}
void int_0() interrupt 0
{
ys(n);
qianwei=k/1000;
baiwei=(k-qianwei*1000)/100;
shiwei=(k-qianwei*1000-baiwei*100)/10;
gewei=(k-qianwei*1000-baiwei*100-shiwei*10);
k=k+1;
dxs();
}
void xxs()
{
char zs[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xff};//置数数组
P2=0x7f;
P0=zs[qianwei];
ys(n);
P2=0xbf;
P0=zs[baiwei];
ys(n);
P2=0xdf;
P0=zs[shiwei];
ys(n);
P2=0xef;
P0=zs[gewei];
ys(n);
}
void dxs()
{
P1++;
}
void ys(int i)
{
int j;
for(j=0;j<i;j++);
}这个程序我自己编写思路是:利用外部中断函数实现按键累加(用数码管显示十进制数),同时用8个LED表示二进制数(LED显示10进制数对应的二进制数),程序如上,但是有一个外部中断函数的按键消除抖动的问题一直不能解决!
问题如下:如果用延时消除抖动,延时时间过长,那么在数码管上显示的数字就要闪动的很厉害,上面的程序数码管显示的数字不会抖动(延时的时间刚好让它不闪烁) ,但是把程序烧录到芯片上,实际按下按键就会出现的抖动,(在仿真软件上不会)我想问问好心人怎么解决(外部中断)抖动的,(记得是外部中断)
按键不用外部中断,用定时中断最好了,还好加防抖
外部中断在单片机中占有很重要的作用。而且外部中断的优先级默认是最高的。平台单片机一般有两个外部中断---INT0、INT1。定时器中断是计数器从0XFFFF增加0x0000时 TF置1,外部中断触发条件是INT管脚电平变化。有电平下跳沿和低电平触发两种配置方式。
可以一试
另外买芯片,单片机 找我,去bom2buy.com。