实验思路:
使用sbit重定义P0.0-P0.7管脚为LED1-LED8
定义一个延时函数delay_10us,用于流水灯延时
重定义数据类型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。此方法程序代码量大,代码相对复杂,编写效率低。