51单片机学习笔记(2)

LED灯闪烁

前提: 学会工程创建与完成LED点亮实验,如果还未学会,请点击如下跳转:51单片机学习笔记(1)

实验前的思考:上一篇学习笔记,我们已经学会了如何点亮一个发光二极管(LED),那么这次我们如何实现让它闪烁呢?我们知道,发光二极管具有单向导电性,并且只有形成电流回路时才能发光,而在单片机中,发光二极管的一端已经接入正极,我们只需在另外一端(IO口)使其接入低电平(0)即可实现点亮,那么如果我们让另一端随一定的时间周期进行高低电平变换,那么我们不就可以实现发光二极管的闪烁了吗!那我们就开始进行实验吧!
- 新建工程,命名为template,新建文档命名为main.c,保存在工程文件夹中。将c文件添加进工程。开始编辑代码。

#include <reg51.h>          //引入51单片机的库文件

typedef unsigned int u16;   //将unsigned int在代码中以u16来代替,即u16 i;是定义一个无符号整型变量i

sbit led = P2^0;            //定义单片机管脚(IO)P2^0为led,该管脚与一个发光二极管连接,并且其一端已接入正极

void delay(u16 i)           //定义延时函数
{
    while(i--);             //使用while函数来实现自减,当i=0时,跳出循环,返回主函数
}

void main()                 //定义主函数,程序从此处进入
{
    while(1)                //定义while循环,条件为1(真),即while一直在循环
    {
        led = 0;            //设置P2^0管脚为低电平,形成回路,LED点亮
        delay(50000);       //调用延时函数,大约延时450ms
        led = 1;            //设置P2^0管脚为高电平,此时发光二极管两端皆为高电平,LED熄灭
        delay(50000);       //调用延时函数,大约延时450ms
    }
}
  • 代码编写完成后,编译一遍,打开烧录软件将编译生成的hex文件写入单片机中进行测试与现象观察。

LED流水灯

实践前的思考: 如何实现LED流水灯?首先我们从流水灯这个概念来理解,流水灯是指当前按循序依次摆放一个又一个的灯泡,然后接下来,灯泡依次点亮,即前者灭后者亮的特殊闪烁方式,上一个实验我们学会了发光二极管(LED)的闪烁,现在我们要实现一排二极管的依此闪烁。首先我们要知道,在单片机的电路里,那一排发光二极管是共阳的,即它们的一端都接入了高电平,那么我们只需依次让每个发光二极管先亮(IO低电平)后灭(IO高电平),即可实现流水灯!那么我们开始实验吧!
这里写图片描述
- 新建工程,命名为template,新建文档命名为main.c,保存在工程文件夹中。将c文件添加进工程。开始编辑代码。

#include <reg51.h>          //引入51单片机的库文件
#include <intrins.h>        //引入含左右移函数的库文件

typedef unsigned int u16;   //将unsigned int在代码中以u16来代替,即u16 i;是定义一个无符号整型变量i
typedef unsigned char u8;   //将unsigned char在代码中以u8来代替,即u8 i;是定义一个无符号符号变量i

#define led P2              //使用宏定义,定义变量led为单片机P2.0-2.7管脚

void delay(u16 i)           //定义延时函
{
    while(i--);             //使用while函数来实现自减,当i=0时,跳出循环,返回主函数
}

void main()                 //定义主函数,程序从此处进入
{
    u8 i;                   //定义无符号型字符变量i
    led = 0xfe;             //对变量led幅值为0xfe,转换为二进制即 1111 1110,即只有P2.0为低电平
    delay(50000);           //调用延时函数,大约延时450ms
    while(1)                //定义while循环,条件为1(真),即while一直在循环
    {
        for(i=0;i<7;i++)    //定义for循环,循环7次
        {
            led = _crol_(led,1);   //调用左移函数,每次左移一位,即1111 1110 ——> 1111 1101,0依次左移一位
            delay(50000);          //调用延时函数,大约延时450ms
        }                          //左移结束后,led = 0111 1111 0x7f
        for(i=0;i<7;i++)           //定义for循环,循环7次
        {
            led = _cror_(led,1);   //调用右移函数,每次左移一位,即0111 1111 ——> 1011 1111,0依次右移一位
            delay(50000);          //调用延时函数,大约延时450ms
        }
    }
}
  • 代码编写完成后,编译一遍,打开烧录软件将编译生成的hex文件写入单片机中进行测试与现象观察。

至此,你又学会了LED闪烁与LED流水灯,祝你一路高歌!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值