51单片机独立按键控制LED显示二进制

#include 

void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
  while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
  }
}

void main()
{
	unsigned char LEDNum=0;//为什么要用	unsigned char ,因为该数据类型刚好是8位与51单片机IO 
                             口寄存器位数相同
	while(1)
	{
			if(P3_1==0)
			{
				Delay(20);
				while(P3_1==0);
				Delay(20);

				//单片机IO口默认 1111 1111
				LEDNum++;
			  P2=~LEDNum;//1111 1111 再加1就产生了溢出变为0000 0000
			}
	}
}

为什么要用 unsigned char ,因为该数据类型刚好是8位与51单片机IO 口寄存器位数相同。

上电后51单片机IO口默认为高电平

我在想这里的LEDNum为什么不是一个实际的数字去取反操作,比如P2=~2这种?

因为定义了一个LEDNum变量是unsigned char类型的,它在程序中是一个8位的二进制,代表0-255数字,单片机在运算时也是这个8位的二进制在进行运算,计算机只认识0和1,取反操作也是按位进行操作。

你可能感兴趣的:(51单片机学习笔记,51单片机,单片机,stm32)