单片机编程8个led灯,让最低灯亮,循环左移s

如题所述

思路:

    控制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);
    }
  }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-13
ORG 0000H
LJMP MIAN
ORG 0030H
MAIN:
MOV A,#0FEH
LOOP:
PUSH ACC

ANL A,#0FEH

MOV P0,A

POP ACC

LCALL DELAY

RL A

SJMP LOOP

DELAY:
MOV R2,#100

DELAY1:
MOV R3,#250

DJNZ R3,$

DJNZ R2,DELAY1

RET

END本回答被网友采纳
第2个回答  2014-10-13
是用 汇编语言 编程吗?