51单片机利用中断控制灯频率和顺序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include //包含51单片机寄存器定义的头文件#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;

}

}

相关文档
最新文档