先不管你Led_R();里的代码有没用
你第三个模式的代码有思路上的问题因为while(num)里的代码是不断循环的而且比中断还要快
所以while(num)里的代码运行是:
num=25:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=24:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=23:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L().
.
.
num=2:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=1:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=0:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
表现出来就是乱闪
应该改为:
代码:
- if(KEYL==1 && signl==0 && D2==1 )//左转闪光两次流光一次
- {
- count3=0; //计数3清0
- signl=1;
- num=25;
- while(num)
- {
- LED11=0;//50%亮度
- Led_R();
- }
- num=25;
- while(num)
- {
- LED11=0;//50%亮度
- Led_R();
- }
- num=25;
- while(num)
- {
- LED11=0;//50%亮度
- Led_L();
- }
- // LED11=1;
- }
不过我从来都反对在大while(1)以内用其它while(xxx)
系统简单还好,如果有其它功能如按键扫描,数码管动态刷新等
就会被这个while(xxx)担误了
就如你的代码
在收到接收模块的信号后就要等其模式跑完后才能换其它模式