stc12c5a60s2单片机通用中断方式C语言编程读取按键S1,并记录S1按下的的次数,将该次数通过P2端口输出。

外部中断INT0上连接S1,用于中断计数,每次按下S1时触发INT0 中断
补充:P3.5接S2用于清零(求一个完整程序)

#include<at89x51.h>
unsigned char cont;//定义按键计数变量
void delayms(unsigned char time)//stc 1t 12MHz 1ms延时
{
    unsigned char a,b,c;
  while(time--)  
    for(c=1;c>0;c--)
        for(b=222;b>0;b--)
            for(a=12;a>0;a--);
}


void main(void)
{
P2=cont=0;
IT0=1;//设置触发方式为下降沿触发
EX0=1;//打开外部中断0
EA=1;//打开总中断
while(1)
{
if(!P3_5)//检测到S2按下
{
P2=cont=0;//清零数值
delayms(200);
}
}
}
void EXinterrupt0(void)interrupt 0//外部中断0
{
EX0=0;//关闭中断避免重复触发
IE0=0;//清零外部中断0标志位
cont++;//按键计数+1
P2=cont;//输出到P2显示
delayms(200);//延时段时间
EX0=1;//恢复外部中断0
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-03
亲,按键是有抖动的,记得消抖哦,要不一次按键会产生多次计数的追问

嗯嗯P3.5接S2用于清零(求一个完整程序)

追答

自己动手写写,偷懒不是好事