实验思路:
重定义管脚P0.0、P0.1为LED1、LED2
定义一个延时函数delay_10us,用于LED延时
重定义unsigned int 为"U16"
完整代码:
/*****************************程序信息********************************* * 实验名称:控制2颗LED灯依次点亮 * 文件名称:main.c * 版 本:V1.00 * 日 期:2021-11-25 * 编 著:gefon * 说 明:使用普中A7开发版,控制D1、D2两颗LED依次点亮 *******************************声明区*********************************/ #include "reg52.h" sbit LED1=P0^0; sbit LED2=P0^1; typedef unsigned int U16; //对系统数据类型重定义 /*******************************子程序********************************* * 函 数 名 :delay_10us * 函数功能 :延时函数,传入变量ten_us=1时,大约延时10us * 输 入 :ten_us * 输 出 :无 ***********************************************************************/ void delay_10us(U16 ten_us) { while(ten_us--); } /*******************************主程序********************************* * 函 数 名 :main * 函数功能 :主函数 * 输 入 :无 * 输 出 :无 ***********************************************************************/ void main() { while(1) { LED1=0; //点亮D1灯 delay_10us(50000); //晶振为12M时,延时约450ms;晶振为11.0592M时,延时约480ms LED1=1; //熄灭D1灯 /*依次点亮LED时,上一颗LED熄灭后下一颗LED直接点亮,无需延时*/ LED2=0; //点亮D2灯 delay_10us(50000); LED2=1; //熄灭D2灯 } }
实验分析:
程序要求为2颗灯依次点亮,即点亮D1->熄灭D1->点亮D2->熄灭D2。当D1熄灭时即可立即点亮D2,因此D1给高电平后,不需要再做延时处理。