话不多说 上代码
#include <REGX52.H> //51单片机的头文件,可以用来调用P2口,寄存器
#include <INTRINS.H>
void Delay500ms() //这是我在stc-isp下载的延时函数 ,在我主页会有讲解
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P2=0xFE;//1111 1110
Delay500ms();
P2=0xFD;//1111 1101
Delay500ms();
P2=0xFB;//1111 1011
Delay500ms();
P2=0xF7;//1111 0111
Delay500ms();
P2=0xEF;//1110 1111
Delay500ms();
P2=0xDF;//1101 1111
Delay500ms();
P2=0xBF;//1011 1111
Delay500ms();
P2=0x7F;//0111 1111
Delay500ms();
}
}
这是个流水灯代码,点灯方式是通过16进制的0 1进行高低电平控制
一次可以控制8个灯 ,0就是亮,1就是灭。
而sbit取名一次只能控制一个灯
LED灯单向导电,左边是正极,右边是负极。
正极是高电平,为1 。右边VCC已经通电,我们能控制的是负极,如果右边是0,刚好是个通路,就会点亮,反之则不会亮。
在数字电路中,
高电平一般是5V,用1代替,
低电平一般是0V,用0代替,
这里的“1”指的就是高电平,“0”代表低电平,
电流从高电平流向低电平,用电器才能收到信号工作。
是绝对的,固定不变的。
还有一种sbit的写法
#include <reg52.h>
//对八个LED分别进行位定义,可以理解为C语言中的赋值,把P口对应的给一个新的名字
//sbit就是取名的
sbit LED1 = P2^0;
sbit LED2 = P2^1;
sbit LED3 = P2^2;
sbit LED4 = P2^3;
sbit LED5 = P2^4;
sbit LED6 = P2^5;
sbit LED7 = P2^6;
sbit LED8 = P2^7;
void main()
{
//LED为共阳极低电平LED亮
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
LED5 = 0;
LED6 = 0;
LED7 = 0;
LED8 = 0;
}
定义方法:sbit 位名=特殊功能寄存器^位置;
sbit LED1 = P2^0;
符号"^"前面是特殊功能寄存器的名字,后面的数字定义的可寻址位在特殊功能寄存器中的位置,取值必须是0~7
p2是连接LED的IO口,p2^0到7分别对应LED1到8