思路:
控制8个LED灯,使用上拉方式控制,引脚高电平灯灭,引脚低电平灯亮。
这8个LED使用同一P口上的所有引脚,假设为P1口中的P1.0-P1.7共8个脚。
软件中,只需要将这些灯使用一个for循环即可。
代码
#include
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< delay(500);
P1=~PData;//第i位灭
delay(500);
}
}
}
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
是用 汇编语言 编程吗?