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