- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)