×

51单片机学习纪实:1.4.1-使用for循环实现LED流水灯(单独定义每个管脚)_【基础实验3】

一哥 一哥 发表于2021-11-27 20:44:54 浏览1270 评论0

抢沙发发表评论

实验思路:

  1. 使用sbit重定义P0.0-P0.7管脚为LED1-LED8

  2. 定义一个延时函数delay_10us,用于流水灯延时

  3. 重定义数据类型unsigned char为"U8",unsigned int为"U16"


完整代码:

/*****************************程序信息*********************************
* 实验名称:控制LED模块实现单向流水灯效果(for+管脚单独定义)
* 文件名称:main.c
* 版    本:V1.00
* 日    期:2021-11-27
* 编    著:gefon
* 说    明:使用普中A7开发版,控制LED模块8颗LED实现流水灯效果

*******************************声明区*********************************/
#include "reg52.h"

sbit LED1=P0^0;    //对管脚进行重定义
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;

typedef unsigned char U8; //对系统数据类型重定义
typedef unsigned int U16;

/*******************************子程序*********************************
* 函 数 名   :delay_10us
* 函数功能   :延时函数,传入变量ten_us=1时,大约延时10us
* 输    入   :ten_us
* 输    出   :无
***********************************************************************/
void delay_10us(U16 ten_us)
{
    while(ten_us--);
}

/*******************************主程序*********************************
* 函 数 名   :main
* 函数功能   :主函数
* 输    入   :无
* 输    出   :无
***********************************************************************/
void main()
{
    U8 x;
    while(1)
    {
         for(x=1;x>0;x--)
         {
            LED1=0; //点亮D1灯
            delay_10us(50000); //延时约480ms
            LED1=1;    //熄灭D1灯
         }
         for(x=1;x>0;x--)
         {
            LED2=0; //点亮D2灯
            delay_10us(50000);
            LED2=1; //熄灭D2灯
         }
         for(x=1;x>0;x--)
         {
            LED3=0; //点亮D3灯
            delay_10us(50000);
            LED3=1; //熄灭D3灯
         }
         for(x=1;x>0;x--)
         {
            LED4=0; //点亮D4灯
            delay_10us(50000);
            LED4=1; //熄灭D4灯
         }
         for(x=1;x>0;x--)
         {
            LED5=0; //点亮D5灯
            delay_10us(50000);
            LED5=1; //熄灭D5灯
         }
         for(x=1;x>0;x--)
         {
            LED6=0; //点亮D6灯
            delay_10us(50000);
            LED6=1; //熄灭D6灯
         }
         for(x=1;x>0;x--)
         {
            LED7=0; //点亮D7灯
            delay_10us(50000);
            LED7=1; //熄灭D7灯
         }
         for(x=1;x>0;x--)
         {
            LED8=0; //点亮D8灯
            delay_10us(50000);
            LED8=1; //熄灭D8灯
         }
    }
}


实验分析:

此方法需要对每一个用到的管脚进行定义,for函数内依次调用以点亮LED。此方法程序代码量大,代码相对复杂,编写效率低。

群贤毕至

访客