#include <REGX52.H>
void Delay(unsigned char t) //@12.000MHz cpu频率
{
while(t)
{
unsigned char i, j; /*输入无符号字符类型t(8bit),
进入循环体,每执行一次循环体-1,
执行t次每次1毫秒,所以函数为t毫秒延迟*/
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
t--;
}
}
/*
程序进程
while(1){
开机状态D1亮起:1111 1111 -> 0000 0001 P2=0x01
选择K1:D1->D8方向 选择K2:D8->D1方向 当到达终端时跳跃至另一端
K1 触发加1:Num++
0000 0001 -> 0000 0010 P2<<1 -> 1111 1101 按位取反~
0000 0001 -> 0000 0100 P2<<2 -> 1111 1011
0000 0001 -> 0000 1000 P2<<3 -> 1111 0111
0000 0001 -> 0001 0000 P2<<4 -> 1110 1111
0000 0001 -> 0010 0000 P2<<5 -> 1101 1111
0000 0001 -> 0100 0000 P2<<6 -> 1011 1111
0000 0001 -> 1000 0000 P2<<7 -> 0111 1111
K2 触发减1:Num--
0000 0001 -> 1000 0000 P2<<7 -> 0111 1111 按位取反~
0000 0001 -> 0100 0000 P2<<6 -> 1011 1111
0000 0001 -> 0010 0000 P2<<5 -> 1101 1111
0000 0001 -> 0001 0000 P2<<4 -> 1110 1111
0000 0001 -> 0000 1000 P2<<3 -> 1111 0111
0000 0001 -> 0000 0100 P2<<2 -> 1111 1011
0000 0001 -> 0000 0010 P2<<1 -> 1111 1101
0000 0001 -> 0000 0001 P2<<0 -> 1111 1110
}
移动的量定义为无符号的字符Num (8bit) 当遇到0-1或7+1时触发越界 使用判断进行重新赋值
*/
int main()
{
unsigned char Num=0;
P2=~(0x01);
//P2=0xFE; //若要改变初始位置,移位的初始状态也跟着改变,不然不是从初始位置开始移位。
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0); //P3_1松开动作检测。如却该行,将执行下列的赋值操作,器件一直被依次赋予低电平,器件被接通
Delay(20);
Num++;
if(Num>=8)//端口数
{
Num=0;
}
P2=~(0x01<<Num);
}
if(P3_0==0)
{
if(Num==0)
{
Num=8;//端口数
}
else
{
Num--;
Delay(20);
while(P3_0==0); //P3_0松开动作检测
Delay(20);
P2=~(0x01<<Num);
}
}
}
}
延时函数定义按照12mHZ芯片定义
硬件端口为8个端口,可以改变端口状态的数量