实验思路:
使用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。此方法程序代码量大,代码相对复杂,编写效率低。