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

本文详细介绍了51单片机中使用unsigned char类型变量LEDNum进行IO口操作的原因,以及Delay函数实现的延时原理。程序通过检测P3_1状态,改变P2口的LED显示,并利用位操作实现数值的取反。重点讨论了单片机IO口的默认状态和位操作在程序中的应用。
摘要由CSDN通过智能技术生成
#include <REGX52.H>

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,取反操作也是按位进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值