1.1LED的点亮
首先我们通过原理图看到LED1-----LED8 8个LED灯的I/O接口分别连接到了P1总串口端,分别对应P1_0----P1_7
所以我们可以通过分别给总串口赋值和单独串口赋值从而来控制LED灯的点亮,由于vcc接电源正极,所以LED灯赋予低电平共阴极,具体代码如下:
/*点亮第一个LED灯*/
#include <REGX52.H> //引入头文件
void main()
{
while(1)
{
P1=0xfe; //1111 1110 0x为16进制后缀转换成二进制,表示点亮第一个LED
P1_3=0xf7; //1111 0111 点亮第4个LED灯
}
}
2.2 LED灯的流水
顾名思义就是给LED灯增加延迟函数,从而达到流水灯的作用,
1.通过给整个LED灯赋值实现流水灯 2.通过内置库函数实现LED灯的流水
_crol_ 循环左移 _cror_ 循环右移 所属库 <intrins.h> ,具体代码如下:
#include <REGX52.H>
#include<intrins.h>
/*引入延迟500毫秒函数*/
//函数的调用
void Delay500ms(void) //@12.000MHz
{
unsigned char data i, j, k;
_nop_(); //可有可无,建议去掉,有些编译器可能没有此头文件 <intrins.h>
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
while(1)
{
P1=0xfe; //1111 1110
Delay500ms();
P1=0xfD; //1111 1101
Delay500ms();
P1=0xfb ; //1111 1011
Delay500ms();
P1=0xf7; //1111 0111
Delay500ms();
P1=0xef; //1110 1111
Delay500ms();
P1=0xdf; //1101 1111
Delay500ms();
P1=0xbf; //1011 1111
Delay500ms();
P1=0x7f; //0111 1111
Delay500ms();
}
}
#include <REGX52.H>
#include<intrins.h>
/*引入延迟500毫秒函数*/
//函数的调用
void Delay500ms(void) //@12.000MHz
{
unsigned char data i, j, k;
_nop_(); //可有可无,建议去掉,有些编译器可能没有此头文件 <intrins.h>
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
unsigned char LED=0xfe; //变量的初始化
while(1)
{
P1=LED; //点亮第一个LED灯
Delay500ms();
LED=_crol_(P1,1); //每次向左移一个LED灯;
}
}
对于函数的调用我们也可以引入自定义参数变量
#include <REGX52.H>
#include <intrins.h>
//函数的调用也可引用自定义参数
void Delay500ms(unsigned char x) //@12.000MHz 无符号非负整形
{
unsigned char data i, j, k;
while(x--)
{
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
unsigned char LED=0xfe; //变量的初始化
unsigned char time=500;
P1=LED; //点亮第一个LED灯
Delay1ms(500);
LED=_crol_(P1,1); //每次向左移一个LED灯;
time=time-100; //led流水循环每次时间减少100ms;可以控制流水灯速度
}
}
3.3 Key按键
首先我们观看S2——S5 四个key按键的原理图,发现其引脚所对应的位置分别为P3_4——P3_7.