程序如下:为什么不能循环点亮LED灯?
#include"key.h"
void key_Proc(); //按键处理
void led_Proc(); //灯处理
void Timer0Init(); //中断初始化
void led_Proc0(); //灯处理
void main()
{
P2 = 0;
P1 = 0;
Timer0Init(); //中断初始化
while(1)
{
key_Proc(); //按键处理
led_Proc(); //灯处理
led_Proc0(); //灯处理
}
}
void key_Proc() //按键处理
{
if(flag1ms) //1ms时间标志
{
flag1ms = 0;
if(KEY)
{
if((keyTim>10)&&(keyTim<500)) //按键时间大于10ms小于50ms,是短按键
{
keyshort = 1; //短按键标志
}
keyTim = 0; //按键时间清零
}
else
{
if(keyTim<10000) //按键时间小于10S
keyTim++; //按键时间加
if(keyTim==2000) //按键时间为1S
{
keylong = 1; //长按键标志
}
}
}
}
void led_Proc() //灯处理
{
if((LEDON==0)&&(keylong==1)) //关灯状态同时长按键按下就开灯
{
keylong = 0; //长按键松开
LEDON = 1; //关灯时就开灯
LEDR = 1; //RGB灯亮白光
LEDG = 1;
LEDB = 1;
}
if((LEDON==1)&&(keylong==1)) //开灯状态同时长按键按下就关灯
{
keylong = 0; //长按键松开
LEDON = 0; //开灯时就关灯
LEDR = 0; //RGB灯灭
LEDG = 0;
LEDB = 0;
}
}
void led_Proc0() //灯处理
{
if(LEDON==1) //开灯状态同时短按键按下,亮灯模式切换
{
switch(i)
{
case 0:LED3 = 1;LED4 = 0;LED5 = 0; if(num1==t1)num1=0; i=1;break; //红
case 1:LED3 = 1;LED4 = 1;LED5 = 0; if(num1==t2)num1=0; i=2;break; //黄
case 2:LED3 = 0;LED4 = 1;LED5 = 0; if(num1==t3)num1=0; i=3;break; //绿
case 3:LED3 = 0;LED4 = 1;LED5 = 1; if(num1==t1)num1=0; i=4;break; //青
case 4:LED3 = 0;LED4 = 0;LED5 = 1; if(num1==t2)num1=0; i=5;break; //蓝
case 5:LED3 = 1;LED4 = 0;LED5 = 1; if(num1==t3)num1=0; i=6;break; //紫
case 6:LED3 = 1;LED4 = 1;LED5 = 1; if(num1==t1)num1=0; i=0;break; //白
}
}
}
void Timer0Init() //中断初始化
{
AUXR &= 0x80; //定时器时钟12T(12分频)模式
EA = 1; //开中断
TMOD &= 0XF0; //中断0模式1
TMOD |= 0X01;
TH0 = 0XFC; //初值1ms
TL0 = 0X66;
ET0 = 1; //允许T0中断
TR0 = 1; //定时器0开始计时
}
void interruptTimer0() interrupt 1
{
TH0 = 0XFC;
TL0 = 0X66;
flag1ms = 1; //1ms标志
sysTim++; //系统时间
if(sysTim==1000)
{
sysTim=0;
j++;
}
if(j==num1)
{
j=0;
}
}
|