普中51单片机教程-1.LED

本文详细介绍了如何通过C语言编程控制LED灯,包括基本点亮、延时操作和LED流水灯的实现过程,以及在STC单片机烧录软件中的步骤。
摘要由CSDN通过智能技术生成

持续更新,所使用的51板子如图。

大家也可以参考[1-1] 课程简介_哔哩哔哩_bilibili

1.1点亮一个LED

(1)首先在D盘中创建一个新的文件夹,之后要将我们的工程放入其中

(2)创建工程,选择第一个,然后找到我们创建的文件夹,命名为project,我已经创建过了

(3)输入AT89C52,因为没有STC89C52,选择AT89C52即可,然后点击ok即可

(4)点击否

(5)右键选择第二个,选择我们的.c文件

(6)开始编写代码,结合原理图,具体代码的解释如图

#include <REG51.H>
void main()
{
    P2=0xFE;//高位到低位D7-D0,P2口为低电平才能点亮LED
                    //因此为 1111 1110,
                    //同时转换为十六进制为FE,0x表示为十六进制

}

(7)点击第一个,将我们的hex文件勾选上,即创建hex file

(8)点击第二个编译,看有没有错误

(9)打开烧录软件stc,将单片机通过usb1接口插入电脑中,一般软件会自动识别单片机型号与串口号,如果没有,手动选择,或者看看有没有插好。

(10)点击打开程序文件,找到hex文件,点击打开,点击下载与编程

(11)此时打开单片机的开关,即蓝色的小开关,若本来单片机就开着的,那就重新打开一次,显示操作成功即可

(12)此时单片机的D1会亮起

1.2LED闪烁

我们的思路就是让一个灯亮,然后延时,然后在灭,不断循环

我们的延时函数如何得到,打开stc,找到软件延时计算器,选择我们的频率,频率在我们单片机的晶振上标着,选择我们要的定时时长,1s=1000ms=1000000us,指令集选择STC-Y1,因为它包含我们的型号。具体如下图:

点击生成我们的c代码,将其复制到我们的代码当中

#include <REG51.H>
#include <INTRINS.H>//包含nop
void Delay500ms()        //@11.0592MHz
{
    unsigned char i, j, k;

    _nop_();//空语句
    i = 4;
    j = 129;
    k = 119;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}


void main()
{
    while(1)
    {
        P2=0xFE;//1111 1110,D1亮
        Delay500ms();//延时
        P2=0xFF;//1111 1111,D1灭
        Delay500ms();//延时
    }

}

再将其烧录到单片机中,会发现D1会亮灭,0.5S间隔

led

1.3LED流水灯 

第一种 延时固定

简单的想法就是1111 1110然后延时,然后1111 1101,延时,如此循环往复

第二种 可以修改延时时间

我们将1ms的延时程序进行修改

void Delay1ms()        //@11.0592MHz
{
    unsigned char i, j;

    _nop_();
    i = 2;
    j = 199;
    do
    {
        while (--j);
    } while (--i);
}
 

修改之后的代码

void Delay(unsigned int xms)        //@11.0592MHz
{
    while(xms)
    {
    unsigned char i, j;
    i = 2;
    j = 199;
    do
    {
        while (--j);
    } while (--i);
    xms--;
    }
}

完整代码如下

#include <REG51.H>

void Delay(unsigned int xms)        //@11.0592MHz
{
    while(xms)
    {
    unsigned char i, j;
    i = 2;
    j = 199;
    do
    {
        while (--j);
    } while (--i);
    xms--;
    }
}

void main()
{
    while(1)
    {
        P2=0xFE;//1111 1110
        Delay(1000);
        P2=0xFD;//1111 1101
        Delay(1000);
        P2=0xFB;//1111 1011
        Delay(1000);
        P2=0xF7;//1111 0111
        Delay(1000);
        P2=0xEF;//1110 1111
        Delay(1000);
        P2=0xDF;//1101 1111
        Delay(1000);
        P2=0xBF;//1011 1111
        Delay(1000);
        P2=0x7F;//0111 1111
        Delay(1000);
    }

}
此时可以通过修改函数中xms的值来进行对应的延时,unsigned int表示无符号的整数,即不为负数。

效果如下:

led流水灯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值