51单片机流水灯中断.doc

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
// 51 单片机控制 8 个 LED灯,左右循环移动, 当外部中断 0 引脚的按键,第一次按下时, 停在当前位置;第二次按下时,继续向下执行 //***************************************************************************** ***************************************** 注释:当主函数中在执行左右流水点亮 LED灯的时候,按键按下(这是第一次按下,即奇数次), CPU 暂时 中断当前点亮灯的工作,转去处理中断程序( c=1),处理完后,再返回原来中断的地方继续原来的工作, // 因为这时候 C 为 1, while(c); 为真,为死循环状态,即是 LED 亮的状态停在当前位置;当按键按下(这是第二次按下,即偶数次) //CPU 中断当前状态,转去处理中断程序( c=0),处理完后,再返回原来中断的地方继续原 来的工作, 这时候 C 为 0, while(c); 为假,则程序继续向下执行。 //***************************************************************************** ****************************************** #include<> #include<>// 控制左右移的头文件 void delay(int);// 声明延时函数 unsigned char i=0,a=0,b=0,c=0;//a 为判断按键按下时奇数次还是偶数次 void main() { P2=0xfe; IT0=0;// 低电平有效 EX0=1;// 开外部中断 0 EA=1; // 开总中断 while(1) { for(i=0;i<7;i++)// 左循环 { b=1; while(c);//C 为 0 时,顺序向下执行,为 1 时停在当前状态, P2=_crol_(P2,1); delay(500); } for(i=0;i<7;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;i<n;i++) for(j=0;j<50;j++); }

文档评论(0)

152****6621 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档