初探C51单片机LED
本人在网上自学51单片机,仅此作为自己的笔记,供日后参考,欢迎大佬指正。
点亮第一个LED
在编写程序之前,应先了解单片机中LED的工作原理。如图
LED即发光二极管,所以电流应在此图中有右向左流动,所以只需要在VCC端提供高电平,另一端提供低电平即可。假如希望点亮D8灯,则只需要在P27端提供低电平即可。如下代码即可点亮D8灯。
#include "reg52.h"
sbit led=P2^7;
void main()
{
while(1)
{
led=0;
}
}
在此代码中sbit led=P2^7;表示在以后的语句中用led即可代表P27端,注意此处P为大写。其中,0代表低电平,1代表高电平。即可如图点亮
LED闪烁实验
用延时函数即可达到LED闪烁的目的。即就是说一段时间为P21端口输入低电平,此时灯亮。一段时间为P21端口输入高电平,此时灯灭。代码如下:
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P2^1;
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
led=1;
delay(50000);
led=0;
delay(50000);
}
}
typedef unsigned int u16;这一句代表在后续程序中可以直接用u16代表unsigned int,而u16 是无符号整形的数 。
void delay(u16 i)代表自己写的一个延时函数 为了延时当 i = 1 是延时 10us 。
在while后的{}中即为上文所提到的思路,利用延时函数对LED进行闪烁。
LED流水灯实验
此实验的思路是运用循环左移右移函数对接在P2口上的LED依次闪烁
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define led P2
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i=0;
led=0xfe;
delay(50000);
while(1)
{
for(i=0;i<7;i++)
{
led=_crol_(led,2);
delay(50000);
}
for(i=0;i<7;i++)
{
led=_cror_(led,2);
delay(50000);
}
}
}
#define led P2宏定义,因为LED都接在P2口上。
led=0xfe;其中0xfe从16进制转化为2进制为1111 1110.
_crol_这是左移函数后面的小括号中led是左移的值,2是左移的位数。也就是说将我的这个代码烧录到单片机中即可实现每次隔一个灯闪烁。
下面视频即为单片机LED的闪烁实验和流水灯实验。
C51单片机LED小实验