按键控制硬件端口状态按顺序单位转移

#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个端口,可以改变端口状态的数量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值