1、/51单片机控制8个LED灯,左右循环移动,当外部中断0引脚的按键,第一次按下时,停在当前位置;第二次按下时,继续向下执行/*/注释:当主函数中在执行左右流水点亮LED灯的时候,按键按下(这是第一次按下,即奇数次),CPU暂时/中断当前点亮灯的工作,转去处理中断程序(c=1),处理完后,再返回原来中断的地方继续原来的工作,/因为这时候C为1,while(c);为真,为死循环状态,即是LED亮的状态停在当前位置;当按键按下(这是第二次按下,即偶数次)/CPU中断当前状态,转去处理中断程序(c=0),处理完后,再返回原来中断的地方继续原来的工作,/这时候C为0,while(c);为假,则程序继续向
2、下执行。/*#include#include/控制左右移的头文件void delay(int);/声明延时函数unsigned char i=0,a=0,b=0,c=0;/a为判断按键按下时奇数次还是偶数次void main() P2=0xfe;IT0=0;/ 低电平有效EX0=1;/开外部中断0EA=1; /开总中断while(1) for(i=0;i7;i+)/左循环 b=1;while(c);/C为0时,顺序向下执行,为1时停在当前状态, P2=_crol_(P2,1); delay(500); for(i=0;i7;i+)/右循环 b=1;while(c);/C为0时,顺序向下执行,为1时停在当前状态, P2=_cror_(P2,1); delay(500); while(1);/等待中断void int0_int(void) interrupt 0 /中断服务函数 delay(40);/延时一段时间,消除抖动if(b=1) b=0; a+=1;/按键为奇数次时,停在当前的状态;偶数次时,接着原来的状态继续往下执行 if(a%2) c=1; else c=0; void delay(int n)/延时函数 unsigned int i,j; for(i=0;in;i+) for(j=0;j50;j+);