流水灯加减速

来源:互联网 发布:千里眼软件黑屏 编辑:程序博客网 时间:2024/06/10 18:38
#include "reg52.h"


sbit KEY1 = P1 ^ 4;
sbit KEY2 = P1 ^ 5;
sbit KEY3 = P1 ^ 6;
sbit KEY4 = P1 ^ 7;


void delay(unsigned int t);
unsigned char Key_Scan(void);


void main()
{
unsigned char keyValue;
bit run = 0;
unsigned char i = 0;
unsigned int speed = 10000;


while (1)
{
   /* 流水灯 */
if (run)
{
P2 = ~(0x01 << i);
i++;         
i &= ~0x08;   // 限制 i 最大到 7
delay(speed);
}


/* 按键扫描 */
keyValue = Key_Scan();
if (keyValue != 0)
{
delay(1000);
if (keyValue != 0)
{
switch (keyValue)
{
case 1:
run = 1;
break;
case 2:
run = 0;
break;
case 3:
speed /= 2;
break;
case 4:
speed *= 2;
break;
}
}


while (KEY1 == 0 || KEY2 == 0 || KEY3 == 0 || KEY4 == 0) // 等待松手
{
P2 = ~(0x01 << i);
i++;         
i &= ~0x08;   // 限制 i 最大到 7
delay(speed);
}
}


}
}


void delay(unsigned int t)
{
  while (t--);
}


unsigned char Key_Scan(void)
{
unsigned char key = 0;


if (KEY1 == 0)
key = 1;
else if (KEY2 == 0)
key = 2;
else if (KEY3 == 0)
key = 3;
else if (KEY4 == 0)
key = 4;

return key;
}