51单片机利用中断控制灯频率和顺序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
int e=0,f=0,d=1,a=0,b=0,c=0,delay=10,m=1,V=128;
G=1;
/*******************************************
函数功能:主函数
******************************************/
void main(void)
{
EA=1; //开放总中断
EX0=1; //允许使用外中断
ET0=1; //定时器0开
EX1=1;
TMOD=0X01;
IT0=1; //选择负跳变来触发外中断
IT1=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1)
; //无限循环,防止程序跑飞
}
/************************************************************** 函数功能:外中断T0的中断服务程序
**************************************************************/ Time() interrupt 1 //外中断0的中断编号为0
{
if(m%delay==0)
{ m=1;
switch(e)
{
case 0:
P1=G;
a++;
G=P1<<1;
// P1=G;
if(a==8)
{
a=0;
G=1;
}
break;
case 1: //反序
P1=V;
b++;
V=P1>>1;
// P1=V;
if(b==8)
{
b=0;
V=128;
}
break;
case 2: //中间到两边
P1=pow(2,4+c)+pow(2,3-c);
c++;
if(c==4)
{
c=0;
}
break;
case 3: //两边到中间
P1=pow(2,7-c)+pow(2,c);
c++;
if(c==4)
{
c=0;
}
break;
}
}
else m++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
mode() interrupt 0 //模式{
e++;
if(e==4)
e=0;
}
sudu() interrupt 2 //速度{
f++;
delay=delay*f;
if(f==3)
{
f=0;
delay=10;
}
}