實(shí)現(xiàn)k1控制LED左移,k2控制LED右移,k3啟動(dòng)向右流水越來越快(嗯一次塊一次),k4控制向右流水越來越慢(嗯一次慢一次),為什么我這個(gè)代碼會(huì)變成流水快慢快
#include<reg52.h>
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define led P2
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
extern m=1;g=50; //定義全局變量m,g
void delay(u16 i) //延遲函數(shù)
{
while(i--);
}
void LEDone() //實(shí)現(xiàn)按一下k1左移功能
{
if(led==0xff) //假如led全部不亮,就亮第一個(gè)燈,并實(shí)現(xiàn)左移第二燈亮
{
led=0x7f;
}
led=_cror_(led,1);
}
void LEDtwo() //實(shí)現(xiàn)按一下k2右移功能
{
if(led==0xff) //假如led全部不亮,就亮第一個(gè)燈,并實(shí)現(xiàn)右移第二燈亮
{
led=0x7f;
}
led=_crol_(led,1);
}
void speed() //變速函數(shù)
{
if(g>1)
{
if(k3==0) //檢查k3是否按下
{
delay(1000); //消抖
if(k3==0) //再次檢查k3是否按下
{ g=g-5; //每按一次k3,g減小,從而實(shí)現(xiàn)按一次左移流水變快
}
while(!k3); //判斷k3是否松開
}
}
if(k4==0) //檢查k4是否按下
{
delay(1000); //消抖
if(k4==0) //再次確認(rèn)k4是否按下
{ m=m+5; //每按一次k4,m增大,從而實(shí)現(xiàn)按一次右移流水變慢
}
while(!k4); //判斷k4是否松開
}
}
void LED_right() //實(shí)現(xiàn)向右流水
{
u8 i,a=0;
while(1)
{
for(i=0;i<7;i++) //流水
{
led=_crol_(led,1);
delay(5000*m); //實(shí)現(xiàn)變速(按一次k4,m值變大一次從而實(shí)現(xiàn)流水延遲時(shí)間越來越長,流水速度變慢)
speed(); //調(diào)用變速函數(shù),由k4控制越來越慢
if(k1==0||k2==0) //判斷k1/k2是否按下
{
delay(1000); //消抖
if(k1==0||k2==0) //再次確認(rèn)k1/k2是否按下
{ a=1;while(!k1||!k2);break; } //如果按下k1/k2,跳出for循環(huán)
}
}
if(a==1)break; //跳出while循環(huán),停止流水
}
}
void LED_left() //實(shí)現(xiàn)向左流水
{
u8 i,a=0;
while(1)
{
if(g>1)
{
for(i=0;i<7;i++)
{
led=_cror_(led,1);
delay(5000*g); //實(shí)現(xiàn)變速(由于下面speed函數(shù)調(diào)用改變g)(按一次k3,g值變小從而實(shí)現(xiàn)流水延遲時(shí)間越來越短,流水速度變快)
if(k1==0||k2==0) //判斷k1/k2是否按下
{delay(1000);
if(k1==0||k2==0)
{a=1;while(!k1||!k2);break;} //如果按下k1/k2,跳出for循環(huán),
}
if(k4==0) //判斷k4是否按下,實(shí)現(xiàn)從k3向左流水切換到k4向右流水
{
delay(1000);
if(k4==0)
{LED_right();}
while(!k4);
}
speed(); //調(diào)用變速函數(shù),改變g大小,從而改變延遲時(shí)間
}
if(a==1)break; //跳出while循環(huán),停止流水
}
}
}
void keypros() //按鍵控制功能
{
if(k1==0||k2==0||k3==0||k4==0) //檢查k1或者k2或者k3或者k4是否按下
{
delay(1000);
if(k1==0)
{ LEDone();} //調(diào)用左移一位函數(shù)
if(k2==0)
{ LEDtwo();} //調(diào)用右移一位函數(shù)
if(k3==0)
{ LED_left();} //調(diào)用向左流水函數(shù)
if(k4==0)
{ LED_right();} //調(diào)用向右流水函數(shù)
while(!k1||!k2||!k3||!k4);
}
}
void main()
{ while(1)
{
keypros();
}
}
|