文章目录
前言
前面一段之间在学习51单片机,A2单核,最近期末考试完了有时间准备复习整理一下就开始玩STM32了,供大家一起学习交流。
一、LED小灯的原理图分析
如图所示是单片机上面LED模块,对应的实物图如右图所示从左到右依次是D1-D8即管脚从P2^0到P2^7(在数字电路中读芯片管脚时从高位开始写其即0111 1111对应为0xfe)
我们根据所学习的模拟电子技术技术可以清晰明了的知道,这八个LED小灯左端共接高电平VCC,要使我们的小灯导通需要给小灯右端一个低电平即P2接口这段给上逻辑数字电平0,如我要点亮D1,就需要给P2^0一个低电平0。
二、LED小灯的点亮
代码如下所示,依次导入相关库,定义了D1小灯的管脚,引用了烧入软件STC里面延时软件计时器,Open_Light()
函数是用来将LED灯点亮的,正如前面写的原理,给P2^0低电平。
在主函数main()里面调用Open_Light()函数。
/******************** *******************
*** 项目名称:点亮第一个LED小灯
*** 项目效果:LED小灯亮起
*** 连线方式:无
*** 注意事项:无
********************* *******************/
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
/*定义管脚*/
sbit LED1 = P2^0;
/***************************
** 函数名称 :Delay_5s
** 函数作用 :延时5S函数
** 输入 :
** 输出 :
****************************/
void Delay_5s() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
/***************************
** 函数名称 :Open_Light
** 函数作用 :点亮小灯函数
** 输入 :无
** 输出 :无
****************************/
void Open_Light()
{
LED1 = 0;
}
/***************************
** 函数名称 :main
** 函数作用 :主函数
** 输入 :
** 输出 :
****************************/
void main()
{
while(1)
{
Open_Light();
}
}
效果图
![](https://i-blog.csdnimg.cn/blog_migrate/4a52e0bbf69a5716c41b0ef79c7648d5.jpeg)
三、LED流水灯
代码如下所示,依次导入相关库,用宏定义定义LED灯模块的管脚,为了给后面循环小灯做准备。
在LEDcontrol()函数中,先点亮第一个LED小灯,然后通过左右位移函数来实现,()里面是变量和位移位数。
/******************** *******************
*** 项目名称:LED流水灯
*** 项目效果:LED灯循环流水
*** 连线方式:无
*** 注意事项:
********************* *******************/
#include "reg52.h"
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
/*定义管脚*/
#define LED P2
/***************************
** 函数名称 :Delay_2s
** 函数作用 :延时1s函数
** 输入 :
** 输出 :
****************************/
void Delay_2s() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 22;
j = 128;
do
{
while (--j);
} while (--i);
}
/***************************
** 函数名称 :LEDcontrol
** 函数作用 :LED灯循环函数
** 输入 :无
** 输出 :无
****************************/
void LEDcontrol()
{
u16 i = 0;
LED = 0xfe;
Delay_2s();
while(1)
{
for(i=0;i<8;i++)
{
LED = _crol_(LED,1);
Delay_2s();
}
for(i=0;i<8;i++)
{
LED = _cror_(LED,1);
Delay_2s();
}
}
}
/***************************
** 函数名称 :main
** 函数作用 :主函数
** 输入 :
** 输出 :
****************************/
void main()
{
while(1)
{
LEDcontrol();
}
}
效果如下视频:
LED流水灯