#define uchar unsigned char //定宏义 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一个52标准内核的头文件 /******************************** * IO口定义 * ********************************/ sbit K0=P1^0; //R通道 sbit K1=P1^1; //G通道 sbit K2=P1^2; //B通道 sbit K3=P1^3; //W通道 sbit K4=P1^4; // AUTO RUN 模式 sbit K5=P1^5; // MUSIC 模式 sbit K6=P1^6; // DXM 控制模式 sbit K7=P1^7; // ALL LIGHT sbit K8=P3^2; /******************************** * 子函数定义 * ********************************/ void delay_ms(uint); void INTR0(); void ZT_0(); void ZT_1(); void ZT_2(); void ZT_3(); void ZT_4(); void ZT_5(); void ZT_6(); void ZT_7(); void ZT_8(); void ZT_9(); void ZT_10(); void ZT_11(); void ZT_12(); void ZT_13(); void ZT_14(); void ZT_15(); void ZT_16(); /******************************** * 参数定义 * ********************************/ uint a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s, aa=0,bb=0,cc=0,dd=0,ee=0,ff=0,gg=0,hh=0;
/******************************** * 主函数 * ********************************/ void main(void) { P0=0x00,P2=0x00; //端口初始化 while(1) { if (K4==0) //判断K4是否按下 { delay_ms(100); // ZT_0();if(a<33)continue; // ZT_1();if(b<41)continue; ZT_2();if(c<9)continue; //我想让这个子程序在这里循环3次,怎么修改呢。 ZT_7();if(h<16)continue; ZT_3();if(d<8)continue; ZT_16();if(s<9)continue; ZT_6();if(g<11)continue; ZT_8();if(k<5)continue; ZT_15();if(r<8)continue; ZT_4();if(e<5)continue; ZT_14();if(q<16)continue; ZT_5();if(f<5)continue; ZT_9(); ZT_10(); ZT_11(); ZT_12(); ZT_13(); if(K4==1) break; } else if(K5==0) //判断K5是否按下 { delay_ms(100); IT0=1; //设定中断触发方式 EX0=1; //开启外部中断1(INT1) EA=1; //打开总中断 INTR0(); if(K5==1) break; } else if(K0==0) //判断K0是否按下 { delay_ms(100); P0=0x22;P2=0x44; //R 亮 if(K0==1) break; } else if(K1==0) //判断K1是否按下 { delay_ms(100); P0=0x44;P2=0x22; //G 亮 if(K1==1) break; } else if(K2==0) //判断K2是否按下 { delay_ms(100); P0=0x88;P2=0x11; //B 亮 if(K2==1) break; } else if(K3==0) //判断K3是否按下 { delay_ms(100); P0=0x11;P2=0x88; //W 亮 if(K3==1) break; } else if(K6==0) { delay_ms(100); P0=0xff;P2=0xff;delay_ms(200); //频闪 P0=0x00;P2=0x00;delay_ms(100); if(K6==1) break; } else {P0=0x00;P2=0x00;} } }
/************************************ * 中断服务子程序 * ************************************/ void INTR0() interrupt 0 { uchar i; // PX1=1; EX0=0;
while(1) { if(!K8) { while(!K8); switch(i) { case 0: ZT_0();if(a<33) continue; break; case 1: ZT_1();if(b<45) continue; break; case 2: ZT_2();if(c<8) continue; break; case 3: ZT_16();if(s<9) continue; break; case 4: ZT_8();if(k<10) continue; break; case 5: ZT_7();if(h<16) continue; break; } i++; if(K5==1)break; if(i==5)i=0; EX0=1; } break; }
}
void delay_ms(uint z) { uint i,j; for(i=z;i>0;i--) for(j=100;j>0;j--); }
|