思路:
控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。
这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。
软件中,只需要将这些灯使用一个for循环即可。
代码
#include <reg51.h>
unsigned char PData; //记录当前是哪个状态,值为1表示亮,输出到P口时取反
//延时,本函数是非精确延时,若需要精确延迟则需要根据本函数的汇编语句进行精确计算后调整循环体次数
void delay(unsigned int ms){
unsigned char i;
while(ms--){
for(i=0;i<120;t++){
;
}
}
}
void main(){
unsigned char i=0;
PData=0x00;//全灭状态
while(1){//无限循环亮灭状态
for (i=0;i<8;i++){//从最低位循环到不是常亮的最高位
P1=~(PData+(1<<i));//第i位亮
delay(500);
P1=~PData;//第i位灭
delay(500);
}
}
}