STC89C52RC(89C52通用)单片机对LED跑马灯的控制

一、STC89C52RC(89C52)模块介绍

0cf41df3dee64e0b9ad463ea5c5f0af5.png

图片来源:CSDN@夏子曦

二、使用到的LED灯控制模块以及单片机核心原理图

dd5f092dd2e949fa909479d4557b1039.png

2b22c9a74305408593d4c435d060b52c.png

三、布置分析构思

我们需要使用到的引脚用红框标注视

其中LED灯的一端已经接入Vcc,所以另一端的P2端口需要接通低电平才能使LED灯成功点亮

而P2端口又由红框中的端口控制,我们只需要对单片机中的端口进行编译代码控制输出低电平即可控制LED的点亮

四、创建keil文件,并实现编程效果(大致创建流程)

4.1 选项栏中的Project,选择第一个

0514a74675ff45e6a35e0e41b9a340a9.png

4.2 创建存放文件的文件夹以及代码文件(需以.c结尾)

77a102b06ffc449a9a9ff794eeae277d.png

 

03de6e3a64a04a8ba2dce7336cf4925c.png

4.3 将创建好的c文件添加入工程内

右键工程文件夹 选择第三个

然后找到创建好的c后缀文件

把c函数文件添加入工程

506d044bbfbc459d827d3da396eda210.png

4.4 打开c文件进行代码编程

13c6d5144c6a4ce7b868afb60259c425.png

五、代码部分

5.1 使用单片机需引入头文件

{

#include "reg52.h"

}

5.2 延时函数可在编程仿真调试软件上生成

11485419748944faa9325288cb91765b.png

举例 这是一个延时50毫秒的延时函数

{

void Delay50ms(void)    //@12.000MHz
{
    unsigned char data i, j;

    i = 98;
    j = 67;
    do
    {
        while (–j);
    } while (–i);
}
 

}

5.3 主函数部分

在编写程序前提前写好主函数,并运行调试

{void main()
{
    
    while(1)
    {
        
    }
}

}

5.4 LED灯部分

控制LED灯需要定义LED灯的引脚部分,若不定义则默认为开发板引脚

定义为{

LED1=P2^0;//(P需大写)

LED2=P2^1;

LED3=P2^2;

LED4=P2^3;

LED5=P2^4;

LED6=P2^5;

LED7=P2^6;

LED8=P2^7;

}

LED灯控制部分{void LEDRunning()
{
    unsigned int i=0;//多个LED灯的点亮则需要循环控制变量i
    for(i=0;i<3;i++)  //点亮前所有LED灯循环点亮三遍(可验证LED是否能被正常点亮)
     {

//P2默认为P2所有端口,若想单独控制可使用上方单独定义如:LED1=P2^0  使P2^0=0;则可以实现第一个LED灯点亮
         P2=0x00;//所有LED灯均被点亮
         Delay_ms(500);//延时函数
         
         P2=0xff;//所有LED灯均被关闭
         Delay_ms(500);
         
     }
     for(i=0;i<8;i++)//从第一个开始向右依次点亮
        {
            P2=0xff<<i;//依次右移控制函数
            Delay_ms(500);
        }
        //在LED灯被依次点亮八次后,也就是全部点亮后才运行关闭函数
     for(i=0;i<8;i++)//从第一个开始向右依次关闭
        {
            P2=~(0xff<<i);//向右依次点亮函数的反函数,依次关闭
            Delay_ms(500);
        }
}

}

六、完整代码

{

#include "reg52.h"

void Delay_ms(int ms)    //@12.000MHz
{
    unsigned char data i, j;
    while(ms–)
    { 
        i = 2;
        j = 239;
        do
        {
            while (–j);
        } while (–i);
    }
}

void LEDRunning()
{
    unsigned int i=0;
    for(i=0;i<3;i++)
     {
         P2=0x00;
         Delay_ms(500);
         
         P2=0xff;
         Delay_ms(500);
         
     }
     for(i=0;i<8;i++)
        {
            P2=0xff<<i;
            Delay_ms(500);
        }
        
     for(i=0;i<8;i++)
        {
            P2=~(0xff<<i);
            Delay_ms(500);
        }
}

void main()
{
    
    while(1)
    {
        LEDRunning();
    }
}

}

实验现象

LED跑马灯实验

 

 

 

作者:suda857

物联沃分享整理
物联沃-IOTWORD物联网 » STC89C52RC(89C52通用)单片机对LED跑马灯的控制

发表回复