51单片机独立按键实现LED显示二进制【代码详解】
——按位取反
——具体实现原理
提示:以下是本篇文章正文内容,下面案例可供参考
按位取反,顾名思义, 按照 位 (bit)取反
二进制只有0和1,其中1代表 真 ,0 代表 假 。例如:二进制数 1001取反后为0110
1字节=8位,这次实验使用的是P2总线 (8位)
其中这8位默认八个1 ,高电平 ,点灯是低电位 0 点亮
二进制表示:1111 1111
#include
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char i=0;
while(1)
{
if(P3_0==0) //如果K1按键按下
{
Delay(20); //延时消抖
while(P3_1==0); //松手检测
Delay(20); //延时消抖
i++; //变量自增
P2=~i; //变量取反输出给LED
}
}
}
首先 这是对总线的操作,总线有八位,赋值一次便可以赋值到总线的8位 ,这里的八位可以理解成八个通道
Ps:本次实验使用P2总线 即:P2_0~P2_7 ,按键使用P3_1
按一次按键 执行一次i++;实现原理看代码
假设按了八次,分别对应 i的值
取反前: 1,2,3,4,5,6,7,8
取反后:-2,-3,-4,-5,-6,-7,-8,-9
对应的二进制值(取8位):
1111 1110,1111 1101,1111 1100,1111 1011,1111 1010,1111 1001,1111 1000,1111 0111
按八次,分别将这八个值,分别赋值给P2总线
单片机就会以这样的二进制顺序点亮LED
视频:
https://live.csdn.net/v/207479
理解取反运算,理解给总线赋值。